]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
72dfde01fa8c549ffc1afbbeca54a322050fbea5
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui / org / eclipse / jdt / internal / ui / wizards / buildpaths / newsourcepage / ResetAllOutputFoldersAction.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 java.lang.reflect.InvocationTargetException;
14 import java.util.ArrayList;
15 import java.util.List;
16
17 import org.eclipse.core.runtime.CoreException;
18 import org.eclipse.core.runtime.IProgressMonitor;
19 import org.eclipse.core.runtime.NullProgressMonitor;
20 import org.eclipse.core.runtime.SubProgressMonitor;
21
22 import org.eclipse.jface.operation.IRunnableContext;
23 import org.eclipse.jface.operation.IRunnableWithProgress;
24 import org.eclipse.jface.viewers.IStructuredSelection;
25
26 import org.eclipse.ui.IWorkbenchSite;
27 import org.eclipse.ui.part.ISetSelectionTarget;
28
29 import org.eclipse.jdt.core.IClasspathEntry;
30 import org.eclipse.jdt.core.IJavaElement;
31 import org.eclipse.jdt.core.IJavaProject;
32 import org.eclipse.jdt.core.IPackageFragmentRoot;
33 import org.eclipse.jdt.core.JavaModelException;
34
35 import org.eclipse.jdt.internal.corext.buildpath.BuildpathDelta;
36 import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier;
37
38 import org.eclipse.jdt.internal.ui.JavaPlugin;
39 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
40 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
41 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElementAttribute;
42
43 public class ResetAllOutputFoldersAction extends BuildpathModifierAction {
44
45         private final IRunnableContext fContext;
46         private final IJavaProject fJavaProject;
47
48
49         public ResetAllOutputFoldersAction(IRunnableContext context, IJavaProject project, ISetSelectionTarget selectionTarget) {
50                 this(null, selectionTarget, context, project);
51     }
52
53         public ResetAllOutputFoldersAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, IRunnableContext context, IJavaProject javaProject) {
54                 super(site, selectionTarget, BuildpathModifierAction.RESET_ALL_OUTPUT_FOLDERS);
55
56                 fContext= context;
57                 fJavaProject= javaProject;
58
59                 setText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Reset_tooltip);
60                 setToolTipText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Reset_tooltip);
61     }
62
63         /**
64          * {@inheritDoc}
65          */
66         @Override
67         public String getDetailedDescription() {
68                 return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_ResetAllOutputFolders;
69         }
70
71         /**
72          * {@inheritDoc}
73          */
74         @Override
75         public void run() {
76                 final IRunnableWithProgress runnable= new IRunnableWithProgress() {
77                         public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
78                                 try {
79                                         resetOutputFolders(fJavaProject, monitor);
80                                 } catch (CoreException e) {
81                                         throw new InvocationTargetException(e);
82                                 }
83                         }
84                 };
85                 try {
86                 fContext.run(false, false, runnable);
87         } catch (InvocationTargetException e) {
88                 if (e.getCause() instanceof CoreException) {
89                                 showExceptionDialog((CoreException)e.getCause(), NewWizardMessages.RemoveFromBuildpathAction_ErrorTitle);
90                         } else {
91                                 JavaPlugin.log(e);
92                         }
93         } catch (InterruptedException e) {
94         }
95         }
96
97         private List<Object> resetOutputFolders(IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
98                 if (monitor == null)
99                         monitor= new NullProgressMonitor();
100                 try {
101                         IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
102                         monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_ResetOutputFolder, roots.length + 10);
103                         List<CPListElementAttribute> entries= new ArrayList<CPListElementAttribute>();
104                         for (int i= 0; i < roots.length; i++) {
105                                 monitor.worked(1);
106                                 IPackageFragmentRoot root= roots[i];
107                                 if (root.isArchive() || root.isExternal())
108                                         continue;
109                                 IClasspathEntry entry= root.getRawClasspathEntry();
110                                 CPListElement element= CPListElement.createFromExisting(entry, project);
111                                 CPListElementAttribute outputFolder= new CPListElementAttribute(element, CPListElement.OUTPUT, element.getAttribute(CPListElement.OUTPUT), true);
112                                 entries.add(outputFolder);
113                         }
114                         return reset(entries, project, new SubProgressMonitor(monitor, 10));
115                 } finally {
116                         monitor.done();
117                 }
118         }
119
120         private List<Object> reset(List<CPListElementAttribute> selection, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
121             if (monitor == null)
122                 monitor= new NullProgressMonitor();
123         try {
124                 monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Resetting, selection.size());
125                 List<CPListElement> entries= ClasspathModifier.getExistingEntries(project);
126                 List<Object> result= new ArrayList<Object>();
127                 for (int i= 0; i < selection.size(); i++) {
128                         Object element= selection.get(i);
129                         if (element instanceof IJavaElement) {
130                                 IJavaElement javaElement= (IJavaElement) element;
131                                 IPackageFragmentRoot root;
132                                 if (element instanceof IJavaProject)
133                                         root= project.getPackageFragmentRoot(project.getResource());
134                                 else
135                                         root= (IPackageFragmentRoot) element;
136                                 CPListElement entry= ClasspathModifier.getClasspathEntry(entries, root);
137                                 ClasspathModifier.resetFilters(javaElement, entry, project, new SubProgressMonitor(monitor, 1));
138                                 result.add(javaElement);
139                         } else {
140                                 CPListElement selElement= ((CPListElementAttribute) element).getParent();
141                                 CPListElement entry= ClasspathModifier.getClasspathEntry(entries, selElement);
142                                 CPListElementAttribute outputFolder= ClasspathModifier.resetOutputFolder(entry, project);
143                                 result.add(outputFolder);
144                         }
145                 }
146
147                 ClasspathModifier.commitClassPath(entries, project, null);
148
149                 BuildpathDelta delta= new BuildpathDelta(getToolTipText());
150                 delta.setNewEntries(entries.toArray(new CPListElement[entries.size()]));
151                 informListeners(delta);
152
153                 return result;
154         } finally {
155                 monitor.done();
156         }
157     }
158
159         @Override
160         protected boolean canHandle(IStructuredSelection elements) {
161                 return true;
162         }
163 }