]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui / org / eclipse / jdt / internal / ui / workingsets / JavaWorkingSetPage.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 * Rodrigo Kumpera <kumpera AT gmail.com> - bug 95232
11 *
12 *******************************************************************************/
13package org.eclipse.jdt.internal.ui.workingsets;
14
15import org.eclipse.swt.custom.BusyIndicator;
16import org.eclipse.swt.widgets.Composite;
17
18import org.eclipse.core.runtime.IAdaptable;
19
20import org.eclipse.core.resources.IProject;
21import org.eclipse.core.resources.IResource;
22import org.eclipse.core.resources.ResourcesPlugin;
23
24import org.eclipse.jface.viewers.ISelection;
25import org.eclipse.jface.viewers.IStructuredSelection;
26import org.eclipse.jface.viewers.StructuredSelection;
27import org.eclipse.jface.viewers.TableViewer;
28import org.eclipse.jface.viewers.TreeViewer;
29
30import org.eclipse.ui.IWorkbenchPage;
31import org.eclipse.ui.IWorkbenchPart;
32import org.eclipse.ui.IWorkbenchWindow;
33import org.eclipse.ui.IWorkingSet;
34import org.eclipse.ui.PlatformUI;
35
36import org.eclipse.jdt.core.IJavaElement;
37import org.eclipse.jdt.core.IJavaProject;
38import org.eclipse.jdt.core.JavaCore;
39import org.eclipse.jdt.core.JavaModelException;
40
41import org.eclipse.jdt.ui.JavaElementComparator;
42import org.eclipse.jdt.ui.JavaElementLabels;
43
44import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
45import org.eclipse.jdt.internal.ui.JavaPlugin;
46import org.eclipse.jdt.internal.ui.JavaPluginImages;
47import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
48import org.eclipse.jdt.internal.ui.filters.EmptyInnerPackageFilter;
49import org.eclipse.jdt.internal.ui.packageview.PackageFragmentRootContainer;
50import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
51import org.eclipse.jdt.internal.ui.viewsupport.DecoratingJavaLabelProvider;
52import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
53
54/**
55 * The Java working set page allows the user to create
56 * and edit a Java working set.
57 * <p>
58 * Workspace elements can be added/removed from a tree into
59 * a list.
60 * </p>
61 *
62 * @since 2.0
63 */
64public class JavaWorkingSetPage extends AbstractWorkingSetWizardPage {
65
66 final private static String PAGE_TITLE= WorkingSetMessages.JavaWorkingSetPage_title;
67 final private static String PAGE_NAME= "javaWorkingSetPage"; //$NON-NLS-1$
68
69 private IStructuredSelection fInitialSelection;
70
71 /**
72 * Default constructor.
73 */
74 public JavaWorkingSetPage() {
75 super(PAGE_NAME, PAGE_TITLE, JavaPluginImages.DESC_WIZBAN_JAVA_WORKINGSET);
76 setDescription(WorkingSetMessages.JavaWorkingSetPage_workingSet_description);
77 IWorkbenchWindow activeWorkbenchWindow= JavaPlugin.getActiveWorkbenchWindow();
78 if (activeWorkbenchWindow != null) {
79 ISelection selection= activeWorkbenchWindow.getSelectionService().getSelection();
80 if (selection instanceof IStructuredSelection)
81 fInitialSelection= (IStructuredSelection)selection;
82 }
83 }
84
85 public void setInitialSelection(IStructuredSelection selection) {
86 fInitialSelection= selection;
87 }
88
89 @Override
90 protected String getPageId() {
91 return "org.eclipse.jdt.ui.JavaWorkingSetPage"; //$NON-NLS-1$
92 }
93
94 /**
95 * {@inheritDoc}
96 */
97 @Override
98 public void createControl(Composite parent) {
99 super.createControl(parent);
100
101 // Set help for the page
102 PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJavaHelpContextIds.JAVA_WORKING_SET_PAGE);
103 }
104
105 /**
106 * {@inheritDoc}
107 */
108 @Override
109 protected void configureTree(TreeViewer tree) {
110 tree.setContentProvider(new JavaWorkingSetPageContentProvider());
111
112 AppearanceAwareLabelProvider javaElementLabelProvider=
113 new AppearanceAwareLabelProvider(
114 AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED,
115 AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS
116 );
117
118 tree.setLabelProvider(new DecoratingJavaLabelProvider(javaElementLabelProvider));
119 tree.setComparator(new JavaElementComparator());
120 tree.addFilter(new EmptyInnerPackageFilter());
121
122 tree.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
123
124 if (getSelection() == null)
125 return;
126
127 Object[] selection= getInitialTreeSelection();
128 if (selection.length > 0) {
129 try {
130 tree.getTree().setRedraw(false);
131
132 for (int i= 0; i < selection.length; i++) {
133 tree.expandToLevel(selection[i], 0);
134 }
135 tree.setSelection(new StructuredSelection(selection));
136 } finally {
137 tree.getTree().setRedraw(true);
138 }
139 }
140 }
141
142 /**
143 * {@inheritDoc}
144 */
145 @Override
146 protected void configureTable(TableViewer table) {
147 AppearanceAwareLabelProvider javaElementLabelProvider= new AppearanceAwareLabelProvider(
148 AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS | JavaElementLabels.P_COMPRESSED
149 | JavaElementLabels.ROOT_POST_QUALIFIED | JavaElementLabels.P_POST_QUALIFIED,
150 AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS | JavaElementImageProvider.SMALL_ICONS
151 );
152
153 table.setLabelProvider(new DecoratingJavaLabelProvider(javaElementLabelProvider));
154 table.setComparator(new JavaElementComparator());
155 }
156
157 /**
158 * {@inheritDoc}
159 */
160 @Override
161 protected Object[] getInitialWorkingSetElements(IWorkingSet workingSet) {
162 Object[] elements;
163 if (workingSet == null) {
164 if (fInitialSelection == null)
165 return new IAdaptable[0];
166
167 elements= fInitialSelection.toArray();
168 } else {
169 elements= workingSet.getElements();
170 }
171
172 // Use closed project for elements in closed project and remove PackageFragmentRootContainer elements
173 int deletedElements= 0;
174 for (int i= 0; i < elements.length; i++) {
175 Object element= elements[i];
176 if (element instanceof IResource) {
177 IProject project= ((IResource)element).getProject();
178 if (!project.isAccessible())
179 elements[i]= project;
180 } else if (element instanceof PackageFragmentRootContainer) {
181 for (int j= i; j < elements.length - 1; j++)
182 elements[j]= elements[j + 1];
183 deletedElements++;
184 } else if (element instanceof IJavaElement) {
185 IJavaProject jProject= ((IJavaElement)element).getJavaProject();
186 if (jProject != null && !jProject.getProject().isAccessible())
187 elements[i]= jProject.getProject();
188 } else if (!(element instanceof IAdaptable) || ((IAdaptable)element).getAdapter(IProject.class) == null) {
189 for (int j= i; j < elements.length - 1; j++)
190 elements[j]= elements[j + 1];
191 deletedElements++;
192 }
193 }
194
195 if (deletedElements == 0)
196 return elements;
197
198 IAdaptable[] result= new IAdaptable[elements.length - deletedElements];
199 System.arraycopy(elements, 0, result, 0, result.length);
200 return result;
201 }
202
203 private Object[] getInitialTreeSelection() {
204 final Object[][] result= new Object[1][];
205 BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
206 public void run() {
207 IStructuredSelection selection= fInitialSelection;
208 if (selection == null) {
209
210 IWorkbenchPage page= JavaPlugin.getActivePage();
211 if (page == null)
212 return;
213
214 IWorkbenchPart part= page.getActivePart();
215 if (part == null)
216 return;
217
218 try {
219 selection= SelectionConverter.getStructuredSelection(part);
220 } catch (JavaModelException e) {
221 return;
222 }
223 }
224
225 Object[] elements= selection.toArray();
226 for (int i= 0; i < elements.length; i++) {
227 if (elements[i] instanceof IResource) {
228 IJavaElement je= (IJavaElement)((IResource)elements[i]).getAdapter(IJavaElement.class);
229 if (je != null && je.exists() && je.getJavaProject().isOnClasspath((IResource)elements[i]))
230 elements[i]= je;
231 }
232 }
233 result[0]= elements;
234 }
235 });
236
237 if (result[0] == null)
238 return new Object[0];
239
240 return result[0];
241 }
242}