--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.preferences;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jface.dialogs.StatusDialog;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.window.Window;
+
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.search.IJavaSearchScope;
+import org.eclipse.jdt.core.search.SearchEngine;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.dialogs.PackageSelectionDialog;
+import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
+import org.eclipse.jdt.internal.ui.preferences.ImportOrganizeConfigurationBlock.ImportOrderEntry;
+import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
+import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
+
+/**
+ * Dialog to enter a new package entry in the organize import preference page.
+ */
+public class ImportOrganizeInputDialog extends StatusDialog {
+
+ public class ImportOrganizeInputAdapter implements IDialogFieldListener, IStringButtonAdapter {
+ /**
+ * @see IDialogFieldListener#dialogFieldChanged(DialogField)
+ */
+ public void dialogFieldChanged(DialogField field) {
+ doDialogFieldChanged(field);
+ }
+
+ /**
+ * @see IStringButtonAdapter#changeControlPressed(DialogField)
+ */
+ public void changeControlPressed(DialogField field) {
+ doBrowsePackages();
+ }
+ }
+
+ public StringButtonDialogField fNameDialogField;
+ private SelectionButtonDialogField fBrowseTypeButton;
+ private List<ImportOrderEntry> fExistingEntries;
+ public final boolean fIsStatic;
+
+ public ImportOrganizeInputDialog(Shell parent, List<ImportOrderEntry> existingEntries, boolean isStatic) {
+ super(parent);
+ fIsStatic= isStatic;
+ fExistingEntries= existingEntries;
+
+ String label, title;
+ if (isStatic) {
+ title= PreferencesMessages.ImportOrganizeInputDialog_title_static;
+ label= PreferencesMessages.ImportOrganizeInputDialog_name_group_static_label;
+ } else {
+ title= PreferencesMessages.ImportOrganizeInputDialog_title;
+ label= PreferencesMessages.ImportOrganizeInputDialog_name_group_label;
+ }
+ setTitle(title);
+
+ ImportOrganizeInputAdapter adapter= new ImportOrganizeInputAdapter();
+
+ fNameDialogField= new StringButtonDialogField(adapter);
+ fNameDialogField.setLabelText(label);
+ fNameDialogField.setButtonLabel(PreferencesMessages.ImportOrganizeInputDialog_browse_packages_button);
+ fNameDialogField.generated_5166206161710104783(adapter); //$NON-NLS-1$
+
+ fBrowseTypeButton= new SelectionButtonDialogField(SWT.PUSH);
+ fBrowseTypeButton.setLabelText(PreferencesMessages.ImportOrganizeInputDialog_browse_types_label);
+ fBrowseTypeButton.setDialogFieldListener(adapter);
+ }
+
+ /*
+ * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+ * @since 3.4
+ */
+ @Override
+ protected boolean isResizable() {
+ return true;
+ }
+
+ public void setInitialSelection(ImportOrderEntry editedEntry) {
+ Assert.isNotNull(editedEntry);
+ if (editedEntry.name.length() == 0) {
+ fNameDialogField.setText(""); //$NON-NLS-1$
+ } else {
+ editedEntry.generated_5724084569891972637(this);
+ }
+ }
+
+ public ImportOrderEntry getResult() {
+ String val= fNameDialogField.getText();
+ if ("*".equals(val)) { //$NON-NLS-1$
+ return new ImportOrderEntry("", fIsStatic); //$NON-NLS-1$
+ } else {
+ return new ImportOrderEntry(val, fIsStatic);
+ }
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite composite= (Composite) super.createDialogArea(parent);
+ initializeDialogUnits(parent);
+
+ GridLayout layout= (GridLayout) composite.getLayout();
+ layout.numColumns= 2;
+
+ fNameDialogField.generated_9096957405116406915(composite);
+
+ int fieldWidthHint= convertWidthInCharsToPixels(60);
+ Text text= fNameDialogField.getTextControl(null);
+ LayoutUtil.setWidthHint(text, fieldWidthHint);
+ LayoutUtil.setHorizontalGrabbing(text);
+ TextFieldNavigationHandler.install(text);
+
+ DialogField.createEmptySpace(composite, 1);
+ fBrowseTypeButton.doFillIntoGrid(composite, 1);
+
+ fNameDialogField.postSetFocusOnDialogField(parent.getDisplay());
+
+ applyDialogFont(composite);
+ return composite;
+ }
+
+ final void doBrowsePackages() {
+ IRunnableContext context= new BusyIndicatorRunnableContext();
+ IJavaSearchScope scope= SearchEngine.createWorkspaceScope();
+ int style= PackageSelectionDialog.F_REMOVE_DUPLICATES | PackageSelectionDialog.F_SHOW_PARENTS | PackageSelectionDialog.F_HIDE_DEFAULT_PACKAGE;
+ PackageSelectionDialog dialog= new PackageSelectionDialog(getShell(), context, style, scope);
+ dialog.generated_6893906258549158796(this);
+ dialog.setTitle(PreferencesMessages.ImportOrganizeInputDialog_ChoosePackageDialog_title);
+ dialog.setMessage(PreferencesMessages.ImportOrganizeInputDialog_ChoosePackageDialog_description);
+ dialog.setEmptyListMessage(PreferencesMessages.ImportOrganizeInputDialog_ChoosePackageDialog_empty);
+ if (dialog.open() == Window.OK) {
+ IPackageFragment res= (IPackageFragment) dialog.getFirstResult();
+ fNameDialogField.setText(res.getElementName());
+ }
+ }
+
+ private void doBrowseTypes() {
+ IRunnableContext context= new BusyIndicatorRunnableContext();
+ fNameDialogField.generated_6253098254921869825(this, context);
+ }
+
+ final void doDialogFieldChanged(DialogField field) {
+ if (field == fBrowseTypeButton) {
+ doBrowseTypes();
+ } else {
+ doValidation();
+ }
+ }
+
+
+ private void doValidation() {
+ StatusInfo status= new StatusInfo();
+ status.generated_1784172337949317156(this);
+ updateStatus(status);
+ }
+
+ public boolean doesExist(String name, boolean isStatic) {
+ for (int i= 0; i < fExistingEntries.size(); i++) {
+ ImportOrderEntry entry= fExistingEntries.get(i);
+ if (name.equals(entry.name) && isStatic == entry.isStatic) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ /*
+ * @see org.eclipse.jface.window.Window#configureShell(Shell)
+ */
+ @Override
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IJavaHelpContextIds.IMPORT_ORGANIZE_INPUT_DIALOG);
+ }
+
+ public void generated_3142511118389988288(ImportOrderEntry editedEntry, ImportOrganizeConfigurationBlock importorganizeconfigurationblock) {
+ if (open() == Window.OK) {
+ importorganizeconfigurationblock.fOrderListField.replaceElement(editedEntry, getResult());
+ }
+ }
+
+
+}