--- /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.refactoring.nls;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.core.runtime.IPath;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.window.Window;
+
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaModel;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+
+import org.eclipse.jdt.ui.JavaElementComparator;
+import org.eclipse.jdt.ui.JavaElementLabelProvider;
+import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator;
+import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter;
+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;
+
+
+class SourceFirstPackageSelectionDialogField {
+
+ SourceFolderSelectionDialogButtonField fSourceFolderSelection;
+ PackageFragmentSelection fPackageSelection;
+ private Shell fShell;
+
+ public SourceFirstPackageSelectionDialogField(String sourceLabel, String packageLabel, String browseLabel1,
+ String browseLabel2, String statusHint, String dialogTitle, String dialogMessage, String dialogEmptyMessage,
+ ICompilationUnit cu, IDialogFieldListener updateListener, IPackageFragment fragment) {
+ fSourceFolderSelection= new SourceFolderSelectionDialogButtonField(sourceLabel, browseLabel1, new SFStringButtonAdapter());
+
+ fPackageSelection= new PackageFragmentSelection(this, packageLabel, browseLabel2, statusHint,
+ new PackageSelectionStringButtonAdapter(this, dialogTitle, dialogMessage, dialogEmptyMessage));
+ fPackageSelection.setDialogFieldListener(new PackageSelectionDialogFieldListener());
+
+ fPackageSelection.generated_2566189316945185217(this, cu, updateListener, fragment);
+ fSourceFolderSelection.setUpdateListener(updateListener);
+ }
+
+ void setDefaults(IPackageFragment fragment, ICompilationUnit cu) {
+ IJavaElement element= fragment;
+ if (element == null) {
+ element= cu;
+ }
+
+ fSourceFolderSelection.setRoot(searchSourcePackageFragmentRoot(element));
+ fPackageSelection.setPackageFragment(searchPackageFragment(element));
+ }
+
+ private IPackageFragment searchPackageFragment(IJavaElement jElement) {
+ return (IPackageFragment)jElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
+ }
+
+ private IPackageFragmentRoot searchSourcePackageFragmentRoot(IJavaElement jElement) {
+ IJavaElement parent= jElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+ if (parent == null) {
+ return null;
+ }
+
+ IPackageFragmentRoot res= (IPackageFragmentRoot)parent;
+ try {
+ if (res.getKind() == IPackageFragmentRoot.K_SOURCE) {
+ return res;
+ }
+ } catch (JavaModelException e) {
+ // nothing to do
+ }
+
+ return null;
+ }
+
+ class PackageSelectionDialogFieldListener implements IDialogFieldListener {
+
+ public void dialogFieldChanged(DialogField field) {
+ String packName= fPackageSelection.getText();
+ if (packName.length() == 0)
+ fPackageSelection.setStatus(NLSUIMessages.NLSAccessorConfigurationDialog_default);
+ else
+ fPackageSelection.setStatus(""); //$NON-NLS-1$
+ }
+ }
+
+ class SFStringButtonAdapter implements IStringButtonAdapter {
+ public void changeControlPressed(DialogField field) {
+
+ IPackageFragmentRoot newSourceContainer= chooseSourceContainer(fSourceFolderSelection.getRoot());
+ if (newSourceContainer != null) {
+ fSourceFolderSelection.setRoot(newSourceContainer);
+ }
+ }
+ }
+
+ private IPackageFragmentRoot chooseSourceContainer(IJavaElement initElement) {
+ Class<?>[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };
+ TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {
+ @Override
+ public boolean isSelectedValid(Object element) {
+ try {
+ if (element instanceof IJavaProject) {
+ IJavaProject jproject= (IJavaProject)element;
+ IPath path= jproject.getProject().getFullPath();
+ return (jproject.findPackageFragmentRoot(path) != null);
+ } else if (element instanceof IPackageFragmentRoot) {
+ return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE);
+ }
+ return true;
+ } catch (JavaModelException e) {
+ JavaPlugin.log(e.getStatus()); // just log, no ui in validation
+ }
+ return false;
+ }
+ };
+
+ acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class };
+ ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {
+ @Override
+ public boolean select(Viewer viewer, Object parent, Object element) {
+ if (element instanceof IPackageFragmentRoot) {
+ try {
+ return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE);
+ } catch (JavaModelException e) {
+ JavaPlugin.log(e.getStatus()); // just log, no ui in validation
+ return false;
+ }
+ }
+ return super.select(viewer, parent, element);
+ }
+ };
+
+ StandardJavaElementContentProvider provider= new StandardJavaElementContentProvider();
+ ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
+ ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(fShell, labelProvider, provider);
+ dialog.setValidator(validator);
+ dialog.setComparator(new JavaElementComparator());
+ dialog.setTitle(NLSUIMessages.SourceFirstPackageSelectionDialogField_ChooseSourceContainerDialog_title);
+ dialog.setMessage(NLSUIMessages.SourceFirstPackageSelectionDialogField_ChooseSourceContainerDialog_description);
+ dialog.addFilter(filter);
+ dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
+ dialog.setInitialSelection(initElement);
+
+ if (dialog.open() == Window.OK) {
+ Object element= dialog.getFirstResult();
+ if (element instanceof IJavaProject) {
+ IJavaProject jproject= (IJavaProject)element;
+ return jproject.getPackageFragmentRoot(jproject.getProject());
+ } else if (element instanceof IPackageFragmentRoot) {
+ return (IPackageFragmentRoot)element;
+ }
+ return null;
+ }
+ return null;
+ }
+
+
+ public IPackageFragment getSelected() {
+ IPackageFragment res= fPackageSelection.getPackageFragment();
+ return res;
+ }
+
+ public IPackageFragmentRoot getSelectedFragmentRoot() {
+ return fSourceFolderSelection.getRoot();
+ }
+
+ public void setSelected(IPackageFragment newSelection) {
+ fPackageSelection.setPackageFragment(newSelection);
+ fSourceFolderSelection.setRoot(searchSourcePackageFragmentRoot(newSelection));
+ }
+
+ public void createControl(Composite parent, int nOfColumns, int textWidth) {
+ fShell= parent.getShell();
+ PixelConverter converter= new PixelConverter(parent);
+ fSourceFolderSelection.doFillIntoGrid(parent, nOfColumns, textWidth);
+ LayoutUtil.setWidthHint(fSourceFolderSelection.getTextControl(null), converter.convertWidthInCharsToPixels(60));
+
+ fPackageSelection.generated_4193800345033933533(parent, nOfColumns, textWidth, converter);
+ }
+
+ public void generated_4519525910731984718(NLSAccessorConfigurationDialog nlsaccessorconfigurationdialog) {
+ IPackageFragmentRoot root= getSelectedFragmentRoot();
+ if ((root == null) || !root.exists()) {
+ nlsaccessorconfigurationdialog.setInvalid(NLSAccessorConfigurationDialog.IDX_ACCESSOR_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_accessor_package_root_invalid);
+ return;
+ }
+
+ IPackageFragment fragment= getSelected();
+ if ((fragment == null) || !fragment.exists()) {
+ nlsaccessorconfigurationdialog.setInvalid(NLSAccessorConfigurationDialog.IDX_ACCESSOR_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_accessor_package_invalid);
+ return;
+ }
+ nlsaccessorconfigurationdialog.setValid(NLSAccessorConfigurationDialog.IDX_ACCESSOR_PACKAGE);
+ }
+
+}