KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > ui > wizards > buildpaths > newsourcepage > EditFilterAction


1 /*******************************************************************************
2  * Copyright (c) 2000, 2007 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.util.ArrayList JavaDoc;
14
15 import org.eclipse.core.runtime.CoreException;
16 import org.eclipse.core.runtime.IPath;
17
18 import org.eclipse.core.resources.IProject;
19 import org.eclipse.core.resources.IResource;
20
21 import org.eclipse.swt.widgets.Shell;
22
23 import org.eclipse.jface.operation.IRunnableContext;
24 import org.eclipse.jface.resource.JFaceResources;
25 import org.eclipse.jface.viewers.IStructuredSelection;
26 import org.eclipse.jface.viewers.StructuredSelection;
27 import org.eclipse.jface.window.Window;
28 import org.eclipse.jface.wizard.WizardDialog;
29
30 import org.eclipse.ui.IWorkbenchSite;
31 import org.eclipse.ui.PlatformUI;
32 import org.eclipse.ui.part.ISetSelectionTarget;
33
34 import org.eclipse.jdt.core.IClasspathEntry;
35 import org.eclipse.jdt.core.IJavaElement;
36 import org.eclipse.jdt.core.IJavaProject;
37 import org.eclipse.jdt.core.IPackageFragmentRoot;
38 import org.eclipse.jdt.core.JavaModelException;
39
40 import org.eclipse.jdt.internal.corext.buildpath.BuildpathDelta;
41 import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier;
42
43 import org.eclipse.jdt.ui.PreferenceConstants;
44
45 import org.eclipse.jdt.internal.ui.JavaPluginImages;
46 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
47 import org.eclipse.jdt.internal.ui.util.PixelConverter;
48 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
49 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
50 import org.eclipse.jdt.internal.ui.wizards.buildpaths.EditFilterWizard;
51
52 //SelectedElements iff enabled: (IJavaProject || IPackageFragmentRoot) && size == 1
53
public class EditFilterAction extends BuildpathModifierAction {
54     
55     public EditFilterAction(IWorkbenchSite site) {
56         this(site, null, PlatformUI.getWorkbench().getProgressService());
57     }
58     
59     public EditFilterAction(IRunnableContext context, ISetSelectionTarget selectionTarget) {
60         this(null, selectionTarget, context);
61     }
62     
63     private EditFilterAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, IRunnableContext context) {
64         super(site, selectionTarget, BuildpathModifierAction.EDIT_FILTERS);
65         
66         setText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Edit_label);
67         setImageDescriptor(JavaPluginImages.DESC_ELCL_CONFIGURE_BUILDPATH_FILTERS);
68         setToolTipText(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_Edit_tooltip);
69         setDescription(NewWizardMessages.PackageExplorerActionGroup_FormText_Edit);
70         setDisabledImageDescriptor(JavaPluginImages.DESC_DLCL_CONFIGURE_BUILDPATH_FILTERS);
71     }
72     
73     /**
74      * {@inheritDoc}
75      */

76     public String JavaDoc getDetailedDescription() {
77         if (!isEnabled())
78             return null;
79         
80
81         return NewWizardMessages.PackageExplorerActionGroup_FormText_Edit;
82     }
83     
84     /* (non-Javadoc)
85      * @see org.eclipse.jface.action.Action#run()
86      */

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= new BuildpathDelta(getToolTipText());
101                 
102                 ArrayList JavaDoc newEntries= wizard.getExistingEntries();
103                 delta.setNewEntries((CPListElement[])newEntries.toArray(new CPListElement[newEntries.size()]));
104                 
105                 IResource resource= wizard.getCreatedElement().getCorrespondingResource();
106                 delta.addCreatedResource(resource);
107                 
108                 delta.setDefaultOutputLocation(wizard.getOutputLocation());
109                     
110                 informListeners(delta);
111                 
112                 selectAndReveal(new StructuredSelection(wizard.getCreatedElement()));
113             }
114             
115             notifyResult(res == Window.OK);
116         } catch (CoreException e) {
117             String JavaDoc title= NewWizardMessages.AbstractOpenWizardAction_createerror_title;
118             String JavaDoc message= NewWizardMessages.AbstractOpenWizardAction_createerror_message;
119             ExceptionHandler.handle(e, shell, title, message);
120         }
121     }
122     
123     private EditFilterWizard createWizard() throws CoreException {
124         IJavaProject javaProject= null;
125         Object JavaDoc firstElement= getSelectedElements().get(0);
126         if (firstElement instanceof IJavaProject) {
127             javaProject= (IJavaProject)firstElement;
128         } else {
129             javaProject= ((IPackageFragmentRoot)firstElement).getJavaProject();
130         }
131         CPListElement[] existingEntries= CPListElement.createFromExisting(javaProject);
132         CPListElement elementToEdit= findElement((IJavaElement)firstElement, existingEntries);
133         return new EditFilterWizard(existingEntries, elementToEdit, getOutputLocation(javaProject));
134     }
135     
136     private IPath getOutputLocation(IJavaProject javaProject) {
137         try {
138             return javaProject.getOutputLocation();
139         } catch (CoreException e) {
140             IProject project= javaProject.getProject();
141             IPath projPath= project.getFullPath();
142             return projPath.append(PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME));
143         }
144     }
145     
146     private static CPListElement findElement(IJavaElement element, CPListElement[] elements) {
147         IPath path= element.getPath();
148         for (int i= 0; i < elements.length; i++) {
149             CPListElement cur= elements[i];
150             if (cur.getEntryKind() == IClasspathEntry.CPE_SOURCE && cur.getPath().equals(path)) {
151                 return cur;
152             }
153         }
154         return null;
155     }
156
157     protected boolean canHandle(IStructuredSelection selection) {
158         if (selection.size() != 1)
159             return false;
160         
161         try {
162             Object JavaDoc element= selection.getFirstElement();
163             if (element instanceof IJavaProject) {
164                 return ClasspathModifier.isSourceFolder((IJavaProject)element);
165             } else if (element instanceof IPackageFragmentRoot) {
166                 IPackageFragmentRoot packageFragmentRoot= ((IPackageFragmentRoot) element);
167                 if (packageFragmentRoot.getKind() != IPackageFragmentRoot.K_SOURCE)
168                     return false;
169                 
170                 return packageFragmentRoot.getJavaProject() != null;
171             }
172         } catch (JavaModelException e) {
173         }
174         return false;
175     }
176 }
177
Popular Tags