summaryrefslogtreecommitdiff
path: root/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/composite/CertificateBlock.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/composite/CertificateBlock.java')
-rw-r--r--src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/composite/CertificateBlock.java495
1 files changed, 495 insertions, 0 deletions
diff --git a/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/composite/CertificateBlock.java b/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/composite/CertificateBlock.java
new file mode 100644
index 0000000..2e1f70e
--- /dev/null
+++ b/src/plugins/certmanager/src/com/motorolamobility/studio/android/certmanager/ui/composite/CertificateBlock.java
@@ -0,0 +1,495 @@
+/*
+ * 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.motorolamobility.studio.android.certmanager.ui.composite;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.motorola.studio.android.common.utilities.ui.Country;
+import com.motorola.studio.android.common.utilities.ui.ToolsCountries;
+import com.motorola.studio.android.common.utilities.ui.WidgetsFactory;
+import com.motorola.studio.android.common.utilities.ui.WidgetsUtil;
+import com.motorola.studio.android.wizards.elements.IBaseBlock;
+import com.motorolamobility.studio.android.certmanager.i18n.CertificateManagerNLS;
+
+/**
+ * This class shows the properties to for certificate.
+ */
+public class CertificateBlock implements IBaseBlock
+{
+ private static final String LABEL_DECORATOR = "*"; //$NON-NLS-1$
+
+ private static final int LONG_TEXT_SIZE = 256;
+
+ private static final int MEDIUM_TEXT_SIZE = 128;
+
+ private static final int SMALL_TEXT_SIZE = 64;
+
+ /**
+ * The attribute representing the window with which the user interacts.
+ */
+ private Shell shell;
+
+ /**
+ * Store the composite.
+ */
+ protected Composite parent;
+
+ /**
+ * The key pair alias text field.
+ */
+ private Text textAlias;
+
+ /**
+ * The common name text field.
+ */
+ private Text commonNameText;
+
+ /**
+ * The organization text field.
+ */
+ private Text textOrganization;
+
+ /**
+ * The organization unit text field.
+ */
+ private Text textOrganizationUnit;
+
+ /**
+ * The locality text field.
+ */
+ private Text textLocality;
+
+ /**
+ * The state text field.
+ */
+ private Text textState;
+
+ /**
+ * The country combo.
+ */
+ private Combo comboCountry;
+
+ private Label labelAlias;
+
+ private Control controlToFocus = null;
+
+ /**
+ * This listener is used to save the field that has the focus.
+ * */
+ protected FocusListener focusListener = new FocusListener()
+ {
+
+ @Override
+ public void focusLost(FocusEvent e)
+ {
+ //do nothing...
+ }
+
+ @Override
+ public void focusGained(FocusEvent e)
+ {
+ if (e.widget instanceof Control)
+ {
+ controlToFocus = (Control) e.widget;
+ }
+ }
+ };
+
+ /*
+ * (non-Javadoc)
+ * @seecom.motorola.studio.android.wizards.BaseWizard#
+ * createContentPlugin(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public Composite createContent(Composite parent)
+ {
+ Composite toReturn = WidgetsFactory.createComposite(parent, 1);
+
+ this.parent = parent;
+
+ createBasicInfoArea(toReturn);
+ createDetailedInfoArea(toReturn);
+ createCustomArea(toReturn);
+ setDefaultFocus();
+
+ return toReturn;
+ }
+
+ protected void createCustomArea(Composite parent)
+ {
+ //by default, do nothing
+ }
+
+ /**
+ * Creates Custom Fields to be appended in the properties block
+ * @param dnFieldsArea
+ */
+ protected void createCustomDetailedInfoArea(Composite dnFieldsArea)
+ {
+ //by default, do nothing
+ }
+
+ /**
+ * Create all fields of the distinguished name.
+ *
+ * @param parent The parent composite to add the created fields.
+ */
+ private void createDetailedInfoArea(Composite parent)
+ {
+ //Composite bottomComposite = WidgetsFactory.createComposite(parent);
+
+ Group detailsGroup =
+ WidgetsFactory.createTitledGroup(parent,
+ CertificateManagerNLS.CertificateBlock_DetailedInfoGroupTitle, 2);
+
+ // Creating the common name field
+ WidgetsFactory.createLabel(detailsGroup,
+ CertificateManagerNLS.CertificateBlock_FirstAndLastName + ":"); //$NON-NLS-1$
+ commonNameText = WidgetsFactory.createText(detailsGroup);
+ commonNameText.setTextLimit(MEDIUM_TEXT_SIZE);
+ commonNameText.addListener(SWT.Modify, this);
+ commonNameText.addFocusListener(focusListener);
+
+ // Creating the organization field
+ WidgetsFactory.createLabel(detailsGroup,
+ CertificateManagerNLS.CertificateBlock_Organization + ":"); //$NON-NLS-1$
+ textOrganization = WidgetsFactory.createText(detailsGroup);
+ textOrganization.setTextLimit(MEDIUM_TEXT_SIZE);
+ textOrganization.addListener(SWT.Modify, this);
+ textOrganization.addFocusListener(focusListener);
+
+ // Creating the organization unit field
+ WidgetsFactory.createLabel(detailsGroup,
+ CertificateManagerNLS.CertificateBlock_OrganizationUnit + ":"); //$NON-NLS-1$
+ textOrganizationUnit = WidgetsFactory.createText(detailsGroup);
+ textOrganizationUnit.setTextLimit(MEDIUM_TEXT_SIZE);
+ textOrganizationUnit.addListener(SWT.Modify, this);
+ textOrganizationUnit.addFocusListener(focusListener);
+
+ // Creating the locality field
+ WidgetsFactory.createLabel(detailsGroup,
+ CertificateManagerNLS.CertificateBlock_CityOrLocality + ":"); //$NON-NLS-1$
+ textLocality = WidgetsFactory.createText(detailsGroup);
+ textLocality.setTextLimit(LONG_TEXT_SIZE);
+ textLocality.addListener(SWT.Modify, this);
+ textLocality.addFocusListener(focusListener);
+
+ // Creating the state field
+ WidgetsFactory.createLabel(detailsGroup,
+ CertificateManagerNLS.CertificateBlock_StateOrProvince + ":"); //$NON-NLS-1$
+ textState = WidgetsFactory.createText(detailsGroup);
+ textState.setTextLimit(LONG_TEXT_SIZE);
+ textState.addListener(SWT.Modify, this);
+ textState.addFocusListener(focusListener);
+
+ // Creating the country field
+ WidgetsFactory.createLabel(detailsGroup, CertificateManagerNLS.CertificateBlock_CountryCode
+ + ":"); //$NON-NLS-1$
+ comboCountry = WidgetsFactory.createCombo(detailsGroup);
+ comboCountry.addListener(SWT.Selection, this);
+ comboCountry.addFocusListener(focusListener);
+ for (Country country : ToolsCountries.getInstance().getCountries())
+ {
+ this.comboCountry.add(country.getCountryName());
+ this.comboCountry.setData(country.getCountryName(), country.getCountryCode());
+ }
+ comboCountry.setVisibleItemCount(SMALL_TEXT_SIZE);
+
+ createCustomDetailedInfoArea(detailsGroup);
+ }
+
+ /**
+ * Create the key pair alias field.
+ *
+ * @param parent The parent composite to add the key pair alias field.
+ */
+ private void createBasicInfoArea(Composite parent)
+ {
+ Group groupBasicInfo =
+ WidgetsFactory.createTitledGroup(parent,
+ CertificateManagerNLS.CertificateBlock_BasicInfoGroupTitle, 2);
+
+ labelAlias =
+ WidgetsFactory.createLabel(groupBasicInfo,
+ CertificateManagerNLS.CertificateBlock_AliasName + ":"); //$NON-NLS-1$
+ textAlias = WidgetsFactory.createText(groupBasicInfo);
+ textAlias.setTextLimit(SMALL_TEXT_SIZE);
+ textAlias.addListener(SWT.Modify, this);
+ textAlias.addFocusListener(focusListener);
+
+ createCustomBasicInfoArea(groupBasicInfo);
+ }
+
+ /**
+ * Allow subclasses to add custom required fields to the certificate block.
+ * @param parent The parent composite for the custom required fields.
+ */
+ protected void createCustomBasicInfoArea(Composite parent)
+ {
+ //default implementation does nothing.
+ }
+
+ /**
+ * Decorate required fields using {@link CertificateBlock#decorateText(String)}. Always call the {@code super} implementation when overriding this method.
+ * <br/>
+ * Default required fields are:
+ * <ul>
+ * <li>Alias</li>
+ * </ul>
+ * */
+ protected void decorateRequiredFields()
+ {
+ labelAlias.setText(decorateText(labelAlias.getText()));
+ }
+
+ /**
+ * Decorate required fields by prefixing it with {@link CertificateBlock#LABEL_DECORATOR}.
+ *
+ * @return The decorated text.
+ * */
+ protected String decorateText(String strToDecorate)
+ {
+ return LABEL_DECORATOR.concat(strToDecorate);
+ }
+
+ /**
+ * Obtains the key pair alias defined by user.
+ *
+ * @return The key pair alias.
+ */
+ public String getAlias()
+ {
+ return textAlias.getText().toLowerCase();
+ }
+
+ /**
+ * Obtains the common name defined by user.
+ *
+ * @return The common name.
+ */
+ public String getCommonName()
+ {
+ return commonNameText.getText();
+ }
+
+ /**
+ * Obtains the organization defined by user.
+ *
+ * @return The organization.
+ */
+ public String getOrganization()
+ {
+ return textOrganization.getText();
+ }
+
+ /**
+ * Obtains the organization unit defined by user.
+ *
+ * @return The organization unit.
+ */
+ public String getOrganizationUnit()
+ {
+ return textOrganizationUnit.getText();
+ }
+
+ /**
+ * Obtains the locality defined by user.
+ *
+ * @return The locality.
+ */
+ public String getLocality()
+ {
+ return textLocality.getText();
+ }
+
+ /**
+ * Obtains the state defined by user.
+ *
+ * @return The state.
+ */
+ public String getState()
+ {
+ return textState.getText();
+ }
+
+ /**
+ * Obtains the country defined by user.
+ *
+ * @return The country.
+ */
+ public String getCountry()
+ {
+ String result = new String(); //empty string
+
+ //ensure that there is something selected in the combo before indexing its item list
+ if (comboCountry.getSelectionIndex() >= 0)
+ {
+ result =
+ (String) comboCountry.getData(comboCountry.getItem(comboCountry
+ .getSelectionIndex()));
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if there is no error message set, the alias is not empty and there is at least one detail field non empty.
+ * @see com.motorola.studio.platform.tools.common.ui.composite.BaseBlock#isPageComplete()
+ */
+ @Override
+ public boolean isPageComplete()
+ {
+ return (getErrorMessage() == null)
+ && !WidgetsUtil.isNullOrEmpty(this.textAlias)
+ && (!WidgetsUtil.isNullOrEmpty(this.commonNameText)
+ || !WidgetsUtil.isNullOrEmpty(this.textOrganization)
+ || !WidgetsUtil.isNullOrEmpty(this.textOrganizationUnit)
+ || !WidgetsUtil.isNullOrEmpty(this.textLocality)
+ || !WidgetsUtil.isNullOrEmpty(this.textState) || !WidgetsUtil
+ .isNullOrDeselected(this.comboCountry));
+ }
+
+ /*
+ * (non-Javadoc)
+ * @seecom.motorola.studio.platform.tools.common.ui.composite.BaseBlock#
+ * canFlipToNextPage()
+ */
+ @Override
+ public boolean canFlipToNextPage()
+ {
+ return (getErrorMessage() == null) && isPageComplete();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @seecom.motorola.studio.platform.tools.common.ui.composite.BaseBlock#
+ * getErrorMessage()
+ */
+ @Override
+ public String getErrorMessage()
+ {
+ String toReturn = null;
+
+ if (WidgetsUtil.isNullOrEmpty(textAlias))
+ {
+ toReturn =
+ CertificateManagerNLS.bind(CertificateManagerNLS.CertificateBlock_FieldIsEmpty,
+ CertificateManagerNLS.CertificateBlock_AliasName);
+ }
+ else if (WidgetsUtil.isNullOrEmpty(commonNameText)
+ && (WidgetsUtil.isNullOrEmpty(textOrganization))
+ && (WidgetsUtil.isNullOrEmpty(textOrganizationUnit))
+ && (WidgetsUtil.isNullOrEmpty(textLocality))
+ && (WidgetsUtil.isNullOrEmpty(textState))
+ && (WidgetsUtil.isNullOrDeselected(comboCountry)))
+ {
+ toReturn = CertificateManagerNLS.CertificateBlock_DetailedInfoNonEmptyFieldsRestriction;
+ }
+
+ return toReturn;
+ }
+
+ public Composite createInfoBlock(Composite parent, String alias, String name,
+ String organization, String organizationUnit, String country, String state,
+ String locality)
+ {
+ Composite toReturn = createContent(parent);
+ textAlias.setText(alias);
+ commonNameText.setText(name);
+ textOrganization.setText(organization);
+ textOrganizationUnit.setText(organizationUnit);
+ textLocality.setText(locality);
+ textState.setText(state);
+ int i = 0;
+ boolean found = false;
+ while ((i < comboCountry.getItemCount()) && !found)
+ {
+ String id = (String) comboCountry.getData(comboCountry.getItem(i));
+ if (id.equalsIgnoreCase(country))
+ {
+ comboCountry.select(i);
+ found = true;
+ }
+ i++;
+ }
+
+ textAlias.setEditable(false);
+ commonNameText.setEditable(false);
+ textOrganization.setEditable(false);
+ textOrganizationUnit.setEditable(false);
+ textLocality.setEditable(false);
+ textState.setEditable(false);
+ if (!found)
+ {
+ comboCountry.add(CertificateManagerNLS.CertificateInfoDialog_NotAvailableProperty, 0);
+ comboCountry.select(0);
+ }
+ comboCountry.setEnabled(false);
+
+ return toReturn;
+ }
+
+ @Override
+ public void handleEvent(Event event)
+ {
+ if (this.parent != null)
+ {
+ this.parent.notifyListeners(event.type, event);
+ }
+ }
+
+ @Override
+ public void refresh()
+ {
+ // Empty
+ }
+
+ @Override
+ public void setShell(Shell shell)
+ {
+ this.shell = shell;
+ }
+
+ @Override
+ public Shell getShell()
+ {
+ return shell;
+ }
+
+ @Override
+ public void setDefaultFocus()
+ {
+ controlToFocus = textAlias;
+ }
+
+ @Override
+ public void setFocus()
+ {
+ if (controlToFocus != null)
+ {
+ controlToFocus.setFocus();
+ }
+ }
+}