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.wizards.buildpaths.newsourcepage;
13 import java.lang.reflect.InvocationTargetException;
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
18 import org.eclipse.core.runtime.CoreException;
19 import org.eclipse.core.runtime.IProgressMonitor;
20 import org.eclipse.core.runtime.NullProgressMonitor;
21 import org.eclipse.core.runtime.SubProgressMonitor;
23 import org.eclipse.jface.operation.IRunnableContext;
24 import org.eclipse.jface.operation.IRunnableWithProgress;
25 import org.eclipse.jface.viewers.IStructuredSelection;
26 import org.eclipse.jface.viewers.StructuredSelection;
28 import org.eclipse.ui.IWorkbenchSite;
29 import org.eclipse.ui.PlatformUI;
30 import org.eclipse.ui.part.ISetSelectionTarget;
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;
38 import org.eclipse.jdt.internal.corext.buildpath.BuildpathDelta;
39 import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier;
41 import org.eclipse.jdt.internal.ui.JavaPlugin;
42 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
43 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
44 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElementAttribute;
46 //Warning: This is unused and untested code. Images and descriptions are missing too.
47 //SelectedElements iff enabled: IJavaProject || IPackageFragmentRoot || CPListElementAttribute
48 public class ResetAction extends BuildpathModifierAction {
50 private final IRunnableContext fContext;
52 public ResetAction(IWorkbenchSite site) {
53 this(site, null, PlatformUI.getWorkbench().getProgressService());
56 public ResetAction(IRunnableContext context, ISetSelectionTarget selectionTarget) {
57 this(null, selectionTarget, context);
60 public ResetAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, IRunnableContext context) {
61 super(site, selectionTarget, BuildpathModifierAction.RESET);
65 setText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Reset_tooltip);
66 setToolTipText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Reset_tooltip);
73 public String getDetailedDescription() {
77 Iterator<?> iterator= getSelectedElements().iterator();
78 Object p= iterator.next();
79 while (iterator.hasNext()) {
80 Object q= iterator.next();
82 (p instanceof CPListElementAttribute && !(q instanceof CPListElementAttribute)) ||
83 (q instanceof CPListElementAttribute && !(p instanceof CPListElementAttribute))
85 return NewWizardMessages.PackageExplorerActionGroup_FormText_Default_Reset;
89 if (p instanceof CPListElementAttribute) {
90 return NewWizardMessages.PackageExplorerActionGroup_FormText_SetOutputToDefault;
92 return NewWizardMessages.PackageExplorerActionGroup_FormText_ResetFilters;
101 final IRunnableWithProgress runnable= new IRunnableWithProgress() {
102 public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
104 Object firstElement= getSelectedElements().get(0);
105 IJavaProject project= null;
106 if (firstElement instanceof IJavaProject) {
107 project= (IJavaProject)firstElement;
108 } else if (firstElement instanceof IPackageFragmentRoot) {
109 project= ((IPackageFragmentRoot)firstElement).getJavaProject();
111 project= ((CPListElementAttribute)firstElement).getParent().getJavaProject();
114 List<Object> result= reset(getSelectedElements(), project, monitor);
115 selectAndReveal(new StructuredSelection(result));
116 } catch (CoreException e) {
117 throw new InvocationTargetException(e);
122 fContext.run(false, false, runnable);
123 } catch (InvocationTargetException e) {
124 if (e.getCause() instanceof CoreException) {
125 showExceptionDialog((CoreException)e.getCause(), ""); //$NON-NLS-1$
129 } catch (InterruptedException e) {
133 private List<Object> reset(List<?> selection, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
135 monitor= new NullProgressMonitor();
137 monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_Resetting, selection.size());
138 List<CPListElement> entries= ClasspathModifier.getExistingEntries(project);
139 List<Object> result= new ArrayList<Object>();
140 for (int i= 0; i < selection.size(); i++) {
141 Object element= selection.get(i);
142 if (element instanceof IJavaElement) {
143 IJavaElement javaElement= (IJavaElement) element;
144 IPackageFragmentRoot root;
145 if (element instanceof IJavaProject)
146 root= project.getPackageFragmentRoot(project.getResource());
148 root= (IPackageFragmentRoot) element;
149 CPListElement entry= ClasspathModifier.getClasspathEntry(entries, root);
150 ClasspathModifier.resetFilters(javaElement, entry, project, new SubProgressMonitor(monitor, 1));
151 result.add(javaElement);
153 CPListElement selElement= ((CPListElementAttribute) element).getParent();
154 CPListElement entry= ClasspathModifier.getClasspathEntry(entries, selElement);
155 CPListElementAttribute outputFolder= ClasspathModifier.resetOutputFolder(entry, project);
156 result.add(outputFolder);
160 ClasspathModifier.commitClassPath(entries, project, null);
162 BuildpathDelta delta= new BuildpathDelta(getToolTipText());
163 delta.setNewEntries(entries.toArray(new CPListElement[entries.size()]));
164 informListeners(delta);
173 protected boolean canHandle(IStructuredSelection elements) {
175 for (Iterator<?> iterator= elements.iterator(); iterator.hasNext();) {
176 Object element= iterator.next();
177 if (element instanceof IJavaProject) {
178 IJavaProject project= (IJavaProject)element;
179 if (!project.isOnClasspath(project))
182 IClasspathEntry entry= ClasspathModifier.getClasspathEntryFor(project.getPath(), project, IClasspathEntry.CPE_SOURCE);
183 if (entry.getInclusionPatterns().length == 0 && entry.getExclusionPatterns().length == 0)
187 } else if (element instanceof IPackageFragmentRoot) {
188 if (ClasspathModifier.filtersSet((IPackageFragmentRoot)element))
190 } else if (element instanceof CPListElementAttribute) {
191 if (!ClasspathModifier.isDefaultOutputFolder((CPListElementAttribute)element))
197 } catch (JavaModelException e) {