Project

General

Profile

Download (55.9 KB) Statistics
| Branch: | Tag: | Revision:
1
### Eclipse Workspace Patch 1.0
2
#P org.eclipse.jdt.ui
3
Index: ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java
4
===================================================================
5
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java,v
6
retrieving revision 1.9
7
diff -u -r1.9 ConfigureWorkingSetAction.java
8
--- ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java	18 Nov 2005 14:45:35 -0000	1.9
9
+++ ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java	8 Feb 2006 00:46:03 -0000
10
@@ -14,6 +14,8 @@
11
 import java.util.Arrays;
12
 import java.util.List;
13
 
14
+import org.eclipse.swt.widgets.Shell;
15
+
16
 import org.eclipse.jface.action.Action;
17
 import org.eclipse.jface.dialogs.IDialogConstants;
18
 
19
@@ -21,13 +23,18 @@
20
 import org.eclipse.ui.IWorkingSet;
21
 
22
 public class ConfigureWorkingSetAction extends Action {
23
-
24
-	private final IWorkbenchPartSite fSite;
25
+ 
26
 	private WorkingSetModel fWorkingSetModel;
27
+	private Shell fShell; 
28
 
29
 	public ConfigureWorkingSetAction(IWorkbenchPartSite site) {
30
 		super(WorkingSetMessages.ConfigureWorkingSetAction_label); 
31
-		fSite= site;
32
+		fShell= site.getShell();
33
+	}
34
+	
35
+	public ConfigureWorkingSetAction(Shell shell) {
36
+		super(WorkingSetMessages.ConfigureWorkingSetAction_label); 
37
+		fShell= shell;
38
 	}
39
 	
40
 	public void setWorkingSetModel(WorkingSetModel model) {
41
@@ -39,9 +46,10 @@
42
 	 */
43
 	public void run() {
44
 		List workingSets= new ArrayList(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
45
+
46
 		IWorkingSet[] activeWorkingSets= fWorkingSetModel.getActiveWorkingSets();
47
 		WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(
48
-			fSite.getShell(), 
49
+			fShell, 
50
 			(IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]),
51
 			activeWorkingSets); 
52
 		dialog.setSelection(activeWorkingSets);
53
Index: ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java
54
===================================================================
55
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java,v
56
retrieving revision 1.8
57
diff -u -r1.8 ViewActionGroup.java
58
--- ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java	13 Apr 2005 17:35:11 -0000	1.8
59
+++ ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java	8 Feb 2006 00:46:03 -0000
60
@@ -45,7 +45,12 @@
61
 
62
 	public ViewActionGroup(int mode, IPropertyChangeListener changeListener, IWorkbenchPartSite site) {
63
 		fChangeListener= changeListener;
64
-		fFilterActionGroup= new WorkingSetFilterActionGroup(site, changeListener);
65
+		if(fChangeListener == null) {
66
+			fChangeListener = new IPropertyChangeListener() {
67
+				public void propertyChange(PropertyChangeEvent event) {}
68
+			};
69
+		}
70
+		fFilterActionGroup= new WorkingSetFilterActionGroup(site, fChangeListener);
71
 		fShowActionGroup= new WorkingSetShowActionGroup(site);
72
 		fMode= mode;
73
 		if (showWorkingSets())
74
@@ -70,16 +75,24 @@
75
 	 */
76
 	public void fillActionBars(IActionBars actionBars) {
77
 		super.fillActionBars(actionBars);
78
-		fMenuManager= actionBars.getMenuManager();
79
-		IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); 
80
-		fillShowMenu(showMenu);
81
-		fMenuManager.add(showMenu);
82
-		fMenuManager.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
83
+		if(fMenuManager == null) {
84
+			fMenuManager= actionBars.getMenuManager();
85
+			fillViewMenu(fMenuManager);
86
+		}
87
+
88
 		if (fActiveActionGroup == null)
89
 			fActiveActionGroup= fFilterActionGroup;
90
 		((ActionGroup)fActiveActionGroup).fillActionBars(actionBars);
91
 	}
92
 	
93
+	private void fillViewMenu(IMenuManager menu) { 
94
+		
95
+		IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); 
96
+		fillShowMenu(showMenu);
97
+		menu.add(showMenu);
98
+		menu.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
99
+	}
100
+	
101
 	private void fillShowMenu(IMenuManager menu) {
102
 		ViewAction projects= new ViewAction(this, SHOW_PROJECTS);
103
 		projects.setText(WorkingSetMessages.ViewActionGroup_projects_label); 
104
@@ -116,7 +129,8 @@
105
 		}
106
 		fActiveActionGroup.fillViewMenu(fMenuManager);
107
 		fMenuManager.updateAll(true);
108
-		fChangeListener.propertyChange(event);
109
+		if(fChangeListener != null)
110
+			fChangeListener.propertyChange(event);
111
 	}
112
 	
113
 	public WorkingSetFilterActionGroup getFilterGroup() {
114
Index: ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
115
===================================================================
116
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java,v
117
retrieving revision 1.14
118
diff -u -r1.14 WorkingSetModel.java
119
--- ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java	26 Jan 2006 14:54:03 -0000	1.14
120
+++ ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java	8 Feb 2006 00:46:03 -0000
121
@@ -1,13 +1,11 @@
122
-/*******************************************************************************
123
- * Copyright (c) 2000, 2005 IBM Corporation and others.
124
- * All rights reserved. This program and the accompanying materials
125
- * are made available under the terms of the Eclipse Public License v1.0
126
+/***************************************************************************************************
127
+ * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved. This program and the
128
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
129
  * which accompanies this distribution, and is available at
130
  * http://www.eclipse.org/legal/epl-v10.html
131
- *
132
- * Contributors:
133
- *     IBM Corporation - initial API and implementation
134
- *******************************************************************************/
135
+ * 
136
+ * Contributors: IBM Corporation - initial API and implementation
137
+ **************************************************************************************************/
138
 package org.eclipse.jdt.internal.ui.workingsets;
139
 
140
 import java.util.ArrayList;
141
@@ -36,12 +34,12 @@
142
 import org.eclipse.ui.PlatformUI;
143
 
144
 public class WorkingSetModel {
145
-	
146
+
147
 	public static final String CHANGE_WORKING_SET_MODEL_CONTENT= "workingSetModelChanged"; //$NON-NLS-1$
148
-	
149
+
150
 	public static final IElementComparer COMPARER= new WorkingSetComparar();
151
-	
152
-	private static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
153
+
154
+	public static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
155
 	private static final String TAG_ACTIVE_WORKING_SET= "activeWorkingSet"; //$NON-NLS-1$
156
 	private static final String TAG_WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$
157
 	private static final String TAG_CONFIGURED= "configured"; //$NON-NLS-1$
158
@@ -53,28 +51,29 @@
159
 	private OthersWorkingSetUpdater fOthersWorkingSetUpdater;
160
 
161
 	private ElementMapper fElementMapper= new ElementMapper();
162
-	
163
+
164
 	private boolean fConfigured;
165
 
166
 	private static class WorkingSetComparar implements IElementComparer {
167
 		public boolean equals(Object o1, Object o2) {
168
-			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet)o1 : null;
169
-			IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet)o2 : null;
170
+			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet) o1 : null;
171
+			IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet) o2 : null;
172
 			if (w1 == null || w2 == null)
173
 				return o1.equals(o2);
174
 			return w1 == w2;
175
 		}
176
+
177
 		public int hashCode(Object element) {
178
 			if (element instanceof IWorkingSet)
179
 				return System.identityHashCode(element);
180
 			return element.hashCode();
181
 		}
182
 	}
183
-	
184
+
185
 	private static class ElementMapper {
186
 		private Map fElementToWorkingSet= new HashMap();
187
 		private Map fWorkingSetToElement= new IdentityHashMap();
188
-		
189
+
190
 		private Map fResourceToWorkingSet= new HashMap();
191
 
192
 		public void clear() {
193
@@ -82,14 +81,16 @@
194
 			fWorkingSetToElement.clear();
195
 			fResourceToWorkingSet.clear();
196
 		}
197
+
198
 		public void rebuild(IWorkingSet[] workingSets) {
199
 			clear();
200
 			for (int i= 0; i < workingSets.length; i++) {
201
 				put(workingSets[i]);
202
 			}
203
 		}
204
+
205
 		public IAdaptable[] remove(IWorkingSet ws) {
206
-			IAdaptable[] elements= (IAdaptable[])fWorkingSetToElement.remove(ws);
207
+			IAdaptable[] elements= (IAdaptable[]) fWorkingSetToElement.remove(ws);
208
 			if (elements != null) {
209
 				for (int i= 0; i < elements.length; i++) {
210
 					removeElement(elements[i], ws);
211
@@ -97,8 +98,9 @@
212
 			}
213
 			return elements;
214
 		}
215
+
216
 		public IAdaptable[] refresh(IWorkingSet ws) {
217
-			IAdaptable[] oldElements= (IAdaptable[])fWorkingSetToElement.get(ws);
218
+			IAdaptable[] oldElements= (IAdaptable[]) fWorkingSetToElement.get(ws);
219
 			if (oldElements == null)
220
 				return null;
221
 			IAdaptable[] newElements= ws.getElements();
222
@@ -106,15 +108,16 @@
223
 			List toAdd= new ArrayList(Arrays.asList(newElements));
224
 			computeDelta(toRemove, toAdd, oldElements, newElements);
225
 			for (Iterator iter= toAdd.iterator(); iter.hasNext();) {
226
-				addElement((IAdaptable)iter.next(), ws);
227
+				addElement((IAdaptable) iter.next(), ws);
228
 			}
229
 			for (Iterator iter= toRemove.iterator(); iter.hasNext();) {
230
-				removeElement((IAdaptable)iter.next(), ws);
231
+				removeElement((IAdaptable) iter.next(), ws);
232
 			}
233
 			if (toRemove.size() > 0 || toAdd.size() > 0)
234
 				fWorkingSetToElement.put(ws, newElements);
235
 			return oldElements;
236
 		}
237
+
238
 		private void computeDelta(List toRemove, List toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) {
239
 			for (int i= 0; i < oldElements.length; i++) {
240
 				toAdd.remove(oldElements[i]);
241
@@ -122,20 +125,25 @@
242
 			for (int i= 0; i < newElements.length; i++) {
243
 				toRemove.remove(newElements[i]);
244
 			}
245
-			
246
+
247
 		}
248
+
249
 		public IWorkingSet getFirstWorkingSet(Object element) {
250
-			return (IWorkingSet)getFirstElement(fElementToWorkingSet, element);
251
+			return (IWorkingSet) getFirstElement(fElementToWorkingSet, element);
252
 		}
253
+
254
 		public List getAllWorkingSets(Object element) {
255
 			return getAllElements(fElementToWorkingSet, element);
256
 		}
257
+
258
 		public IWorkingSet getFirstWorkingSetForResource(IResource resource) {
259
-			return (IWorkingSet)getFirstElement(fResourceToWorkingSet, resource);
260
+			return (IWorkingSet) getFirstElement(fResourceToWorkingSet, resource);
261
 		}
262
+
263
 		public List getAllWorkingSetsForResource(IResource resource) {
264
 			return getAllElements(fResourceToWorkingSet, resource);
265
 		}
266
+
267
 		private void put(IWorkingSet ws) {
268
 			if (fWorkingSetToElement.containsKey(ws))
269
 				return;
270
@@ -145,20 +153,23 @@
271
 				addElement(elements[i], ws);
272
 			}
273
 		}
274
+
275
 		private void addElement(IAdaptable element, IWorkingSet ws) {
276
 			addToMap(fElementToWorkingSet, element, ws);
277
-			IResource resource= (IResource)element.getAdapter(IResource.class);
278
+			IResource resource= (IResource) element.getAdapter(IResource.class);
279
 			if (resource != null) {
280
 				addToMap(fResourceToWorkingSet, resource, ws);
281
 			}
282
 		}
283
+
284
 		private void removeElement(IAdaptable element, IWorkingSet ws) {
285
 			removeFromMap(fElementToWorkingSet, element, ws);
286
-			IResource resource= (IResource)element.getAdapter(IResource.class);
287
+			IResource resource= (IResource) element.getAdapter(IResource.class);
288
 			if (resource != null) {
289
 				removeFromMap(fResourceToWorkingSet, resource, ws);
290
 			}
291
 		}
292
+
293
 		private void addToMap(Map map, IAdaptable key, IWorkingSet value) {
294
 			Object obj= map.get(key);
295
 			if (obj == null) {
296
@@ -169,21 +180,22 @@
297
 				l.add(value);
298
 				map.put(key, l);
299
 			} else if (obj instanceof List) {
300
-				((List)obj).add(value);
301
+				((List) obj).add(value);
302
 			}
303
 		}
304
+
305
 		private void removeFromMap(Map map, IAdaptable key, IWorkingSet value) {
306
 			Object current= map.get(key);
307
 			if (current == null) {
308
 				return;
309
 			} else if (current instanceof List) {
310
-				List list= (List)current;
311
+				List list= (List) current;
312
 				list.remove(value);
313
 				switch (list.size()) {
314
-					case 0:
315
+					case 0 :
316
 						map.remove(key);
317
 						break;
318
-					case 1:
319
+					case 1 :
320
 						map.put(key, list.get(0));
321
 						break;
322
 				}
323
@@ -191,16 +203,18 @@
324
 				map.remove(key);
325
 			}
326
 		}
327
+
328
 		private Object getFirstElement(Map map, Object key) {
329
 			Object obj= map.get(key);
330
-			if (obj instanceof List) 
331
-				return ((List)obj).get(0);
332
+			if (obj instanceof List)
333
+				return ((List) obj).get(0);
334
 			return obj;
335
 		}
336
+
337
 		private List getAllElements(Map map, Object key) {
338
 			Object obj= map.get(key);
339
 			if (obj instanceof List)
340
-				return (List)obj;
341
+				return (List) obj;
342
 			if (obj == null)
343
 				return Collections.EMPTY_LIST;
344
 			List result= new ArrayList(1);
345
@@ -208,27 +222,27 @@
346
 			return result;
347
 		}
348
 	}
349
-	
350
+
351
 	public WorkingSetModel() {
352
 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
353
 		addListenersToWorkingSetManagers();
354
-    	fActiveWorkingSets= new ArrayList(2);
355
-    	
356
-    	IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]); 
357
-    	others.setId(OthersWorkingSetUpdater.ID);
358
-    	fLocalWorkingSetManager.addWorkingSet(others);
359
-    	fActiveWorkingSets.add(others);
360
-    	
361
-    	fOthersWorkingSetUpdater.init(this);
362
-    	fElementMapper.rebuild(getActiveWorkingSets());
363
+		fActiveWorkingSets= new ArrayList(2);
364
+
365
+		IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]);
366
+		others.setId(OthersWorkingSetUpdater.ID);
367
+		fLocalWorkingSetManager.addWorkingSet(others);
368
+		fActiveWorkingSets.add(others);
369
+
370
+		fOthersWorkingSetUpdater.init(this);
371
+		fElementMapper.rebuild(getActiveWorkingSets());
372
 	}
373
-	
374
+
375
 	public WorkingSetModel(IMemento memento) {
376
 		restoreState(memento);
377
 		fOthersWorkingSetUpdater.init(this);
378
-    	fElementMapper.rebuild(getActiveWorkingSets());
379
+		fElementMapper.rebuild(getActiveWorkingSets());
380
 	}
381
-	
382
+
383
 	private void addListenersToWorkingSetManagers() {
384
 		fListeners= new ListenerList(ListenerList.IDENTITY);
385
 		fWorkingSetManagerListener= new IPropertyChangeListener() {
386
@@ -239,7 +253,7 @@
387
 		PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(fWorkingSetManagerListener);
388
 		fLocalWorkingSetManager.addPropertyChangeListener(fWorkingSetManagerListener);
389
 	}
390
-	
391
+
392
 	public void dispose() {
393
 		if (fWorkingSetManagerListener != null) {
394
 			PlatformUI.getWorkbench().getWorkingSetManager().removePropertyChangeListener(fWorkingSetManagerListener);
395
@@ -248,118 +262,119 @@
396
 			fWorkingSetManagerListener= null;
397
 		}
398
 	}
399
-	
400
-	//---- model relationships ---------------------------------------
401
-	
402
+
403
+	// ---- model relationships ---------------------------------------
404
+
405
     public IAdaptable[] getChildren(IWorkingSet workingSet) {
406
-    	return workingSet.getElements();
407
-    }
408
-    
409
-    public Object getParent(Object element) {
410
-    	if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
411
-    		return this;
412
-    	return fElementMapper.getFirstWorkingSet(element);
413
-    }
414
-    
415
-    public Object[] getAllParents(Object element) {
416
-    	if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
417
-    		return new Object[] {this};
418
-    	return fElementMapper.getAllWorkingSets(element).toArray();
419
-    }
420
-    
421
-    public Object[] addWorkingSets(Object[] elements) {
422
-    	List result= null;
423
-    	for (int i= 0; i < elements.length; i++) {
424
-    		Object element= elements[i];
425
-    		List sets= null;
426
+		return workingSet.getElements();
427
+	}
428
+
429
+	public Object getParent(Object element) {
430
+		if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
431
+			return this;
432
+		return fElementMapper.getFirstWorkingSet(element);
433
+	}
434
+
435
+	public Object[] getAllParents(Object element) {
436
+		if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
437
+			return new Object[]{this};
438
+		return fElementMapper.getAllWorkingSets(element).toArray();
439
+	}
440
+
441
+	public Object[] addWorkingSets(Object[] elements) {
442
+		List result= null;
443
+		for (int i= 0; i < elements.length; i++) {
444
+			Object element= elements[i];
445
+			List sets= null;
446
 			if (element instanceof IResource) {
447
-    			sets= fElementMapper.getAllWorkingSetsForResource((IResource)element);
448
-    		} else {
449
-    			sets= fElementMapper.getAllWorkingSets(element);
450
-    		}
451
+				sets= fElementMapper.getAllWorkingSetsForResource((IResource) element);
452
+			} else {
453
+				sets= fElementMapper.getAllWorkingSets(element);
454
+			}
455
 			if (sets != null && sets.size() > 0) {
456
 				if (result == null)
457
 					result= new ArrayList(Arrays.asList(elements));
458
 				result.addAll(sets);
459
 			}
460
 		}
461
-    	if (result == null)
462
-    		return elements;
463
-    	return result.toArray();
464
-    }
465
-    
466
-    public boolean needsConfiguration() {
467
-    	return !fConfigured && fActiveWorkingSets.size() == 1 &&
468
-			OthersWorkingSetUpdater.ID.equals(((IWorkingSet)fActiveWorkingSets.get(0)).getId());
469
-    }
470
-    
471
-    public void configured() {
472
-    	fConfigured= true;
473
-    }
474
-    
475
-    //---- working set management -----------------------------------
476
-    
477
+		if (result == null)
478
+			return elements;
479
+		return result.toArray();
480
+	}
481
+
482
+	public boolean needsConfiguration() {
483
+		return !fConfigured && fActiveWorkingSets.size() == 1 && OthersWorkingSetUpdater.ID.equals(((IWorkingSet) fActiveWorkingSets.get(0)).getId());
484
+	}
485
+
486
+	public void configured() {
487
+		fConfigured= true;
488
+	}
489
+
490
+	// ---- working set management -----------------------------------
491
+
492
 	/**
493
-     * Adds a property change listener.
494
-     * 
495
-     * @param listener the property change listener to add
496
-     */
497
-    public void addPropertyChangeListener(IPropertyChangeListener listener) {
498
-    	fListeners.add(listener);
499
-    }
500
-    
501
-    /**
502
-     * Removes the property change listener.
503
-     * 
504
-     * @param listener the property change listener to remove
505
-     */
506
-    public void removePropertyChangeListener(IPropertyChangeListener listener) {
507
-    	fListeners.remove(listener);
508
-    }
509
-    
510
-    public IWorkingSet[] getActiveWorkingSets() {
511
-    	return (IWorkingSet[])fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
512
-    }
513
-    
514
-    public IWorkingSet[] getAllWorkingSets() {
515
-    	List result= new ArrayList();
516
-    	result.addAll(fActiveWorkingSets);
517
-    	IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
518
-    	for (int i= 0; i < locals.length; i++) {
519
+	 * Adds a property change listener.
520
+	 * 
521
+	 * @param listener
522
+	 *            the property change listener to add
523
+	 */
524
+	public void addPropertyChangeListener(IPropertyChangeListener listener) {
525
+		fListeners.add(listener);
526
+	}
527
+
528
+	/**
529
+	 * Removes the property change listener.
530
+	 * 
531
+	 * @param listener
532
+	 *            the property change listener to remove
533
+	 */
534
+	public void removePropertyChangeListener(IPropertyChangeListener listener) {
535
+		fListeners.remove(listener);
536
+	}
537
+
538
+	public IWorkingSet[] getActiveWorkingSets() {
539
+		return (IWorkingSet[]) fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
540
+	}
541
+
542
+	public IWorkingSet[] getAllWorkingSets() {
543
+		List result= new ArrayList();
544
+		result.addAll(fActiveWorkingSets);
545
+		IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
546
+		for (int i= 0; i < locals.length; i++) {
547
 			if (!result.contains(locals[i]))
548
 				result.add(locals[i]);
549
 		}
550
-    	IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
551
-    	for (int i= 0; i < globals.length; i++) {
552
+		IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
553
+		for (int i= 0; i < globals.length; i++) {
554
 			if (!result.contains(globals[i]))
555
 				result.add(globals[i]);
556
 		}
557
-    	return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]);
558
-    }
559
-    
560
-    public void setActiveWorkingSets(IWorkingSet[] workingSets) {
561
-    	fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
562
-    	fElementMapper.rebuild(getActiveWorkingSets());
563
-    	fOthersWorkingSetUpdater.updateElements();
564
-    	fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
565
-    }
566
-	
567
+		return (IWorkingSet[]) result.toArray(new IWorkingSet[result.size()]);
568
+	}
569
+
570
+	public void setActiveWorkingSets(IWorkingSet[] workingSets) {
571
+		fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
572
+		fElementMapper.rebuild(getActiveWorkingSets());
573
+		fOthersWorkingSetUpdater.updateElements();
574
+		fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
575
+	}
576
+
577
 	public void saveState(IMemento memento) {
578
 		memento.putString(TAG_CONFIGURED, Boolean.toString(fConfigured));
579
 		fLocalWorkingSetManager.saveState(memento.createChild(TAG_LOCAL_WORKING_SET_MANAGER));
580
 		for (Iterator iter= fActiveWorkingSets.iterator(); iter.hasNext();) {
581
 			IMemento active= memento.createChild(TAG_ACTIVE_WORKING_SET);
582
-			IWorkingSet workingSet= (IWorkingSet)iter.next();
583
+			IWorkingSet workingSet= (IWorkingSet) iter.next();
584
 			active.putString(TAG_WORKING_SET_NAME, workingSet.getName());
585
 		}
586
 	}
587
-	
588
+
589
 	private void restoreState(IMemento memento) {
590
 		String configured= memento.getString(TAG_CONFIGURED);
591
 		if (configured != null)
592
 			fConfigured= Boolean.valueOf(configured).booleanValue();
593
 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
594
-		addListenersToWorkingSetManagers();
595
+		addListenersToWorkingSetManagers(); 
596
 		fLocalWorkingSetManager.restoreState(memento.getChild(TAG_LOCAL_WORKING_SET_MANAGER));
597
 		IWorkingSet history= getHistoryWorkingSet();
598
 		if (history != null) {
599
@@ -380,54 +395,54 @@
600
 			}
601
 		}
602
 	}
603
-    private void workingSetManagerChanged(PropertyChangeEvent event) {
604
+
605
+	private void workingSetManagerChanged(PropertyChangeEvent event) {
606
 		String property= event.getProperty();
607
-    	if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) {
608
-			IWorkingSetUpdater updater= (IWorkingSetUpdater)event.getNewValue();
609
+		if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) {
610
+			IWorkingSetUpdater updater= (IWorkingSetUpdater) event.getNewValue();
611
 			if (updater instanceof OthersWorkingSetUpdater) {
612
-				fOthersWorkingSetUpdater= (OthersWorkingSetUpdater)updater;
613
+				fOthersWorkingSetUpdater= (OthersWorkingSetUpdater) updater;
614
 			}
615
 			return;
616
 		}
617
-    	// don't handle working sets not managed by the model
618
-    	if (!isAffected(event))
619
-    		return;
620
-    	
621
+		// don't handle working sets not managed by the model
622
+		if (!isAffected(event))
623
+			return;
624
+
625
 		if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)) {
626
-			IWorkingSet workingSet= (IWorkingSet)event.getNewValue();
627
+			IWorkingSet workingSet= (IWorkingSet) event.getNewValue();
628
 			IAdaptable[] elements= fElementMapper.refresh(workingSet);
629
 			if (elements != null) {
630
 				fireEvent(event);
631
 			}
632
 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)) {
633
-			IWorkingSet workingSet= (IWorkingSet)event.getOldValue();
634
+			IWorkingSet workingSet= (IWorkingSet) event.getOldValue();
635
 			List elements= new ArrayList(fActiveWorkingSets);
636
 			elements.remove(workingSet);
637
-			setActiveWorkingSets((IWorkingSet[])elements.toArray(new IWorkingSet[elements.size()]));
638
-    	} else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) {
639
+			setActiveWorkingSets((IWorkingSet[]) elements.toArray(new IWorkingSet[elements.size()]));
640
+		} else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) {
641
 			fireEvent(event);
642
 		}
643
 	}
644
-    
645
-    private void fireEvent(PropertyChangeEvent event) {
646
-    	Object[] listeners= fListeners.getListeners();
647
-    	for (int i= 0; i < listeners.length; i++) {
648
-			((IPropertyChangeListener)listeners[i]).propertyChange(event);
649
-		}
650
-    }
651
-    
652
-    private boolean isAffected(PropertyChangeEvent event) {
653
-    	if (fActiveWorkingSets == null)
654
-    		return false;
655
-    	Object oldValue= event.getOldValue();
656
-    	Object newValue= event.getNewValue();
657
-    	if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) 
658
-    		|| (newValue != null && fActiveWorkingSets.contains(newValue))) {
659
-    		return true;
660
-    	}
661
-    	return false;
662
-    }
663
-	
664
+
665
+	private void fireEvent(PropertyChangeEvent event) {
666
+		Object[] listeners= fListeners.getListeners();
667
+		for (int i= 0; i < listeners.length; i++) {
668
+			((IPropertyChangeListener) listeners[i]).propertyChange(event);
669
+		}
670
+	}
671
+
672
+	private boolean isAffected(PropertyChangeEvent event) {
673
+		if (fActiveWorkingSets == null)
674
+			return false;
675
+		Object oldValue= event.getOldValue();
676
+		Object newValue= event.getNewValue();
677
+		if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) || (newValue != null && fActiveWorkingSets.contains(newValue))) {
678
+			return true;
679
+		}
680
+		return false;
681
+	}
682
+
683
 	private IWorkingSet getHistoryWorkingSet() {
684
 		IWorkingSet[] workingSets= fLocalWorkingSetManager.getWorkingSets();
685
 		for (int i= 0; i < workingSets.length; i++) {
686
Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java
687
===================================================================
688
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java,v
689
retrieving revision 1.50
690
diff -u -r1.50 PackageExplorerContentProvider.java
691
--- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java	11 Jan 2006 15:49:15 -0000	1.50
692
+++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java	8 Feb 2006 00:46:03 -0000
693
@@ -76,14 +76,22 @@
694
 	private PackageFragmentProvider fPackageFragmentProvider= new PackageFragmentProvider();
695
 	
696
 	private int fPendingChanges;
697
-	PackageExplorerPart fPart;
698
+	//PackageExplorerPart fPart;
699
+	
700
+	/**
701
+	 * Creates a new content provider for Java elements.
702
+	 */
703
+	public PackageExplorerContentProvider(boolean provideMembers) {
704
+		super(provideMembers);	
705
+		//fPart= part;
706
+	}
707
 	
708
 	/**
709
 	 * Creates a new content provider for Java elements.
710
 	 */
711
 	public PackageExplorerContentProvider(PackageExplorerPart part, boolean provideMembers) {
712
 		super(provideMembers);	
713
-		fPart= part;
714
+		//fPart= part;
715
 	}
716
 	
717
 	/* package */ PackageFragmentProvider getPackageFragmentProvider() {
718
@@ -620,7 +628,7 @@
719
 		});
720
 	}
721
 
722
-	private void postAdd(final Object parent, final Object element) {
723
+	/* package */ void postAdd(final Object parent, final Object element) {
724
 		postRunnable(new Runnable() {
725
 			public void run() {
726
 				Control ctrl= fViewer.getControl();
727
@@ -647,7 +655,14 @@
728
 	private void postProjectStateChanged(final Object root) {
729
 		postRunnable(new Runnable() {
730
 			public void run() {
731
-				fPart.projectStateChanged(root);
732
+				//fPart.projectStateChanged(root); 
733
+				Control ctrl= fViewer.getControl();
734
+				if (ctrl != null && !ctrl.isDisposed()) {
735
+					fViewer.refresh(root, true);
736
+					// trigger a syntetic selection change so that action refresh their
737
+					// enable state.
738
+					fViewer.setSelection(fViewer.getSelection());
739
+				}
740
 			}
741
 		});
742
 	}
743
Index: plugin.xml
744
===================================================================
745
RCS file: /home/eclipse/org.eclipse.jdt.ui/plugin.xml,v
746
retrieving revision 1.617
747
diff -u -r1.617 plugin.xml
748
--- plugin.xml	5 Feb 2006 18:11:23 -0000	1.617
749
+++ plugin.xml	8 Feb 2006 00:46:02 -0000
750
@@ -5047,4 +5047,97 @@
751
       </objectContribution>
752
    </extension>
753
 
754
+
755
+    <!-- ADDITIONS BELOW THIS LINE -->
756
+      
757
+    <extension
758
+          point="org.eclipse.ui.navigator.viewer">
759
+       <viewerContentBinding 
760
+             viewerId="org.eclipse.ui.navigator.resourceContent">
761
+          <includes>
762
+       	      <contentExtension pattern="org.eclipse.jdt.java.ui.javaContent" />       
763
+          </includes>       
764
+       </viewerContentBinding>
765
+    </extension> 
766
+      
767
+    <extension
768
+          point="org.eclipse.ui.navigator.navigatorContent">
769
+       <navigatorContent
770
+             activeByDefault="true"
771
+             contentProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareContentProvider"
772
+             icon="$nl$/icons/full/obj16/java_model.gif"
773
+             id="org.eclipse.jdt.java.ui.javaContent"
774
+             labelProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareLabelProvider"
775
+             name="Java Elements"
776
+             priority="high">
777
+          <triggerPoints> 
778
+	         <or>           
779
+               <adapt 
780
+	                     type="org.eclipse.core.resources.IProject" > 
781
+		                  <test
782
+		                     property="org.eclipse.core.resources.projectNature"
783
+		                     value="org.eclipse.jdt.core.javanature" />
784
+               </adapt>             
785
+	           <instanceof 
786
+	                 value="org.eclipse.core.resources.IWorkspaceRoot" /> 
787
+	                 
788
+	           <instanceof
789
+	                 value="org.eclipse.core.resources.IFolder" /> 
790
+	           <instanceof
791
+	                value="org.eclipse.core.resources.IFile" /> 
792
+	           <instanceof 
793
+	                 value="org.eclipse.jdt.core.IJavaProject" /> 
794
+	           <instanceof 
795
+	                 value="org.eclipse.jdt.core.IJavaElement" /> 
796
+	           <instanceof
797
+	                 value="org.eclipse.jdt.internal.core.JarEntryFile" /> 
798
+	           <instanceof
799
+	                 value="org.eclipse.jdt.core.IClassFile" /> 
800
+	           <instanceof
801
+	                 value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" /> 
802
+	            <!--
803
+				<instanceof 
804
+ 					value="org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel" /> 
805
+ 					-->
806
+	         </or>
807
+          </triggerPoints>
808
+          <possibleChildren> 
809
+	         <or>           
810
+               <adapt 
811
+					type="org.eclipse.core.resources.IProject" >  
812
+               </adapt>             
813
+	           <instanceof 
814
+	                 value="org.eclipse.core.resources.IWorkspaceRoot" /> 	                 
815
+	           <instanceof
816
+	                 value="org.eclipse.core.resources.IFolder" /> 
817
+	           <instanceof
818
+	                value="org.eclipse.core.resources.IFile" /> 
819
+	           <instanceof 
820
+	                 value="org.eclipse.jdt.core.IJavaProject" /> 
821
+	           <instanceof 
822
+	                 value="org.eclipse.jdt.core.IJavaElement" /> 
823
+	           <instanceof
824
+	                 value="org.eclipse.jdt.internal.core.JarEntryFile" /> 
825
+	           <instanceof
826
+	                 value="org.eclipse.jdt.core.IClassFile" /> 
827
+	           <instanceof
828
+	                 value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" />  
829
+	         </or>
830
+          </possibleChildren>          
831
+          <actionProvider 
832
+	               class="org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionProvider">
833
+	               <enablement>	               
834
+	               <adapt 
835
+	                     type="org.eclipse.jdt.core.IJavaElement" /> 
836
+	               </enablement>
837
+          </actionProvider>
838
+          <override
839
+                policy="InvokeAlwaysRegardlessOfSuppressedExt"
840
+                suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/>
841
+          <commonSorter
842
+                class="org.eclipse.jdt.ui.JavaElementSorter"
843
+                id="org.eclipse.jdt.ui.javaElementSorter"/> 
844
+       </navigatorContent>
845
+    </extension>
846
+     
847
 </plugin>
848
\ No newline at end of file
849
Index: ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java
850
===================================================================
851
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java,v
852
retrieving revision 1.7
853
diff -u -r1.7 MultiActionGroup.java
854
--- ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java	17 Jun 2005 15:51:51 -0000	1.7
855
+++ ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java	8 Feb 2006 00:46:02 -0000
856
@@ -37,6 +37,8 @@
857
  */
858
 public class MultiActionGroup extends ActionGroup {
859
 	
860
+	public IAction[] NO_ACTIONS = new IAction[0];
861
+	
862
 	private IAction[] fActions; 
863
 	
864
 	private int fCurrentSelection;
865
@@ -57,6 +59,32 @@
866
 		fCurrentSelection= currentSelection;
867
 		fActions= actions;
868
 	}
869
+	
870
+	/**
871
+	 * Creates a new action group with a given set of actions.
872
+	 * 
873
+	 * @param actions			the actions for this multi group
874
+	 * @param currentSelection	decides which action is selected in the menu on start up.
875
+	 * 							Denotes the location in the actions array of the current
876
+	 * 							selected state. It cannot be null.
877
+	 */
878
+	public MultiActionGroup(int currentSelection) {
879
+		super();
880
+		
881
+		fCurrentSelection= currentSelection;
882
+		fActions= NO_ACTIONS;
883
+	}
884
+	
885
+	/**
886
+	 * 
887
+	 * @param actions			the actions for this multi group 
888
+	 */
889
+	protected final void setActions(IAction[] actions) {
890
+		if(actions != null)
891
+			fActions = actions;
892
+		else
893
+			fActions = NO_ACTIONS;
894
+	}
895
 
896
 	/**
897
 	 * Add the actions to the given menu manager.
898
Index: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
899
===================================================================
900
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
901
diff -N ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
902
--- /dev/null	1 Jan 1970 00:00:00 -0000
903
+++ ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java	1 Jan 1970 00:00:00 -0000
904
@@ -0,0 +1,131 @@
905
+/*******************************************************************************
906
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
907
+ * All rights reserved. This program and the accompanying materials
908
+ * are made available under the terms of the Eclipse Public License v1.0
909
+ * which accompanies this distribution, and is available at
910
+ * http://www.eclipse.org/legal/epl-v10.html
911
+ *
912
+ * Contributors:
913
+ *     IBM Corporation - initial API and implementation
914
+ *******************************************************************************/
915
+package org.eclipse.jdt.internal.ui.packageview;
916
+
917
+import org.eclipse.jface.action.Action;
918
+import org.eclipse.jface.action.IAction;
919
+import org.eclipse.jface.action.IMenuManager;
920
+import org.eclipse.jface.action.MenuManager;
921
+import org.eclipse.jface.action.Separator;
922
+import org.eclipse.jface.viewers.StructuredViewer;
923
+
924
+import org.eclipse.ui.IActionBars;
925
+import org.eclipse.ui.IWorkbenchActionConstants;
926
+import org.eclipse.ui.PlatformUI;
927
+import org.eclipse.ui.navigator.IExtensionStateModel;
928
+
929
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
930
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
931
+import org.eclipse.jdt.internal.ui.actions.MultiActionGroup;
932
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
933
+
934
+/**
935
+ * Adds view menus to switch between flat and hierarchical layout.
936
+ * 
937
+ * @since 2.1
938
+ */
939
+public class CommonLayoutActionGroup extends MultiActionGroup {
940
+
941
+	private boolean fHasContributedToViewMenu = false;
942
+	private IAction fHierarchicalLayout = null;
943
+	private IAction fFlatLayoutAction = null; 
944
+
945
+	public CommonLayoutActionGroup(StructuredViewer structuredViewer, IExtensionStateModel stateModel) {
946
+		super(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) ? 0 : 1);
947
+		IAction[] actions = createActions(structuredViewer, stateModel);
948
+		setActions(actions); 
949
+	}
950
+
951
+	/* (non-Javadoc)
952
+	 * @see ActionGroup#fillActionBars(IActionBars)
953
+	 */
954
+	public void fillActionBars(IActionBars actionBars) {
955
+		super.fillActionBars(actionBars);
956
+		if(!fHasContributedToViewMenu) {
957
+			synchronized(this) {
958
+				if(!fHasContributedToViewMenu) {
959
+					fHasContributedToViewMenu = true;
960
+					contributeToViewMenu(actionBars.getMenuManager());
961
+				}
962
+			}
963
+		}
964
+	}
965
+	
966
+	private void contributeToViewMenu(IMenuManager viewMenu) {
967
+		viewMenu.add(new Separator());
968
+
969
+		// Create layout sub menu
970
+		
971
+		IMenuManager layoutSubMenu= new MenuManager(PackagesMessages.LayoutActionGroup_label); 
972
+		final String layoutGroupName= "layout"; //$NON-NLS-1$
973
+		Separator marker= new Separator(layoutGroupName);
974
+
975
+		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
976
+		viewMenu.add(marker);
977
+		viewMenu.appendToGroup(layoutGroupName, layoutSubMenu);
978
+		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));//$NON-NLS-1$		
979
+		addActions(layoutSubMenu);
980
+	}
981
+	
982
+	
983
+	private IAction[] createActions(StructuredViewer structuredViewer, IExtensionStateModel stateModel) {
984
+		
985
+		fFlatLayoutAction= new CommonLayoutAction(structuredViewer, stateModel, true);
986
+		fFlatLayoutAction.setText(PackagesMessages.LayoutActionGroup_flatLayoutAction_label); 
987
+		JavaPluginImages.setLocalImageDescriptors(fFlatLayoutAction, "flatLayout.gif"); //$NON-NLS-1$
988
+		
989
+		fHierarchicalLayout= new CommonLayoutAction(structuredViewer, stateModel, false);
990
+		fHierarchicalLayout.setText(PackagesMessages.LayoutActionGroup_hierarchicalLayoutAction_label);	  
991
+		JavaPluginImages.setLocalImageDescriptors(fHierarchicalLayout, "hierarchicalLayout.gif"); //$NON-NLS-1$
992
+		
993
+		fHierarchicalLayout.setChecked(!stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT));
994
+		fFlatLayoutAction.setChecked(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT));
995
+		
996
+		return new IAction[]{fFlatLayoutAction, fHierarchicalLayout};
997
+	}
998
+	
999
+	public void setFlatLayout(boolean flatLayout) {
1000
+		fHierarchicalLayout.setChecked(!flatLayout);
1001
+		fFlatLayoutAction.setChecked(flatLayout);
1002
+	}
1003
+	 
1004
+}
1005
+
1006
+class CommonLayoutAction extends Action implements IAction {
1007
+
1008
+	private final boolean fIsFlatLayout;
1009
+	private IExtensionStateModel fStateModel;
1010
+	private StructuredViewer fStructuredViewer;
1011
+
1012
+	public CommonLayoutAction(StructuredViewer structuredViewer, IExtensionStateModel stateModel, boolean flat) {
1013
+		super("", AS_RADIO_BUTTON); //$NON-NLS-1$
1014
+		fStateModel = stateModel;
1015
+		fStructuredViewer = structuredViewer;
1016
+		fIsFlatLayout= flat; 
1017
+		if (fIsFlatLayout)
1018
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_FLAT_ACTION);
1019
+		else
1020
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_HIERARCHICAL_ACTION);
1021
+	}
1022
+
1023
+	/*
1024
+	 * @see org.eclipse.jface.action.IAction#run()
1025
+	 */
1026
+	public void run() {
1027
+		if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) != fIsFlatLayout) {
1028
+			fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, fIsFlatLayout);
1029
+  			 	
1030
+			fStructuredViewer.getControl().setRedraw(false);
1031
+			fStructuredViewer.refresh();
1032
+			fStructuredViewer.getControl().setRedraw(true);
1033
+		}
1034
+	}
1035
+}
1036
Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
1037
===================================================================
1038
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
1039
diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
1040
--- /dev/null	1 Jan 1970 00:00:00 -0000
1041
+++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java	1 Jan 1970 00:00:00 -0000
1042
@@ -0,0 +1,174 @@
1043
+/***************************************************************************************************
1044
+ * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
1045
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
1046
+ * which accompanies this distribution, and is available at
1047
+ * http://www.eclipse.org/legal/epl-v10.html
1048
+ * 
1049
+ * Contributors: IBM Corporation - initial API and implementation
1050
+ **************************************************************************************************/
1051
+package org.eclipse.jdt.internal.ui.packageview;
1052
+
1053
+import java.util.Arrays;
1054
+import java.util.HashSet;
1055
+import java.util.Iterator;
1056
+import java.util.Set;
1057
+
1058
+import org.eclipse.core.resources.IResource;
1059
+import org.eclipse.core.resources.IWorkspaceRoot;
1060
+
1061
+import org.eclipse.jface.preference.IPreferenceStore;
1062
+import org.eclipse.jface.util.IPropertyChangeListener;
1063
+import org.eclipse.jface.util.PropertyChangeEvent;
1064
+import org.eclipse.jface.viewers.Viewer;
1065
+
1066
+import org.eclipse.ui.IMemento;
1067
+import org.eclipse.ui.navigator.IExtensionStateModel;
1068
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
1069
+import org.eclipse.ui.navigator.PipelinedShapeModification;
1070
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
1071
+
1072
+import org.eclipse.jdt.core.IJavaElement;
1073
+import org.eclipse.jdt.core.IJavaModel;
1074
+import org.eclipse.jdt.core.JavaCore;
1075
+
1076
+import org.eclipse.jdt.ui.PreferenceConstants;
1077
+
1078
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
1079
+
1080
+public class PreferenceAwareContentProvider extends
1081
+		PackageExplorerContentProvider implements IPipelinedTreeContentProvider {
1082
+
1083
+	public PreferenceAwareContentProvider() {
1084
+		super(false);
1085
+	}
1086
+
1087
+	public PreferenceAwareContentProvider(boolean provideMembers) {
1088
+		super(provideMembers);
1089
+	}
1090
+
1091
+	public static final String JDT_EXTENSION_ID = "org.eclipse.jdt.ui.javaContent"; //$NON-NLS-1$ 
1092
+
1093
+	private IExtensionStateModel fStateModel;
1094
+
1095
+	public void init(IExtensionStateModel stateModel, IMemento memento) {
1096
+		fStateModel = stateModel;
1097
+		// fManager = new WorkingSetModelManager(fStateModel, this);
1098
+		// expose the manager for the action provider
1099
+		// fStateModel.setProperty(WorkingSetModelManager.INSTANCE_KEY,
1100
+		// fManager);
1101
+		restoreState(memento);
1102
+		fStateModel.addPropertyChangeListener(new IPropertyChangeListener() {
1103
+			public void propertyChange(PropertyChangeEvent event) {
1104
+				if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
1105
+					if (event.getNewValue() != null) {
1106
+						boolean newValue = ((Boolean) event.getNewValue())
1107
+								.booleanValue() ? true : false;
1108
+						setIsFlatLayout(newValue);
1109
+					}
1110
+				}
1111
+
1112
+			}
1113
+		});
1114
+
1115
+		IPreferenceStore store = PreferenceConstants.getPreferenceStore();
1116
+		boolean showCUChildren = store
1117
+				.getBoolean(PreferenceConstants.SHOW_CU_CHILDREN);
1118
+		setProvideMembers(showCUChildren);
1119
+	}
1120
+
1121
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
1122
+		super.inputChanged(viewer, oldInput, findInputElement(newInput));
1123
+	}
1124
+
1125
+	public Object[] getElements(Object inputElement) {
1126
+		if (inputElement instanceof IWorkspaceRoot)
1127
+			return super.getElements(JavaCore
1128
+					.create((IWorkspaceRoot) inputElement));
1129
+		return super.getElements(inputElement);
1130
+	}
1131
+
1132
+	private Object findInputElement(Object newInput) {
1133
+		if (newInput instanceof IWorkspaceRoot) {
1134
+			return JavaCore.create((IWorkspaceRoot) newInput);
1135
+		}
1136
+		return newInput;
1137
+	}
1138
+
1139
+	public void restoreState(IMemento memento) {
1140
+
1141
+	}
1142
+
1143
+	public void saveState(IMemento memento) {
1144
+
1145
+	}
1146
+
1147
+	public void getPipelinedChildren(Object parent, Set currentChildren) {
1148
+		Object[] children = getChildren(parent);
1149
+		for (Iterator iter = currentChildren.iterator(); iter.hasNext();)
1150
+			if (iter.next() instanceof IResource)
1151
+				iter.remove();
1152
+		currentChildren.addAll(Arrays.asList(children));
1153
+	}
1154
+
1155
+	public void getPipelinedElements(Object input, Set currentElements) {
1156
+		Object[] children = getElements(input);
1157
+
1158
+		for (Iterator iter = currentElements.iterator(); iter.hasNext();)
1159
+			if (iter.next() instanceof IResource)
1160
+				iter.remove();
1161
+
1162
+		currentElements.addAll(Arrays.asList(children));
1163
+	}
1164
+
1165
+	public Object getPipelinedParent(Object object, Object suggestedParent) {
1166
+		return getParent(object);
1167
+	}
1168
+
1169
+	public PipelinedShapeModification interceptAdd(
1170
+			PipelinedShapeModification anAddModification) {
1171
+		// TODO Auto-generated method stub
1172
+		return null;
1173
+	}
1174
+
1175
+	public PipelinedShapeModification interceptRemove(
1176
+			PipelinedShapeModification aRemoveModification) {
1177
+		// TODO Auto-generated method stub
1178
+		return null;
1179
+	}
1180
+
1181
+	public boolean interceptRefresh(
1182
+			PipelinedViewerUpdate aRefreshSynchronization) {
1183
+		IJavaElement javaElement;
1184
+		Set interceptedElements = new HashSet();
1185
+		for (Iterator iter = aRefreshSynchronization.getRefreshTargets()
1186
+				.iterator(); iter.hasNext();) {
1187
+			Object element = iter.next();
1188
+			if (element instanceof IResource) {
1189
+				if ((javaElement = JavaCore.create((IResource) element)) != null && javaElement.exists()) {
1190
+					iter.remove();
1191
+					interceptedElements.add(javaElement);
1192
+				}
1193
+			}
1194
+		}
1195
+		if (interceptedElements.size() > 0) {
1196
+			aRefreshSynchronization.getRefreshTargets().addAll(
1197
+					interceptedElements);
1198
+			return true;
1199
+		}
1200
+		return false;
1201
+
1202
+	}
1203
+
1204
+	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
1205
+		// TODO Auto-generated method stub
1206
+		return false;
1207
+	}
1208
+
1209
+	/* package */void postAdd(final Object parent, final Object element) {
1210
+		if (parent instanceof IJavaModel)
1211
+			super.postAdd(((IJavaModel) parent).getWorkspace(), element);
1212
+		else
1213
+			super.postAdd(parent, element);
1214
+	}
1215
+
1216
+}
1217
Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
1218
===================================================================
1219
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
1220
diff -N ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
1221
--- /dev/null	1 Jan 1970 00:00:00 -0000
1222
+++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java	1 Jan 1970 00:00:00 -0000
1223
@@ -0,0 +1,126 @@
1224
+/***************************************************************************************************
1225
+ * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
1226
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
1227
+ * which accompanies this distribution, and is available at
1228
+ * http://www.eclipse.org/legal/epl-v10.html
1229
+ * 
1230
+ * Contributors: IBM Corporation - initial API and implementation
1231
+ **************************************************************************************************/
1232
+package org.eclipse.jdt.internal.ui.packageview;
1233
+
1234
+import org.eclipse.jface.action.IMenuManager;
1235
+import org.eclipse.jface.preference.IPreferenceStore;
1236
+import org.eclipse.jface.viewers.StructuredViewer;
1237
+
1238
+import org.eclipse.ui.IActionBars;
1239
+import org.eclipse.ui.IMemento;
1240
+import org.eclipse.ui.IViewPart;
1241
+import org.eclipse.ui.navigator.CommonActionProvider;
1242
+import org.eclipse.ui.navigator.CommonActionProviderConfig;
1243
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
1244
+import org.eclipse.ui.navigator.IExtensionStateModel;
1245
+import org.eclipse.ui.navigator.INavigatorContentService;
1246
+
1247
+import org.eclipse.jdt.ui.actions.CCPActionGroup;
1248
+
1249
+import org.eclipse.jdt.internal.ui.JavaPlugin;
1250
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
1251
+import org.eclipse.jdt.internal.ui.workingsets.ViewActionGroup;
1252
+
1253
+public class PackageExplorerActionProvider extends CommonActionProvider { 
1254
+
1255
+	private static final int HIERARCHICAL_LAYOUT = 0x1;
1256
+
1257
+	private static final int FLAT_LAYOUT = 0x2;
1258
+
1259
+	private static final String TAG_LAYOUT = "layout"; //$NON-NLS-1$
1260
+
1261
+	private ViewActionGroup fViewActionGroup;
1262
+
1263
+	private CommonLayoutActionGroup fLayoutActionGroup;
1264
+
1265
+	private boolean fHasFilledViewMenu = false;
1266
+
1267
+	private IExtensionStateModel fStateModel;
1268
+
1269
+	private CCPActionGroup fCCPGroup;
1270
+
1271
+	public void fillActionBars(IActionBars actionBars) {
1272
+		if (!fHasFilledViewMenu) {
1273
+			if(fViewActionGroup != null)
1274
+				fViewActionGroup.fillActionBars(actionBars);
1275
+			fLayoutActionGroup.fillActionBars(actionBars);
1276
+			fHasFilledViewMenu = true;
1277
+		}
1278
+
1279
+	}
1280
+
1281
+	public void fillContextMenu(IMenuManager menu) {
1282
+
1283
+		if(fCCPGroup != null)
1284
+			fCCPGroup.fillContextMenu(menu);
1285
+
1286
+	}
1287
+
1288
+	public void init(CommonActionProviderConfig config) {
1289
+
1290
+		ICommonViewerWorkbenchSite workbenchSite = null;
1291
+		if (config.getViewSite() instanceof ICommonViewerWorkbenchSite)
1292
+			workbenchSite = (ICommonViewerWorkbenchSite) config.getViewSite();
1293
+
1294
+		fStateModel = config.getExtensionStateModel();
1295
+//		WorkingSetModelManager workingSetModelManager = (WorkingSetModelManager) fStateModel
1296
+//				.getProperty(WorkingSetModelManager.INSTANCE_KEY);
1297
+
1298
+		fLayoutActionGroup = new CommonLayoutActionGroup(config
1299
+				.getStructuredViewer(), fStateModel);
1300
+
1301
+		if (workbenchSite != null) {
1302
+//			fViewActionGroup = new ViewActionGroup(
1303
+//					ViewActionGroup.SHOW_PROJECTS, /*workingSetModelManager,*/
1304
+//					workbenchSite.getSite());
1305
+			if (workbenchSite.getPart() != null
1306
+					&& workbenchSite.getPart() instanceof IViewPart) {
1307
+				fCCPGroup = new CCPActionGroup((IViewPart) workbenchSite
1308
+						.getPart());
1309
+			}
1310
+
1311
+		}
1312
+
1313
+	}
1314
+
1315
+	public void init(final String extensionId, final IViewPart viewPart,
1316
+			final INavigatorContentService contentService,
1317
+			final StructuredViewer structuredViewer) {
1318
+
1319
+	}
1320
+
1321
+	public void restoreState(IMemento memento) {
1322
+		super.restoreState(memento);
1323
+		restoreLayoutState(memento);
1324
+	}
1325
+
1326
+	private void restoreLayoutState(IMemento memento) {
1327
+		boolean isCurrentLayoutFlat = true;
1328
+		Integer state = null;
1329
+		if (memento != null)
1330
+			state = memento.getInteger(TAG_LAYOUT);
1331
+
1332
+		// If no memento try an restore from preference store
1333
+		if (state == null) {
1334
+			IPreferenceStore store = JavaPlugin.getDefault()
1335
+					.getPreferenceStore();
1336
+			state = new Integer(store.getInt(TAG_LAYOUT));
1337
+		}
1338
+
1339
+		if (state.intValue() == FLAT_LAYOUT)
1340
+			isCurrentLayoutFlat = true;
1341
+		else if (state.intValue() == HIERARCHICAL_LAYOUT)
1342
+			isCurrentLayoutFlat = false;
1343
+
1344
+		fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT,
1345
+				isCurrentLayoutFlat);
1346
+		fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat);
1347
+	}
1348
+
1349
+}
1350
Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
1351
===================================================================
1352
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
1353
diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
1354
--- /dev/null	1 Jan 1970 00:00:00 -0000
1355
+++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java	1 Jan 1970 00:00:00 -0000
1356
@@ -0,0 +1,191 @@
1357
+/***************************************************************************************************
1358
+ * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. This program and the
1359
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
1360
+ * which accompanies this distribution, and is available at
1361
+ * http://www.eclipse.org/legal/epl-v10.html
1362
+ * 
1363
+ * Contributors: IBM Corporation - initial API and implementation
1364
+ **************************************************************************************************/
1365
+package org.eclipse.jdt.internal.ui.packageview;
1366
+
1367
+import org.eclipse.core.resources.IContainer;
1368
+import org.eclipse.core.resources.IResource;
1369
+
1370
+import org.eclipse.swt.graphics.Color;
1371
+import org.eclipse.swt.graphics.Image;
1372
+
1373
+import org.eclipse.jface.util.IPropertyChangeListener;
1374
+import org.eclipse.jface.util.PropertyChangeEvent;
1375
+import org.eclipse.jface.viewers.ILabelDecorator;
1376
+import org.eclipse.jface.viewers.ILabelProviderListener;
1377
+import org.eclipse.jface.viewers.ITreeContentProvider;
1378
+
1379
+import org.eclipse.ui.IMemento;
1380
+import org.eclipse.ui.navigator.ICommonLabelProvider;
1381
+import org.eclipse.ui.navigator.IExtensionStateModel;
1382
+
1383
+import org.eclipse.jdt.core.IJavaElement;
1384
+
1385
+import org.eclipse.jdt.ui.JavaElementLabels;
1386
+
1387
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
1388
+import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
1389
+import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
1390
+
1391
+/**
1392
+ * Provides the labels for the Package Explorer.
1393
+ * <p>
1394
+ * It provides labels for the packages in hierarchical layout and in all other
1395
+ * cases delegates it to its super class.
1396
+ * </p>
1397
+ * 
1398
+ * @since 2.1
1399
+ */
1400
+public class PreferenceAwareLabelProvider implements ICommonLabelProvider {
1401
+
1402
+	private final long LABEL_FLAGS = JavaElementLabels.DEFAULT_QUALIFIED
1403
+			| JavaElementLabels.ROOT_POST_QUALIFIED
1404
+			| JavaElementLabels.APPEND_ROOT_PATH
1405
+			| JavaElementLabels.M_PARAMETER_TYPES
1406
+			| JavaElementLabels.M_PARAMETER_NAMES
1407
+			| JavaElementLabels.M_APP_RETURNTYPE
1408
+			| JavaElementLabels.M_EXCEPTIONS
1409
+			| JavaElementLabels.F_APP_TYPE_SIGNATURE
1410
+			| JavaElementLabels.T_TYPE_PARAMETERS;
1411
+
1412
+	private PackageExplorerLabelProvider delegeteLabelProvider;
1413
+
1414
+	private PackageExplorerContentProvider fContentProvider;
1415
+
1416
+	private IExtensionStateModel fStateModel;
1417
+
1418
+	public PreferenceAwareLabelProvider() {
1419
+
1420
+	}
1421
+
1422
+	public void init(IExtensionStateModel aStateModel,
1423
+			ITreeContentProvider contentProvider) {
1424
+		fStateModel = aStateModel;
1425
+
1426
+		fContentProvider = (PackageExplorerContentProvider) contentProvider;
1427
+		delegeteLabelProvider = createLabelProvider();
1428
+
1429
+		delegeteLabelProvider.setIsFlatLayout(fStateModel
1430
+				.getBooleanProperty(Values.IS_LAYOUT_FLAT));
1431
+		fStateModel.addPropertyChangeListener(new IPropertyChangeListener() {
1432
+			public void propertyChange(PropertyChangeEvent event) {
1433
+				if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
1434
+					if (event.getNewValue() != null) {
1435
+						boolean newValue = ((Boolean) event.getNewValue())
1436
+								.booleanValue() ? true : false;
1437
+						delegeteLabelProvider.setIsFlatLayout(newValue);
1438
+					}
1439
+				}
1440
+
1441
+			}
1442
+		});
1443
+	}
1444
+
1445
+	public String getDescription(Object anElement) {
1446
+		return formatMessage(anElement);
1447
+	}
1448
+
1449
+	private PackageExplorerLabelProvider createLabelProvider() {
1450
+
1451
+		return new PackageExplorerLabelProvider(
1452
+				AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS
1453
+						| JavaElementLabels.P_COMPRESSED,
1454
+				AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS
1455
+						| JavaElementImageProvider.SMALL_ICONS,
1456
+				fContentProvider);
1457
+
1458
+	}
1459
+
1460
+	public void dispose() {
1461
+		delegeteLabelProvider.dispose();
1462
+	}
1463
+
1464
+	public void propertyChange(PropertyChangeEvent event) {
1465
+		delegeteLabelProvider.propertyChange(event);
1466
+	}
1467
+
1468
+	public void addLabelDecorator(ILabelDecorator decorator) {
1469
+		delegeteLabelProvider.addLabelDecorator(decorator);
1470
+	}
1471
+
1472
+	public void addListener(ILabelProviderListener listener) {
1473
+		delegeteLabelProvider.addListener(listener);
1474
+	}
1475
+
1476
+	public Color getBackground(Object element) {
1477
+		return delegeteLabelProvider.getBackground(element);
1478
+	}
1479
+
1480
+	public Color getForeground(Object element) {
1481
+		return delegeteLabelProvider.getForeground(element);
1482
+	}
1483
+
1484
+	public Image getImage(Object element) {
1485
+		return delegeteLabelProvider.getImage(element);
1486
+	}
1487
+
1488
+	public boolean isLabelProperty(Object element, String property) {
1489
+		return delegeteLabelProvider.isLabelProperty(element, property);
1490
+	}
1491
+
1492
+	public void removeListener(ILabelProviderListener listener) {
1493
+		delegeteLabelProvider.removeListener(listener);
1494
+	}
1495
+
1496
+	public boolean equals(Object obj) {
1497
+		return delegeteLabelProvider.equals(obj);
1498
+	}
1499
+
1500
+	public int hashCode() {
1501
+		return delegeteLabelProvider.hashCode();
1502
+	}
1503
+
1504
+	public String toString() {
1505
+		return delegeteLabelProvider.toString();
1506
+	}
1507
+
1508
+	public String getText(Object element) {
1509
+		return delegeteLabelProvider.getText(element);
1510
+	}
1511
+
1512
+	public void setIsFlatLayout(boolean state) {
1513
+		delegeteLabelProvider.setIsFlatLayout(state);
1514
+	}
1515
+
1516
+	// Taken from StatusBarUpdater
1517
+
1518
+	protected String formatMessage(Object element) {
1519
+		if (element instanceof IJavaElement) {
1520
+			return formatJavaElementMessage((IJavaElement) element);
1521
+		} else if (element instanceof IResource) {
1522
+			return formatResourceMessage((IResource) element);
1523
+		}
1524
+		return ""; //$NON-NLS-1$
1525
+	}
1526
+
1527
+	private String formatJavaElementMessage(IJavaElement element) {
1528
+		return JavaElementLabels.getElementLabel(element, LABEL_FLAGS);
1529
+	}
1530
+
1531
+	private String formatResourceMessage(IResource element) {
1532
+		IContainer parent = element.getParent();
1533
+		if (parent != null && parent.getType() != IResource.ROOT)
1534
+			return element.getName() + JavaElementLabels.CONCAT_STRING
1535
+					+ parent.getFullPath().makeRelative().toString();
1536
+		else
1537
+			return element.getName();
1538
+	}
1539
+
1540
+	public void restoreState(IMemento aMemento) {
1541
+
1542
+	}
1543
+
1544
+	public void saveState(IMemento aMemento) {
1545
+
1546
+	}
1547
+}
1548
Index: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
1549
===================================================================
1550
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
1551
diff -N ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
1552
--- /dev/null	1 Jan 1970 00:00:00 -0000
1553
+++ ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java	1 Jan 1970 00:00:00 -0000
1554
@@ -0,0 +1,23 @@
1555
+/***************************************************************************************************
1556
+ * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
1557
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
1558
+ * which accompanies this distribution, and is available at
1559
+ * http://www.eclipse.org/legal/epl-v10.html
1560
+ * 
1561
+ * Contributors: IBM Corporation - initial API and implementation
1562
+ **************************************************************************************************/
1563
+package org.eclipse.jdt.internal.ui.packageview;
1564
+
1565
+
1566
+public interface IExtensionStateConstants {
1567
+ 
1568
+	String ROOT_MODE= "rootMode"; //$NON-NLS-1$ 
1569
+
1570
+	interface Values {
1571
+
1572
+		String IS_LAYOUT_FLAT= "isLayoutFlat"; //$NON-NLS-1$
1573
+ 
1574
+
1575
+	}
1576
+
1577
+}
    (1-1/1)