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 org.eclipse.swt.widgets.Shell;
15 import org.eclipse.core.runtime.CoreException;
16 import org.eclipse.core.runtime.IPath;
18 import org.eclipse.core.resources.IProject;
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;
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.ui.PreferenceConstants;
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;
50 //SelectedElements iff enabled: (IJavaProject || IPackageFragmentRoot) && size == 1
51 public class EditFilterAction extends BuildpathModifierAction {
53 public EditFilterAction(IWorkbenchSite site) {
54 this(site, null, PlatformUI.getWorkbench().getProgressService());
57 public EditFilterAction(IRunnableContext context, ISetSelectionTarget selectionTarget) {
58 this(null, selectionTarget, context);
61 private EditFilterAction(IWorkbenchSite site, ISetSelectionTarget selectionTarget, IRunnableContext context) {
62 super(site, selectionTarget, BuildpathModifierAction.EDIT_FILTERS);
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);
75 public String getDetailedDescription() {
80 return NewWizardMessages.PackageExplorerActionGroup_FormText_Edit;
84 * @see org.eclipse.jface.action.Action#run()
88 Shell shell= getShell();
91 EditFilterWizard wizard= createWizard();
92 wizard.init(PlatformUI.getWorkbench(), new StructuredSelection(getSelectedElements().get(0)));
94 WizardDialog dialog= new WizardDialog(shell, wizard);
95 PixelConverter converter= new PixelConverter(JFaceResources.getDialogFont());
96 dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70), converter.convertHeightInCharsToPixels(20));
98 int res= dialog.open();
99 if (res == Window.OK) {
100 BuildpathDelta delta= wizard.generated_4795514865538398845(this);
102 informListeners(delta);
104 selectAndReveal(new StructuredSelection(wizard.getCreatedElement()));
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);
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;
121 javaProject= ((IPackageFragmentRoot)firstElement).getJavaProject();
123 CPListElement[] existingEntries= CPListElement.createFromExisting(javaProject);
124 CPListElement elementToEdit= findElement((IJavaElement)firstElement, existingEntries);
125 return new EditFilterWizard(existingEntries, elementToEdit, getOutputLocation(javaProject));
128 private IPath getOutputLocation(IJavaProject javaProject) {
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));
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)) {
150 protected boolean canHandle(IStructuredSelection selection) {
151 if (selection.size() != 1)
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)
163 return packageFragmentRoot.getJavaProject() != null;
165 } catch (JavaModelException e) {