]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / wizards / buildpaths / newsourcepage / EditFilterAction.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.wizards.buildpaths.newsourcepage;
12
13 import org.eclipse.swt.widgets.Shell;
14
15 import org.eclipse.core.runtime.CoreException;
16 import org.eclipse.core.runtime.IPath;
17
18 import org.eclipse.core.resources.IProject;
19
20 import org.eclipse.jface.layout.PixelConverter;
21 import org.eclipse.jface.operation.IRunnableContext;
22 import org.eclipse.jface.resource.JFaceResources;
23 import org.eclipse.jface.viewers.IStructuredSelection;
24 import org.eclipse.jface.viewers.StructuredSelection;
25 import org.eclipse.jface.window.Window;
26 import org.eclipse.jface.wizard.WizardDialog;
27
28 import org.eclipse.ui.IWorkbenchSite;
29 import org.eclipse.ui.PlatformUI;
30 import org.eclipse.ui.part.ISetSelectionTarget;
31
32 import org.eclipse.jdt.core.IClasspathEntry;
33 import org.eclipse.jdt.core.IJavaElement;
34 import org.eclipse.jdt.core.IJavaProject;
35 import org.eclipse.jdt.core.IPackageFragmentRoot;
36 import org.eclipse.jdt.core.JavaModelException;
37
38 import org.eclipse.jdt.internal.corext.buildpath.BuildpathDelta;
39 import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier;
40
41 import org.eclipse.jdt.ui.PreferenceConstants;
42
43 import org.eclipse.jdt.internal.ui.JavaPluginImages;
44 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
45 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
46 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
47 import org.eclipse.jdt.internal.ui.wizards.buildpaths.EditFilterWizard;
48
49
50 //SelectedElements iff enabled: (IJavaProject || IPackageFragmentRoot) && size == 1
51 public class EditFilterAction extends BuildpathModifierAction {
52
53         public EditFilterAction(IWorkbenchSite site) {
54                 this(site, null, PlatformUI.getWorkbench().getProgressService());
55         }
56
57         public EditFilterAction(IRunnableContext context, ISetSelectionTarget selectionTarget) {
58                 this(null, selectionTarget, context);
59     }
60
61         private EditFilterAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, IRunnableContext context) {
62                 super(site, selectionTarget, BuildpathModifierAction.EDIT_FILTERS);
63
64                 setText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Edit_label);
65                 setImageDescriptor(JavaPluginImages.DESC_ELCL_CONFIGURE_BUILDPATH_FILTERS);
66                 setToolTipText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Edit_tooltip);
67                 setDescription(NewWizardMessages.PackageExplorerActionGroup_FormText_Edit);
68                 setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_CONFIGURE_BUILDPATH_FILTERS);
69         }
70
71         /**
72          * {@inheritDoc}
73          */
74         @Override
75         public String getDetailedDescription() {
76                 if (!isEnabled())
77                         return null;
78
79
80                 return NewWizardMessages.PackageExplorerActionGroup_FormText_Edit;
81         }
82
83         /* (non-Javadoc)
84          * @see org.eclipse.jface.action.Action#run()
85          */
86         @Override
87         public void run() {
88                 Shell shell= getShell();
89
90                 try {
91                         EditFilterWizard wizard= createWizard();
92                         wizard.init(PlatformUI.getWorkbench(), new StructuredSelection(getSelectedElements().get(0)));
93
94                         WizardDialog dialog= new WizardDialog(shell, wizard);
95                         PixelConverter converter= new PixelConverter(JFaceResources.getDialogFont());
96                         dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70), converter.convertHeightInCharsToPixels(20));
97                         dialog.create();
98                         int res= dialog.open();
99                         if (res == Window.OK) {
100                                 BuildpathDelta delta= wizard.generated_4795514865538398845(this);
101
102                                 informListeners(delta);
103
104                                 selectAndReveal(new StructuredSelection(wizard.getCreatedElement()));
105                         }
106
107                         notifyResult(res == Window.OK);
108                 } catch (CoreException e) {
109                         String title= NewWizardMessages.AbstractOpenWizardAction_createerror_title;
110                         String message= NewWizardMessages.AbstractOpenWizardAction_createerror_message;
111                         ExceptionHandler.handle(e, shell, title, message);
112                 }
113         }
114
115         private EditFilterWizard createWizard() throws CoreException {
116                 IJavaProject javaProject= null;
117                 Object firstElement= getSelectedElements().get(0);
118                 if (firstElement instanceof IJavaProject) {
119                         javaProject= (IJavaProject)firstElement;
120                 } else {
121                         javaProject= ((IPackageFragmentRoot)firstElement).getJavaProject();
122                 }
123                 CPListElement[] existingEntries= CPListElement.createFromExisting(javaProject);
124                 CPListElement elementToEdit= findElement((IJavaElement)firstElement, existingEntries);
125                 return new EditFilterWizard(existingEntries, elementToEdit, getOutputLocation(javaProject));
126         }
127
128         private IPath getOutputLocation(IJavaProject javaProject) {
129                 try {
130                         return javaProject.getOutputLocation();
131                 } catch (CoreException e) {
132                         IProject project= javaProject.getProject();
133                         IPath projPath= project.getFullPath();
134                         return projPath.append(PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME));
135                 }
136         }
137
138         private static CPListElement findElement(IJavaElement element, CPListElement[] elements) {
139                 IPath path= element.getPath();
140                 for (int i= 0; i < elements.length; i++) {
141                         CPListElement cur= elements[i];
142                         if (cur.getEntryKind() == IClasspathEntry.CPE_SOURCE && cur.getPath().equals(path)) {
143                                 return cur;
144                         }
145                 }
146                 return null;
147         }
148
149         @Override
150         protected boolean canHandle(IStructuredSelection selection) {
151                 if (selection.size() != 1)
152                         return false;
153
154                 try {
155                         Object element= selection.getFirstElement();
156                         if (element instanceof IJavaProject) {
157                                 return ClasspathModifier.isSourceFolder((IJavaProject)element);
158                         } else if (element instanceof IPackageFragmentRoot) {
159                                 IPackageFragmentRoot packageFragmentRoot= ((IPackageFragmentRoot) element);
160                                 if (packageFragmentRoot.getKind() != IPackageFragmentRoot.K_SOURCE)
161                                         return false;
162
163                                 return packageFragmentRoot.getJavaProject() != null;
164                         }
165                 } catch (JavaModelException e) {
166                 }
167                 return false;
168         }
169 }