diff options
Diffstat (limited to 'src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewProviderMainPage.java')
-rw-r--r-- | src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewProviderMainPage.java | 345 |
1 files changed, 345 insertions, 0 deletions
diff --git a/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewProviderMainPage.java b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewProviderMainPage.java new file mode 100644 index 0000000..2eb8782 --- /dev/null +++ b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewProviderMainPage.java @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.motorola.studio.android.wizards.buildingblocks; + +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.core.JavaConventions; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IInputValidator; +import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.List; +import org.eclipse.swt.widgets.Listener; + +import com.motorola.studio.android.codeutils.CodeUtilsActivator; +import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS; +import com.motorola.studio.android.model.ContentProvider; +import com.motorola.studio.android.wizards.elements.InputRemoveButtons; + +/** + * Class that implements the Content Provider Wizard Main Page. + */ +public class NewProviderMainPage extends NewBuildingBlocksWizardPage +{ + private List authoritiesList; + + private Button useDefault; + + private static final String NEW_PROVIDER_HELP = CodeUtilsActivator.PLUGIN_ID + ".newcontprov"; + + protected int defaultIndex = -1; + + /* + * Private class that implements an Input Validator for the Input Button. + */ + private class InputButtonValidator implements IInputValidator + { + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String) + */ + public String isValid(String newText) + { + IStatus status = + JavaConventions.validatePackageName(newText, JavaCore.VERSION_1_7, + JavaCore.VERSION_1_7); + if (status.isOK() && getBuildBlock().getAuthoritiesList().contains(newText)) + { + status = + new Status(IStatus.ERROR, CodeUtilsActivator.PLUGIN_ID, + CodeUtilsNLS.ERR_NewProviderMainPage_ErrorMessageAlreadyExists); + } + + if (status.isOK()) + { + Pattern pattern = Pattern.compile("[a-z0-9\\._]+"); + Matcher matcher = pattern.matcher(newText); + + if (!matcher.matches()) + { + status = + new Status( + IStatus.ERROR, + CodeUtilsActivator.PLUGIN_ID, + CodeUtilsNLS.ERR_NewProviderMainPage_InvalidCharactersInAuthority); + } + } + + if (status.isOK() && newText.equalsIgnoreCase(getBuildBlock().getDefaultAuthority())) + { + status = + new Status(IStatus.ERROR, CodeUtilsActivator.PLUGIN_ID, + CodeUtilsNLS.ERR_NewProviderMainPage_ErrorMessageDefaultName); + } + return status.isOK() ? null : status.getMessage(); + } + } + + /* + * Private class that implements a Listener for the Add Button. + */ + private class InputButtonListener implements Listener + { + /* (non-Javadoc) + * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) + */ + public void handleEvent(Event arg0) + { + InputDialog dialog = + new InputDialog(getShell(), + CodeUtilsNLS.UI_NewProviderMainPage_TitleNewAuthority, + CodeUtilsNLS.UI_NewProviderMainPage_MessageAvoidConflicts, + "", new InputButtonValidator()); //$NON-NLS-1$ + if (dialog.open() == Dialog.OK) + { + String authority = dialog.getValue(); + authoritiesList.add(authority); + getBuildBlock().addAuthority(authority); + } + updateStatus(getBuildBlock().getStatus()); + } + } + + /* + * Private class that implements a Listener for the Remove Button. + */ + private class RemoveButtonListener implements Listener + { + /* (non-Javadoc) + * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) + */ + public void handleEvent(Event arg0) + { + int selectionIndex = authoritiesList.getSelectionIndex(); + if (selectionIndex != defaultIndex) + { + String authoritySelected = authoritiesList.getItem(selectionIndex); + authoritiesList.remove(selectionIndex); + getBuildBlock().removeAuthority(authoritySelected); + updateStatus(getBuildBlock().getStatus()); + } + } + } + + /* + * Private class that implements a Listener for the Use Default Button. + */ + private class UseDefaultButtonListener implements Listener + { + /* (non-Javadoc) + * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) + */ + public void handleEvent(Event arg0) + { + java.util.List<String> asList = Arrays.asList(authoritiesList.getItems()); + if (useDefault.getSelection() + && !asList.contains(getBuildBlock().getDefaultAuthority())) + { + getBuildBlock().addAuthority(getBuildBlock().getDefaultAuthority()); + authoritiesList.add(getBuildBlock().getDefaultAuthority(), 0); + defaultIndex = authoritiesList.indexOf(getBuildBlock().getDefaultAuthority()); + } + else if (!useDefault.getSelection()) + { + getBuildBlock().removeAuthority(getBuildBlock().getDefaultAuthority()); + authoritiesList.remove(getBuildBlock().getDefaultAuthority()); + defaultIndex = -1; + } + updateStatus(getBuildBlock().getStatus()); + } + } + + /* + * Private class that implements a Listener for the Authorities Listener + */ + private class AuthoritiesListListener implements Listener + { + InputRemoveButtons inputRemoveButtons; + + /** + * Default constructor + * + * @param addRemoveButtons The AddRemoveButtons composite + */ + public AuthoritiesListListener(InputRemoveButtons addRemoveButtons) + { + this.inputRemoveButtons = addRemoveButtons; + } + + /* (non-Javadoc) + * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) + */ + public void handleEvent(Event arg0) + { + int selectionCount = authoritiesList.getSelectionCount(); + boolean enabled = selectionCount > 0; + if (selectionCount == 1) + { + enabled = + !getBuildBlock().getDefaultAuthority().equals( + authoritiesList.getItem(authoritiesList.getSelectionIndex())); + } + inputRemoveButtons.getRemoveButton().setEnabled(enabled); + updateStatus(getBuildBlock().getStatus()); + } + } + + /** + * Default constructor. + * + * @param buildBlock The content provider building block model. + */ + protected NewProviderMainPage(ContentProvider buildBlock) + { + super(buildBlock, CodeUtilsNLS.UI_NewProviderMainPage_WizardTitle); + } + + /* (non-Javadoc) + * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getBuildBlock() + */ + @Override + public ContentProvider getBuildBlock() + { + return (ContentProvider) super.getBuildBlock(); + } + + /* (non-Javadoc) + * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#createIntermediateControls(org.eclipse.swt.widgets.Composite) + */ + @Override + protected void createIntermediateControls(Composite parent) + { + + Label authoritiesLabel = new Label(parent, SWT.NONE); + GridData gridData = new GridData(); + gridData.verticalAlignment = GridData.BEGINNING; + authoritiesLabel.setLayoutData(gridData); + authoritiesLabel.setText(CodeUtilsNLS.UI_NewProviderMainPage_LabelAuthorities); + authoritiesList = new List(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); + gridData = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1); + gridData.heightHint = convertHeightInCharsToPixels(3); + authoritiesList.setLayoutData(gridData); + + final InputRemoveButtons inputRemoveButtons = new InputRemoveButtons(parent); + setButtonLayoutData(inputRemoveButtons.getInputButton()); + setButtonLayoutData(inputRemoveButtons.getRemoveButton()); + inputRemoveButtons.getRemoveButton().setEnabled(false); + inputRemoveButtons.getInputButton().addListener(SWT.Selection, new InputButtonListener()); + inputRemoveButtons.getRemoveButton().addListener(SWT.Selection, new RemoveButtonListener()); + new Label(parent, SWT.NONE); + useDefault = new Button(parent, SWT.CHECK); + useDefault.setText(CodeUtilsNLS.UI_NewProviderMainPage_OptionUseDefault); + gridData = new GridData(); + gridData.horizontalSpan = 3; + useDefault.setLayoutData(gridData); + useDefault.setSelection(true); + + String defaultAuthority = getBuildBlock().getDefaultAuthority(); + authoritiesList.add(defaultAuthority); + defaultIndex = 0; + getBuildBlock().addAuthority(defaultAuthority); + + useDefault.addListener(SWT.Selection, new UseDefaultButtonListener()); + authoritiesList.addListener(SWT.Selection, new AuthoritiesListListener(inputRemoveButtons)); + + } + + /* (non-Javadoc) + * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#typeNameChanged() + */ + @Override + protected IStatus typeNameChanged() + { + if (authoritiesList != null) + { + String defaultAuthority = getBuildBlock().getDefaultAuthority(); + if (defaultIndex != -1) + { + getBuildBlock().removeAuthority(authoritiesList.getItem(defaultIndex)); + if ((defaultAuthority != null) && (defaultAuthority.length() > 0)) + { + + if (!getBuildBlock().containsAuthority(defaultAuthority)) + { + authoritiesList.setItem(defaultIndex, defaultAuthority); + getBuildBlock().addAuthority(defaultAuthority); + } + else + { + authoritiesList.remove(defaultIndex); + defaultIndex = -1; + } + } + else + { + authoritiesList.remove(defaultIndex); + defaultIndex = -1; + } + } + } + return super.typeNameChanged(); + } + + /* (non-Javadoc) + * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getMethods() + */ + @Override + protected Method[] getMethods() + { + return new Method[0]; + } + + /* (non-Javadoc) + * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getDefaultMessage() + */ + @Override + public String getDefaultMessage() + { + return CodeUtilsNLS.UI_NewProviderMainPage_SubtitleCreateContentProvider; + } + + /* (non-Javadoc) + * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getWizardTitle() + */ + @Override + public String getWizardTitle() + { + return CodeUtilsNLS.UI_NewProviderMainPage_TitleContentProvider; + } + + /** + * Gets the help ID to be used for attaching + * context sensitive help. + * + * Classes that extends this class and want to set + * their on help should override this method + */ + @Override + protected String getHelpId() + { + return NEW_PROVIDER_HELP; + } +} |