protected void saveSettings(IDialogSettings settings) {
    ISecurePreferences preferences = getPreferences(settings.getName());
    if (preferences == null) {
      // only in case it is not possible to create secured storage in
      // default location -> in that case do not persist settings
      return;
    }

    try {
      preferences.putBoolean(S_SIGN_JARS, fButton.getSelection(), true);
      preferences.put(S_KEYSTORE, fKeystoreText.getText().trim(), true);
      preferences.put(S_ALIAS, fAliasText.getText().trim(), true);
      preferences.put(S_PASSWORD, fPasswordText.getText().trim(), true);
      preferences.put(S_KEYPASS, fKeypassText.getText().trim(), true);

      // bug387565 - for keys which are starting with this bugfix to be
      // stored
      // in secured storage, replace value in settings with empty string
      // to avoid keeping sensitive info in plain text
      String[] obsoleted = new String[] {S_KEYSTORE, S_ALIAS, S_PASSWORD, S_KEYPASS};
      for (String key : obsoleted) {
        if (settings.get(key) != null) {
          settings.put(key, ""); // $NON-NLS-1$
        }
      }
    } catch (StorageException e) {
      PDEPlugin.log(
          "Failed to store JarSigning settings in secured preferences store"); //$NON-NLS-1$
    }
  }
  public Control createControl(Composite parent) {
    Composite comp = new Composite(parent, SWT.NONE);
    comp.setLayout(new GridLayout(3, false));
    comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    fButton = new Button(comp, SWT.CHECK);
    fButton.setText(PDEUIMessages.AdvancedPluginExportPage_signButton);
    GridData gd = new GridData();
    gd.horizontalSpan = 3;
    fButton.setLayoutData(gd);
    fButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            updateGroup(fButton.getSelection());
            fPage.pageChanged();
          }
        });

    fKeystoreLabel = createLabel(comp, PDEUIMessages.AdvancedPluginExportPage_keystore);
    fKeystoreText = createText(comp, 1);

    fBrowseButton = new Button(comp, SWT.PUSH);
    fBrowseButton.setText(PDEUIMessages.ExportWizard_browse);
    fBrowseButton.setLayoutData(new GridData());
    SWTUtil.setButtonDimensionHint(fBrowseButton);
    fBrowseButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            FileDialog dialog = new FileDialog(fPage.getShell(), SWT.OPEN);
            String path = fKeystoreText.getText();
            if (path.trim().length() == 0)
              path = PDEPlugin.getWorkspace().getRoot().getLocation().toString();
            dialog.setFileName(path);
            String res = dialog.open();
            if (res != null) {
              fKeystoreText.setText(res);
            }
          }
        });

    fKeypassLabel = createLabel(comp, PDEUIMessages.JARSigningTab_keypass);
    fKeypassText = createText(comp, 2);
    fKeypassText.setEchoChar('*');

    fAliasLabel = createLabel(comp, PDEUIMessages.AdvancedPluginExportPage_alias);
    fAliasText = createText(comp, 2);

    fPasswordLabel = createLabel(comp, PDEUIMessages.AdvancedPluginExportPage_password);
    fPasswordText = createText(comp, 2);
    fPasswordText.setEchoChar('*');

    Dialog.applyDialogFont(comp);
    PlatformUI.getWorkbench().getHelpSystem().setHelp(comp, IHelpContextIds.ADVANCED_PLUGIN_EXPORT);
    return comp;
  }
 protected String[] getSigningInfo() {
   if (fButton.getSelection()) {
     return new String[] {
       fAliasText.getText().trim(),
       fKeystoreText.getText().trim(),
       fPasswordText.getText().trim(),
       fKeypassText.getText().trim()
     };
   }
   return null;
 }
 private void updateGroup(boolean enabled) {
   fKeystoreLabel.setEnabled(enabled);
   fKeystoreText.setEnabled(enabled);
   fBrowseButton.setEnabled(enabled);
   fAliasLabel.setEnabled(enabled);
   fAliasText.setEnabled(enabled);
   fPasswordLabel.setEnabled(enabled);
   fPasswordText.setEnabled(enabled);
   fKeypassLabel.setEnabled(enabled);
   fKeypassText.setEnabled(enabled);
 }
 protected String validate() {
   String error = null;
   if (fButton.getSelection()) {
     if (fKeystoreText.getText().trim().length() == 0) {
       error = PDEUIMessages.AdvancedPluginExportPage_noKeystore;
     } else if (fAliasText.getText().trim().length() == 0) {
       error = PDEUIMessages.AdvancedPluginExportPage_noAlias;
     } else if (fPasswordText.getText().trim().length() == 0) {
       error = PDEUIMessages.AdvancedPluginExportPage_noPassword;
     }
   }
   return error;
 }
 protected Text createText(Composite group, int span) {
   Text text = new Text(group, SWT.SINGLE | SWT.BORDER);
   GridData gd = new GridData(GridData.FILL_HORIZONTAL);
   gd.horizontalSpan = span;
   text.setLayoutData(gd);
   text.addModifyListener(
       new ModifyListener() {
         @Override
         public void modifyText(ModifyEvent e) {
           fPage.pageChanged();
         }
       });
   return text;
 }
  protected void initialize(IDialogSettings settings) {
    ISecurePreferences preferences = getPreferences(settings.getName());
    if (preferences == null) {
      // only in case it is not possible to create secured storage in
      // default location -> in that case default values are used
      return;
    }

    String keystore = ""; // $NON-NLS-1$
    String keypass = ""; // $NON-NLS-1$
    String alias = ""; // $NON-NLS-1$
    String password = ""; // $NON-NLS-1$
    boolean signJars = false;
    if (preferences.keys().length <= 0) {
      // nothing stored in secured preferences, check settings for values
      // from before bug387565 fix
      keystore = getString(settings, S_KEYSTORE);
      keypass = getString(settings, S_KEYPASS);
      alias = getString(settings, S_ALIAS);
      password = getString(settings, S_PASSWORD);
      signJars = getBoolean(settings, S_SIGN_JARS);
    } else {
      // from secured preferences after bug387565 fix
      keystore = getString(preferences, S_KEYSTORE);
      keypass = getString(preferences, S_KEYPASS);
      alias = getString(preferences, S_ALIAS);
      password = getString(preferences, S_PASSWORD);
      signJars = getBoolean(preferences, S_SIGN_JARS);
    }

    fKeystoreText.setText(keystore);
    fKeypassText.setText(keypass);
    fAliasText.setText(alias);
    fPasswordText.setText(password);
    fButton.setSelection(signJars);
    updateGroup(fButton.getSelection());
  }