]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / wizards / buildpaths / newsourcepage / ExcludeFromBuildpathAction.java
CommitLineData
1b2798f6
EK
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 *******************************************************************************/
11package org.eclipse.jdt.internal.ui.wizards.buildpaths.newsourcepage;
12
13import java.lang.reflect.InvocationTargetException;
14import java.util.ArrayList;
15import java.util.Iterator;
16import java.util.List;
17
18import org.eclipse.core.runtime.CoreException;
19import org.eclipse.core.runtime.IProgressMonitor;
20import org.eclipse.core.runtime.NullProgressMonitor;
21import org.eclipse.core.runtime.SubProgressMonitor;
22
23import org.eclipse.core.resources.IResource;
24
25import org.eclipse.jface.action.IMenuManager;
26import org.eclipse.jface.operation.IRunnableContext;
27import org.eclipse.jface.operation.IRunnableWithProgress;
28import org.eclipse.jface.viewers.IStructuredSelection;
29import org.eclipse.jface.viewers.StructuredSelection;
30
31import org.eclipse.ui.IWorkbenchSite;
32import org.eclipse.ui.PlatformUI;
33import org.eclipse.ui.part.ISetSelectionTarget;
34
35import org.eclipse.jdt.core.ICompilationUnit;
36import org.eclipse.jdt.core.IJavaElement;
37import org.eclipse.jdt.core.IJavaProject;
38import org.eclipse.jdt.core.IPackageFragment;
39import org.eclipse.jdt.core.IPackageFragmentRoot;
40import org.eclipse.jdt.core.JavaModelException;
41
42import org.eclipse.jdt.internal.corext.buildpath.BuildpathDelta;
43import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier;
44import org.eclipse.jdt.internal.corext.util.Messages;
45
46import org.eclipse.jdt.ui.JavaElementLabels;
47
48import org.eclipse.jdt.internal.ui.JavaPlugin;
49import org.eclipse.jdt.internal.ui.JavaPluginImages;
50import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
51import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
52
53//SelectedElements iff enabled: IPackageFragment || ICompilationUnit
54public class ExcludeFromBuildpathAction extends BuildpathModifierAction {
55
56 private final IRunnableContext fContext;
57
58 public ExcludeFromBuildpathAction(IWorkbenchSite site) {
59 this(site, null, PlatformUI.getWorkbench().getProgressService());
60 }
61
62 public ExcludeFromBuildpathAction(IRunnableContext context, ISetSelectionTarget selectionTarget) {
63 this(null, selectionTarget, context);
64 }
65
66 private ExcludeFromBuildpathAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, IRunnableContext context) {
67 super(site, selectionTarget, BuildpathModifierAction.EXCLUDE);
68
69 fContext= context;
70
71 setText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Exclude_label);
72 setImageDescriptor(JavaPluginImages.DESC_ELCL_EXCLUDE_FROM_BUILDPATH);
73 setToolTipText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Exclude_tooltip);
74 setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_EXCLUDE_FROM_BUILDPATH);
75 }
76
77 /**
78 * {@inheritDoc}
79 */
80 @Override
81 public String getDetailedDescription() {
82 if (!isEnabled())
83 return null;
84
85 if (getSelectedElements().size() != 1)
86 return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_Exclude;
87
88 IJavaElement elem= (IJavaElement) getSelectedElements().get(0);
89 String name= ClasspathModifier.escapeSpecialChars(JavaElementLabels.getElementLabel(elem, JavaElementLabels.ALL_DEFAULT));
90 if (elem instanceof IPackageFragment) {
91 return Messages.format(NewWizardMessages.PackageExplorerActionGroup_FormText_ExcludePackage, name);
92 } else if (elem instanceof ICompilationUnit) {
93 return Messages.format(NewWizardMessages.PackageExplorerActionGroup_FormText_ExcludeFile, name);
94 }
95
96 return null;
97 }
98
99 /**
100 * {@inheritDoc}
101 */
102 @Override
103 public void run() {
104 final IJavaProject project;
105 Object object= getSelectedElements().get(0);
106 if (object instanceof ICompilationUnit) {
107 project= ((ICompilationUnit)object).getJavaProject();
108 } else {
109 project= ((IPackageFragment)object).getJavaProject();
110 }
111
112 try {
113 final IRunnableWithProgress runnable= new IRunnableWithProgress() {
114 public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
115 try {
116 List<IResource> result= exclude(getSelectedElements(), project, monitor);
117 selectAndReveal(new StructuredSelection(result));
118 } catch (CoreException e) {
119 throw new InvocationTargetException(e);
120 }
121 }
122 };
123 fContext.run(false, false, runnable);
124 } catch (final InvocationTargetException e) {
125 if (e.getCause() instanceof CoreException) {
126 showExceptionDialog((CoreException)e.getCause(), NewWizardMessages.ExcludeFromBuildathAction_ErrorTitle);
127 } else {
128 JavaPlugin.log(e);
129 }
130 } catch (final InterruptedException e) {
131 }
132 }
133
134 private List<IResource> exclude(List<?> javaElements, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
135 if (monitor == null)
136 monitor= new NullProgressMonitor();
137 try {
138 monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Excluding, javaElements.size() + 4);
139
140 List<CPListElement> existingEntries= ClasspathModifier.getExistingEntries(project);
141 List<IResource> resources= new ArrayList<IResource>();
142 for (int i= 0; i < javaElements.size(); i++) {
143 IJavaElement javaElement= (IJavaElement) javaElements.get(i);
144 IPackageFragmentRoot root= (IPackageFragmentRoot) javaElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
145 CPListElement entry= ClasspathModifier.getClasspathEntry(existingEntries, root);
146
147 IResource resource= ClasspathModifier.exclude(javaElement, entry, project, new SubProgressMonitor(monitor, 1));
148 if (resource != null) {
149 resources.add(resource);
150 }
151 }
152
153 ClasspathModifier.commitClassPath(existingEntries, project, new SubProgressMonitor(monitor, 4));
154
155 BuildpathDelta delta= new BuildpathDelta(getToolTipText());
156 delta.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
157 informListeners(delta);
158
159 return resources;
160 } finally {
161 monitor.done();
162 }
163 }
164
165 @Override
166 protected boolean canHandle(IStructuredSelection elements) {
167 if (elements.size() == 0)
168 return false;
169
170 for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
171 Object element= iter.next();
172 if (element instanceof IPackageFragment) {
173 IPackageFragment fragment= (IPackageFragment)element;
174 if (ClasspathModifier.isDefaultFragment(fragment))
175 return false;
176 if (ClasspathModifier.isInExternalOrArchive(fragment))
177 return false;
178 } else if (element instanceof ICompilationUnit) {
179 } else {
180 return false;
181 }
182 }
183 return true;
184 }
185
186 public void generated_575490892565823665(IMenuManager menu) {
187 if (isEnabled())
188 menu.add(this);
189 }
190
191}