1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.refactoring.nls;
13 import org.eclipse.swt.widgets.Composite;
14 import org.eclipse.swt.widgets.Shell;
16 import org.eclipse.core.runtime.IPath;
18 import org.eclipse.core.resources.ResourcesPlugin;
20 import org.eclipse.jface.layout.PixelConverter;
21 import org.eclipse.jface.viewers.ILabelProvider;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.jface.viewers.ViewerFilter;
24 import org.eclipse.jface.window.Window;
26 import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
28 import org.eclipse.jdt.core.ICompilationUnit;
29 import org.eclipse.jdt.core.IJavaElement;
30 import org.eclipse.jdt.core.IJavaModel;
31 import org.eclipse.jdt.core.IJavaProject;
32 import org.eclipse.jdt.core.IPackageFragment;
33 import org.eclipse.jdt.core.IPackageFragmentRoot;
34 import org.eclipse.jdt.core.JavaCore;
35 import org.eclipse.jdt.core.JavaModelException;
37 import org.eclipse.jdt.ui.JavaElementComparator;
38 import org.eclipse.jdt.ui.JavaElementLabelProvider;
39 import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
41 import org.eclipse.jdt.internal.ui.JavaPlugin;
42 import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator;
43 import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter;
44 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
45 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
46 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
47 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
50 class SourceFirstPackageSelectionDialogField {
52 SourceFolderSelectionDialogButtonField fSourceFolderSelection;
53 PackageFragmentSelection fPackageSelection;
56 public SourceFirstPackageSelectionDialogField(String sourceLabel, String packageLabel, String browseLabel1,
57 String browseLabel2, String statusHint, String dialogTitle, String dialogMessage, String dialogEmptyMessage,
58 ICompilationUnit cu, IDialogFieldListener updateListener, IPackageFragment fragment) {
59 fSourceFolderSelection= new SourceFolderSelectionDialogButtonField(sourceLabel, browseLabel1, new SFStringButtonAdapter());
61 fPackageSelection= new PackageFragmentSelection(this, packageLabel, browseLabel2, statusHint,
62 new PackageSelectionStringButtonAdapter(this, dialogTitle, dialogMessage, dialogEmptyMessage));
63 fPackageSelection.setDialogFieldListener(new PackageSelectionDialogFieldListener());
65 fPackageSelection.generated_2566189316945185217(this, cu, updateListener, fragment);
66 fSourceFolderSelection.setUpdateListener(updateListener);
69 void setDefaults(IPackageFragment fragment, ICompilationUnit cu) {
70 IJavaElement element= fragment;
71 if (element == null) {
75 fSourceFolderSelection.setRoot(searchSourcePackageFragmentRoot(element));
76 fPackageSelection.setPackageFragment(searchPackageFragment(element));
79 private IPackageFragment searchPackageFragment(IJavaElement jElement) {
80 return (IPackageFragment)jElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
83 private IPackageFragmentRoot searchSourcePackageFragmentRoot(IJavaElement jElement) {
84 IJavaElement parent= jElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
89 IPackageFragmentRoot res= (IPackageFragmentRoot)parent;
91 if (res.getKind() == IPackageFragmentRoot.K_SOURCE) {
94 } catch (JavaModelException e) {
101 class PackageSelectionDialogFieldListener implements IDialogFieldListener {
103 public void dialogFieldChanged(DialogField field) {
104 String packName= fPackageSelection.getText();
105 if (packName.length() == 0)
106 fPackageSelection.setStatus(NLSUIMessages.NLSAccessorConfigurationDialog_default);
108 fPackageSelection.setStatus(""); //$NON-NLS-1$
112 class SFStringButtonAdapter implements IStringButtonAdapter {
113 public void changeControlPressed(DialogField field) {
115 IPackageFragmentRoot newSourceContainer= chooseSourceContainer(fSourceFolderSelection.getRoot());
116 if (newSourceContainer != null) {
117 fSourceFolderSelection.setRoot(newSourceContainer);
122 private IPackageFragmentRoot chooseSourceContainer(IJavaElement initElement) {
123 Class<?>[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class };
124 TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) {
126 public boolean isSelectedValid(Object element) {
128 if (element instanceof IJavaProject) {
129 IJavaProject jproject= (IJavaProject)element;
130 IPath path= jproject.getProject().getFullPath();
131 return (jproject.findPackageFragmentRoot(path) != null);
132 } else if (element instanceof IPackageFragmentRoot) {
133 return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE);
136 } catch (JavaModelException e) {
137 JavaPlugin.log(e.getStatus()); // just log, no ui in validation
143 acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class };
144 ViewerFilter filter= new TypedViewerFilter(acceptedClasses) {
146 public boolean select(Viewer viewer, Object parent, Object element) {
147 if (element instanceof IPackageFragmentRoot) {
149 return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE);
150 } catch (JavaModelException e) {
151 JavaPlugin.log(e.getStatus()); // just log, no ui in validation
155 return super.select(viewer, parent, element);
159 StandardJavaElementContentProvider provider= new StandardJavaElementContentProvider();
160 ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
161 ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(fShell, labelProvider, provider);
162 dialog.setValidator(validator);
163 dialog.setComparator(new JavaElementComparator());
164 dialog.setTitle(NLSUIMessages.SourceFirstPackageSelectionDialogField_ChooseSourceContainerDialog_title);
165 dialog.setMessage(NLSUIMessages.SourceFirstPackageSelectionDialogField_ChooseSourceContainerDialog_description);
166 dialog.addFilter(filter);
167 dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
168 dialog.setInitialSelection(initElement);
170 if (dialog.open() == Window.OK) {
171 Object element= dialog.getFirstResult();
172 if (element instanceof IJavaProject) {
173 IJavaProject jproject= (IJavaProject)element;
174 return jproject.getPackageFragmentRoot(jproject.getProject());
175 } else if (element instanceof IPackageFragmentRoot) {
176 return (IPackageFragmentRoot)element;
184 public IPackageFragment getSelected() {
185 IPackageFragment res= fPackageSelection.getPackageFragment();
189 public IPackageFragmentRoot getSelectedFragmentRoot() {
190 return fSourceFolderSelection.getRoot();
193 public void setSelected(IPackageFragment newSelection) {
194 fPackageSelection.setPackageFragment(newSelection);
195 fSourceFolderSelection.setRoot(searchSourcePackageFragmentRoot(newSelection));
198 public void createControl(Composite parent, int nOfColumns, int textWidth) {
199 fShell= parent.getShell();
200 PixelConverter converter= new PixelConverter(parent);
201 fSourceFolderSelection.doFillIntoGrid(parent, nOfColumns, textWidth);
202 LayoutUtil.setWidthHint(fSourceFolderSelection.getTextControl(null), converter.convertWidthInCharsToPixels(60));
204 fPackageSelection.generated_4193800345033933533(parent, nOfColumns, textWidth, converter);
207 public void generated_4519525910731984718(NLSAccessorConfigurationDialog nlsaccessorconfigurationdialog) {
208 IPackageFragmentRoot root= getSelectedFragmentRoot();
209 if ((root == null) || !root.exists()) {
210 nlsaccessorconfigurationdialog.setInvalid(NLSAccessorConfigurationDialog.IDX_ACCESSOR_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_accessor_package_root_invalid);
214 IPackageFragment fragment= getSelected();
215 if ((fragment == null) || !fragment.exists()) {
216 nlsaccessorconfigurationdialog.setInvalid(NLSAccessorConfigurationDialog.IDX_ACCESSOR_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_accessor_package_invalid);
219 nlsaccessorconfigurationdialog.setValid(NLSAccessorConfigurationDialog.IDX_ACCESSOR_PACKAGE);