]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-after/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui refactoring / org / eclipse / jdt / internal / ui / refactoring / nls / NLSAccessorConfigurationDialog.java
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
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.refactoring.nls;
12
13 import java.util.ArrayList;
14 import java.util.List;
15
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.layout.GridLayout;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.swt.widgets.Shell;
21 import org.eclipse.swt.widgets.Text;
22
23 import org.eclipse.core.runtime.IPath;
24 import org.eclipse.core.runtime.IStatus;
25 import org.eclipse.core.runtime.Path;
26
27 import org.eclipse.core.resources.IFile;
28
29 import org.eclipse.jface.dialogs.Dialog;
30 import org.eclipse.jface.dialogs.StatusDialog;
31 import org.eclipse.jface.window.Window;
32
33 import org.eclipse.ui.PlatformUI;
34 import org.eclipse.ui.dialogs.ElementListSelectionDialog;
35 import org.eclipse.ui.progress.IProgressService;
36
37 import org.eclipse.jdt.core.ICompilationUnit;
38 import org.eclipse.jdt.core.IJavaElement;
39 import org.eclipse.jdt.core.IJavaProject;
40 import org.eclipse.jdt.core.IPackageFragment;
41 import org.eclipse.jdt.core.IPackageFragmentRoot;
42 import org.eclipse.jdt.core.JavaModelException;
43 import org.eclipse.jdt.core.search.IJavaSearchConstants;
44 import org.eclipse.jdt.core.search.IJavaSearchScope;
45 import org.eclipse.jdt.core.search.SearchEngine;
46
47 import org.eclipse.jdt.internal.corext.refactoring.nls.NLSRefactoring;
48 import org.eclipse.jdt.internal.corext.util.JavaConventionsUtil;
49 import org.eclipse.jdt.internal.corext.util.Messages;
50
51 import org.eclipse.jdt.ui.JavaElementLabelProvider;
52
53 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
54 import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog;
55 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
56 import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
57 import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
58 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
59 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
60 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
61 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
62 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
63 import org.eclipse.jdt.internal.ui.wizards.dialogfields.Separator;
64 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
65 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
66
67 public class NLSAccessorConfigurationDialog extends StatusDialog {
68
69
70         public SourceFirstPackageSelectionDialogField fResourceBundlePackage;
71         public StringButtonDialogField fResourceBundleFile;
72         public SourceFirstPackageSelectionDialogField fAccessorPackage;
73         public StringDialogField fAccessorClassName;
74         public StringDialogField fSubstitutionPattern;
75
76         public NLSRefactoring fRefactoring;
77
78         private IStatus[] fStati;
79
80         private static final int IDX_ACCESSOR_CLASS= 0;
81         static final int IDX_ACCESSOR_PACKAGE= 1;
82         public static final int IDX_SUBST_PATTERN= 2;
83         private static final int IDX_BUNDLE_NAME= 3;
84         private static final int IDX_BUNDLE_PACKAGE= 4;
85
86         public class AccessorAdapter implements IDialogFieldListener, IStringButtonAdapter {
87                 public void dialogFieldChanged(DialogField field) {
88                         validateAll();
89                 }
90
91                 public void changeControlPressed(DialogField field) {
92                         if (field == fResourceBundleFile) {
93                                 browseForPropertyFile();
94                         } else if (field == fAccessorClassName) {
95                                 browseForAccessorClass();
96                         }
97                 }
98
99                 public void generated_5739290750974121258(NLSRefactoring refactoring, NLSAccessorConfigurationDialog nlsaccessorconfigurationdialog, ICompilationUnit cu) {
100                         nlsaccessorconfigurationdialog.fAccessorPackage= new SourceFirstPackageSelectionDialogField(NLSUIMessages.NLSAccessorConfigurationDialog_accessor_path,
101                                         NLSUIMessages.NLSAccessorConfigurationDialog_accessor_package,
102                                         NLSUIMessages.NLSAccessorConfigurationDialog_browse1,
103                                         NLSUIMessages.NLSAccessorConfigurationDialog_browse2,
104                                         NLSUIMessages.NLSAccessorConfigurationDialog_default_package,
105                                         NLSUIMessages.NLSAccessorConfigurationDialog_accessor_dialog_title,
106                                         NLSUIMessages.NLSAccessorConfigurationDialog_accessor_dialog_message,
107                                         NLSUIMessages.NLSAccessorConfigurationDialog_accessor_dialog_emtpyMessage,
108                                         cu, this, refactoring.getAccessorClassPackage());
109                 
110                         nlsaccessorconfigurationdialog.fAccessorClassName= nlsaccessorconfigurationdialog.createStringButtonField(NLSUIMessages.NLSAccessorConfigurationDialog_className,
111                                         NLSUIMessages.NLSAccessorConfigurationDialog_browse6, this);
112                         nlsaccessorconfigurationdialog.fSubstitutionPattern= nlsaccessorconfigurationdialog.createStringField(NLSUIMessages.NLSAccessorConfigurationDialog_substitutionPattern, this);
113                 
114                         nlsaccessorconfigurationdialog.fResourceBundlePackage= new SourceFirstPackageSelectionDialogField(NLSUIMessages.NLSAccessorConfigurationDialog_property_path,
115                                         NLSUIMessages.NLSAccessorConfigurationDialog_property_package,
116                                         NLSUIMessages.NLSAccessorConfigurationDialog_browse3,
117                                         NLSUIMessages.NLSAccessorConfigurationDialog_browse4,
118                                         NLSUIMessages.NLSAccessorConfigurationDialog_default_package,
119                                         NLSUIMessages.NLSAccessorConfigurationDialog_property_dialog_title,
120                                         NLSUIMessages.NLSAccessorConfigurationDialog_property_dialog_message,
121                                         NLSUIMessages.NLSAccessorConfigurationDialog_property_dialog_emptyMessage,
122                                         cu, this, nlsaccessorconfigurationdialog.fRefactoring.getResourceBundlePackage());
123                 
124                         nlsaccessorconfigurationdialog.fResourceBundleFile= nlsaccessorconfigurationdialog.createStringButtonField(NLSUIMessages.NLSAccessorConfigurationDialog_property_file_name,
125                                         NLSUIMessages.NLSAccessorConfigurationDialog_browse5, this);
126                 
127                         nlsaccessorconfigurationdialog.initFields();
128                 }
129         }
130
131
132         public NLSAccessorConfigurationDialog(Shell parent, NLSRefactoring refactoring) {
133                 super(parent);
134                 fRefactoring= refactoring;
135                 fStati= new IStatus[] { StatusInfo.OK_STATUS, StatusInfo.OK_STATUS, StatusInfo.OK_STATUS, StatusInfo.OK_STATUS, StatusInfo.OK_STATUS };
136
137                 setTitle(NLSUIMessages.NLSAccessorConfigurationDialog_title);
138
139                 AccessorAdapter updateListener= new AccessorAdapter();
140
141                 ICompilationUnit cu= refactoring.getCu();
142
143                 updateListener.generated_5739290750974121258(refactoring, this, cu);
144         }
145
146         /*
147          * @see org.eclipse.jface.dialogs.Dialog#isResizable()
148          * @since 3.4
149          */
150         @Override
151         protected boolean isResizable() {
152                 return true;
153         }
154
155         private void initFields() {
156                 initAccessorClassFields();
157                 String resourceBundleName= fRefactoring.getResourceBundleName();
158                 fResourceBundleFile.setText(resourceBundleName != null ? resourceBundleName : (NLSRefactoring.DEFAULT_PROPERTY_FILENAME + NLSRefactoring.PROPERTY_FILE_EXT));
159         }
160
161         private void initAccessorClassFields() {
162                 fRefactoring.generated_9166475369688586640(this);
163         }
164
165         @Override
166         protected Control createDialogArea(Composite ancestor) {
167                 Composite parent= (Composite) super.createDialogArea(ancestor);
168
169                 final int nOfColumns= 4;
170
171                 initializeDialogUnits(ancestor);
172
173                 GridLayout layout= (GridLayout) parent.getLayout();
174                 layout.numColumns= nOfColumns;
175                 parent.setLayout(layout);
176
177                 createAccessorPart(parent, nOfColumns, convertWidthInCharsToPixels(40));
178
179                 Separator s= new Separator(SWT.SEPARATOR | SWT.HORIZONTAL);
180                 s.doFillIntoGrid(parent, nOfColumns);
181
182                 createPropertyPart(parent, nOfColumns, convertWidthInCharsToPixels(40));
183
184                 Dialog.applyDialogFont(parent);
185                 PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.EXTERNALIZE_WIZARD_PROPERTIES_FILE_PAGE);
186                 validateAll();
187                 return parent;
188         }
189
190
191         private void createAccessorPart(Composite parent, final int nOfColumns, int textWidth) {
192                 createLabel(parent, NLSUIMessages.NLSAccessorConfigurationDialog_resourceBundle_title, nOfColumns);
193                 fAccessorPackage.createControl(parent, nOfColumns, textWidth);
194
195                 fAccessorClassName.doFillIntoGrid(parent, nOfColumns);
196                 Text accessorClassText= fAccessorClassName.getTextControl(null);
197                 LayoutUtil.setWidthHint(accessorClassText, convertWidthInCharsToPixels(60));
198                 Text substitutionPatternText= fSubstitutionPattern.generated_8817070770227069187(parent, nOfColumns, accessorClassText);
199                 LayoutUtil.setWidthHint(substitutionPatternText, convertWidthInCharsToPixels(60));
200                 TextFieldNavigationHandler.install(substitutionPatternText);
201
202                 fSubstitutionPattern.setEnabled(!fRefactoring.isEclipseNLS());
203         }
204
205         private void createPropertyPart(Composite parent, final int nOfColumns, final int textWidth) {
206                 createLabel(parent, NLSUIMessages.NLSAccessorConfigurationDialog_property_location, nOfColumns);
207                 fResourceBundlePackage.createControl(parent, nOfColumns, textWidth);
208
209                 fResourceBundleFile.doFillIntoGrid(parent, nOfColumns);
210                 LayoutUtil.setWidthHint(fResourceBundleFile.getTextControl(null), convertWidthInCharsToPixels(60));
211         }
212
213         private void createLabel(Composite parent, final String text, final int N_OF_COLUMNS) {
214                 Separator label= new Separator(SWT.NONE);
215                 label.generated_661964316458443499(parent, text, N_OF_COLUMNS, this);
216         }
217
218         private void browseForPropertyFile() {
219                 ElementListSelectionDialog dialog= new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider());
220                 dialog.setIgnoreCase(false);
221                 dialog.setTitle(NLSUIMessages.NLSAccessorConfigurationDialog_Property_File_Selection);
222                 dialog.setMessage(NLSUIMessages.NLSAccessorConfigurationDialog_Choose_the_property_file);
223                 dialog.setElements(createFileListInput());
224                 dialog.setFilter('*' + NLSRefactoring.PROPERTY_FILE_EXT);
225                 if (dialog.open() == Window.OK) {
226                         IFile selectedFile= (IFile) dialog.getFirstResult();
227                         if (selectedFile != null)
228                                 fResourceBundleFile.setText(selectedFile.getName());
229                 }
230         }
231
232         protected void browseForAccessorClass() {
233                 IProgressService service= PlatformUI.getWorkbench().getProgressService();
234                 IPackageFragmentRoot root= fAccessorPackage.getSelectedFragmentRoot();
235
236                 IJavaSearchScope scope= root != null ? SearchEngine.createJavaSearchScope(new IJavaElement[] { root }) : SearchEngine.createWorkspaceScope();
237
238                 FilteredTypesSelectionDialog  dialog= new FilteredTypesSelectionDialog (getShell(), false,
239                         service, scope, IJavaSearchConstants.CLASS);
240                 dialog.generated_6914054201347997029(this);
241
242
243         }
244
245         private Object[] createFileListInput() {
246                 try {
247
248                         IPackageFragment fPkgFragment= fResourceBundlePackage.getSelected();
249                         if (fPkgFragment == null)
250                                 return new Object[0];
251                         List<Object> result= new ArrayList<Object>(1);
252                         Object[] nonjava= fPkgFragment.getNonJavaResources();
253                         for (int i= 0; i < nonjava.length; i++) {
254                                 if (isPropertyFile(nonjava[i]))
255                                         result.add(nonjava[i]);
256                         }
257                         return result.toArray();
258
259                 } catch (JavaModelException e) {
260                         ExceptionHandler.handle(e, NLSUIMessages.NLSAccessorConfigurationDialog_externalizing, NLSUIMessages .NLSAccessorConfigurationDialog_exception);
261                         return new Object[0];
262                 }
263         }
264
265         private static boolean isPropertyFile(Object o) {
266                 if (!(o instanceof IFile))
267                         return false;
268                 IFile file= (IFile) o;
269                 return (NLSRefactoring.PROPERTY_FILE_EXT.equals('.' + file.getFileExtension()));
270         }
271
272         /**
273          * checks all entered values delegates to the specific validate methods these methods
274          * update the refactoring
275          */
276         private void validateAll() {
277                 validateSubstitutionPattern();
278
279                 validateAccessorClassName();
280                 checkPackageFragment();
281
282                 validatePropertyFilename();
283                 validatePropertyPackage();
284
285                 updateStatus(StatusUtil.getMostSevere(fStati));
286         }
287
288         private void validateAccessorClassName() {
289                 String className= fAccessorClassName.getText();
290
291                 IStatus status= JavaConventionsUtil.validateJavaTypeName(className, fAccessorPackage.getSelectedFragmentRoot());
292                 if (status.getSeverity() == IStatus.ERROR) {
293                         setInvalid(IDX_ACCESSOR_CLASS, status.getMessage());
294                         return;
295                 }
296
297                 if (className.indexOf('.') != -1) {
298                         setInvalid(IDX_ACCESSOR_CLASS, NLSUIMessages.NLSAccessorConfigurationDialog_no_dot);
299                         return;
300                 }
301
302                 setValid(IDX_ACCESSOR_CLASS);
303         }
304
305         private void validatePropertyFilename() {
306                 String fileName= fResourceBundleFile.getText();
307                 if ((fileName == null) || (fileName.length() == 0)) {
308                         setInvalid(IDX_BUNDLE_NAME, NLSUIMessages.NLSAccessorConfigurationDialog_enter_name);
309                         return;
310                 }
311
312                 if (!fileName.endsWith(NLSRefactoring.PROPERTY_FILE_EXT)) {
313                         setInvalid(IDX_BUNDLE_NAME, Messages.format(NLSUIMessages.NLSAccessorConfigurationDialog_file_name_must_end, NLSRefactoring.PROPERTY_FILE_EXT));
314                         return;
315                 }
316
317                 setValid(IDX_BUNDLE_NAME);
318         }
319
320         private void validatePropertyPackage() {
321
322                 IPackageFragmentRoot root= fResourceBundlePackage.getSelectedFragmentRoot();
323                 if ((root == null) || !root.exists()) {
324                         setInvalid(IDX_BUNDLE_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_property_package_root_invalid);
325                         return;
326                 }
327
328                 IPackageFragment fragment= fResourceBundlePackage.getSelected();
329                 if ((fragment == null) || !fragment.exists()) {
330                         setInvalid(IDX_BUNDLE_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_property_package_invalid);
331                         return;
332                 }
333
334                 String pkgName= fragment.getElementName();
335
336                 IStatus status= JavaConventionsUtil.validatePackageName(pkgName, root);
337                 if ((pkgName.length() > 0) && (status.getSeverity() == IStatus.ERROR)) {
338                         setInvalid(IDX_BUNDLE_PACKAGE, status.getMessage());
339                         return;
340                 }
341
342                 IPath pkgPath= new Path(pkgName.replace('.', IPath.SEPARATOR)).makeRelative();
343
344                 IJavaProject project= fRefactoring.getCu().getJavaProject();
345                 try {
346                         IJavaElement element= project.findElement(pkgPath);
347                         if (element == null || !element.exists()) {
348                                 setInvalid(IDX_BUNDLE_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_must_exist);
349                                 return;
350                         }
351                         IPackageFragment fPkgFragment= (IPackageFragment) element;
352                         if (!PackageBrowseAdapter.canAddPackage(fPkgFragment)) {
353                                 setInvalid(IDX_BUNDLE_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_incorrect_package);
354                                 return;
355                         }
356                         if (!PackageBrowseAdapter.canAddPackageRoot((IPackageFragmentRoot) fPkgFragment.getParent())) {
357                                 setInvalid(IDX_BUNDLE_PACKAGE, NLSUIMessages.NLSAccessorConfigurationDialog_incorrect_package);
358                                 return;
359                         }
360                 } catch (JavaModelException e) {
361                         setInvalid(IDX_BUNDLE_PACKAGE, e.getStatus().getMessage());
362                         return;
363                 }
364
365                 setValid(IDX_BUNDLE_PACKAGE);
366         }
367
368         private void checkPackageFragment() {
369                 fAccessorPackage.generated_4519525910731984718(this);
370         }
371
372         private void validateSubstitutionPattern() {
373                 fSubstitutionPattern.generated_3001064280044801264(this);
374         }
375
376         public void setInvalid(int idx, String msg) {
377                 fStati[idx]= new StatusInfo(IStatus.ERROR, msg);
378         }
379
380         public void setValid(int idx) {
381                 fStati[idx]= StatusInfo.OK_STATUS;
382         }
383
384         /* (non-Javadoc)
385          * @see org.eclipse.jface.dialogs.Dialog#okPressed()
386          */
387         @Override
388         protected void okPressed() {
389                 updateRefactoring();
390                 super.okPressed();
391         }
392
393
394         void updateRefactoring() {
395                 fRefactoring.generated_71626766676242111(this);
396         }
397
398         private StringDialogField createStringField(String label, AccessorAdapter updateListener) {
399                 StringDialogField field= new StringDialogField();
400                 return field.generated_8488595924036788377(label, updateListener);
401         }
402
403         private StringButtonDialogField createStringButtonField(String label, String button, AccessorAdapter adapter) {
404                 StringButtonDialogField field= new StringButtonDialogField(adapter);
405                 return field.generated_4200346176631110618(label, button, adapter);
406         }
407
408 }