alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.ui
Index: ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java,v
retrieving revision 1.9
diff -u -r1.9 ConfigureWorkingSetAction.java
--- ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java	18 Nov 2005 14:45:35 -0000	1.9
+++ ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAction.java	8 Feb 2006 00:46:03 -0000
@@ -14,6 +14,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.eclipse.swt.widgets.Shell;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.IDialogConstants;
 
@@ -21,13 +23,18 @@
 import org.eclipse.ui.IWorkingSet;
 
 public class ConfigureWorkingSetAction extends Action {
-
-	private final IWorkbenchPartSite fSite;
+ 
 	private WorkingSetModel fWorkingSetModel;
+	private Shell fShell; 
 
 	public ConfigureWorkingSetAction(IWorkbenchPartSite site) {
 		super(WorkingSetMessages.ConfigureWorkingSetAction_label); 
-		fSite= site;
+		fShell= site.getShell();
+	}
+	
+	public ConfigureWorkingSetAction(Shell shell) {
+		super(WorkingSetMessages.ConfigureWorkingSetAction_label); 
+		fShell= shell;
 	}
 	
 	public void setWorkingSetModel(WorkingSetModel model) {
@@ -39,9 +46,10 @@
 	 */
 	public void run() {
 		List workingSets= new ArrayList(Arrays.asList(fWorkingSetModel.getAllWorkingSets()));
+
 		IWorkingSet[] activeWorkingSets= fWorkingSetModel.getActiveWorkingSets();
 		WorkingSetConfigurationDialog dialog= new WorkingSetConfigurationDialog(
-			fSite.getShell(), 
+			fShell, 
 			(IWorkingSet[])workingSets.toArray(new IWorkingSet[workingSets.size()]),
 			activeWorkingSets); 
 		dialog.setSelection(activeWorkingSets);
Index: ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java,v
retrieving revision 1.8
diff -u -r1.8 ViewActionGroup.java
--- ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java	13 Apr 2005 17:35:11 -0000	1.8
+++ ui/org/eclipse/jdt/internal/ui/workingsets/ViewActionGroup.java	8 Feb 2006 00:46:03 -0000
@@ -45,7 +45,12 @@
 
 	public ViewActionGroup(int mode, IPropertyChangeListener changeListener, IWorkbenchPartSite site) {
 		fChangeListener= changeListener;
-		fFilterActionGroup= new WorkingSetFilterActionGroup(site, changeListener);
+		if(fChangeListener == null) {
+			fChangeListener = new IPropertyChangeListener() {
+				public void propertyChange(PropertyChangeEvent event) {}
+			};
+		}
+		fFilterActionGroup= new WorkingSetFilterActionGroup(site, fChangeListener);
 		fShowActionGroup= new WorkingSetShowActionGroup(site);
 		fMode= mode;
 		if (showWorkingSets())
@@ -70,16 +75,24 @@
 	 */
 	public void fillActionBars(IActionBars actionBars) {
 		super.fillActionBars(actionBars);
-		fMenuManager= actionBars.getMenuManager();
-		IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); 
-		fillShowMenu(showMenu);
-		fMenuManager.add(showMenu);
-		fMenuManager.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
+		if(fMenuManager == null) {
+			fMenuManager= actionBars.getMenuManager();
+			fillViewMenu(fMenuManager);
+		}
+
 		if (fActiveActionGroup == null)
 			fActiveActionGroup= fFilterActionGroup;
 		((ActionGroup)fActiveActionGroup).fillActionBars(actionBars);
 	}
 	
+	private void fillViewMenu(IMenuManager menu) { 
+		
+		IMenuManager showMenu= new MenuManager(WorkingSetMessages.ViewActionGroup_show_label); 
+		fillShowMenu(showMenu);
+		menu.add(showMenu);
+		menu.add(new Separator(IWorkingSetActionGroup.ACTION_GROUP));
+	}
+	
 	private void fillShowMenu(IMenuManager menu) {
 		ViewAction projects= new ViewAction(this, SHOW_PROJECTS);
 		projects.setText(WorkingSetMessages.ViewActionGroup_projects_label); 
@@ -116,7 +129,8 @@
 		}
 		fActiveActionGroup.fillViewMenu(fMenuManager);
 		fMenuManager.updateAll(true);
-		fChangeListener.propertyChange(event);
+		if(fChangeListener != null)
+			fChangeListener.propertyChange(event);
 	}
 	
 	public WorkingSetFilterActionGroup getFilterGroup() {
Index: ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java,v
retrieving revision 1.14
diff -u -r1.14 WorkingSetModel.java
--- ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java	26 Jan 2006 14:54:03 -0000	1.14
+++ ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java	8 Feb 2006 00:46:03 -0000
@@ -1,13 +1,11 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
+/***************************************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
 package org.eclipse.jdt.internal.ui.workingsets;
 
 import java.util.ArrayList;
@@ -36,12 +34,12 @@
 import org.eclipse.ui.PlatformUI;
 
 public class WorkingSetModel {
-	
+
 	public static final String CHANGE_WORKING_SET_MODEL_CONTENT= "workingSetModelChanged"; //$NON-NLS-1$
-	
+
 	public static final IElementComparer COMPARER= new WorkingSetComparar();
-	
-	private static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
+
+	public static final String TAG_LOCAL_WORKING_SET_MANAGER= "localWorkingSetManager"; //$NON-NLS-1$
 	private static final String TAG_ACTIVE_WORKING_SET= "activeWorkingSet"; //$NON-NLS-1$
 	private static final String TAG_WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$
 	private static final String TAG_CONFIGURED= "configured"; //$NON-NLS-1$
@@ -53,28 +51,29 @@
 	private OthersWorkingSetUpdater fOthersWorkingSetUpdater;
 
 	private ElementMapper fElementMapper= new ElementMapper();
-	
+
 	private boolean fConfigured;
 
 	private static class WorkingSetComparar implements IElementComparer {
 		public boolean equals(Object o1, Object o2) {
-			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet)o1 : null;
-			IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet)o2 : null;
+			IWorkingSet w1= o1 instanceof IWorkingSet ? (IWorkingSet) o1 : null;
+			IWorkingSet w2= o2 instanceof IWorkingSet ? (IWorkingSet) o2 : null;
 			if (w1 == null || w2 == null)
 				return o1.equals(o2);
 			return w1 == w2;
 		}
+
 		public int hashCode(Object element) {
 			if (element instanceof IWorkingSet)
 				return System.identityHashCode(element);
 			return element.hashCode();
 		}
 	}
-	
+
 	private static class ElementMapper {
 		private Map fElementToWorkingSet= new HashMap();
 		private Map fWorkingSetToElement= new IdentityHashMap();
-		
+
 		private Map fResourceToWorkingSet= new HashMap();
 
 		public void clear() {
@@ -82,14 +81,16 @@
 			fWorkingSetToElement.clear();
 			fResourceToWorkingSet.clear();
 		}
+
 		public void rebuild(IWorkingSet[] workingSets) {
 			clear();
 			for (int i= 0; i < workingSets.length; i++) {
 				put(workingSets[i]);
 			}
 		}
+
 		public IAdaptable[] remove(IWorkingSet ws) {
-			IAdaptable[] elements= (IAdaptable[])fWorkingSetToElement.remove(ws);
+			IAdaptable[] elements= (IAdaptable[]) fWorkingSetToElement.remove(ws);
 			if (elements != null) {
 				for (int i= 0; i < elements.length; i++) {
 					removeElement(elements[i], ws);
@@ -97,8 +98,9 @@
 			}
 			return elements;
 		}
+
 		public IAdaptable[] refresh(IWorkingSet ws) {
-			IAdaptable[] oldElements= (IAdaptable[])fWorkingSetToElement.get(ws);
+			IAdaptable[] oldElements= (IAdaptable[]) fWorkingSetToElement.get(ws);
 			if (oldElements == null)
 				return null;
 			IAdaptable[] newElements= ws.getElements();
@@ -106,15 +108,16 @@
 			List toAdd= new ArrayList(Arrays.asList(newElements));
 			computeDelta(toRemove, toAdd, oldElements, newElements);
 			for (Iterator iter= toAdd.iterator(); iter.hasNext();) {
-				addElement((IAdaptable)iter.next(), ws);
+				addElement((IAdaptable) iter.next(), ws);
 			}
 			for (Iterator iter= toRemove.iterator(); iter.hasNext();) {
-				removeElement((IAdaptable)iter.next(), ws);
+				removeElement((IAdaptable) iter.next(), ws);
 			}
 			if (toRemove.size() > 0 || toAdd.size() > 0)
 				fWorkingSetToElement.put(ws, newElements);
 			return oldElements;
 		}
+
 		private void computeDelta(List toRemove, List toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) {
 			for (int i= 0; i < oldElements.length; i++) {
 				toAdd.remove(oldElements[i]);
@@ -122,20 +125,25 @@
 			for (int i= 0; i < newElements.length; i++) {
 				toRemove.remove(newElements[i]);
 			}
-			
+
 		}
+
 		public IWorkingSet getFirstWorkingSet(Object element) {
-			return (IWorkingSet)getFirstElement(fElementToWorkingSet, element);
+			return (IWorkingSet) getFirstElement(fElementToWorkingSet, element);
 		}
+
 		public List getAllWorkingSets(Object element) {
 			return getAllElements(fElementToWorkingSet, element);
 		}
+
 		public IWorkingSet getFirstWorkingSetForResource(IResource resource) {
-			return (IWorkingSet)getFirstElement(fResourceToWorkingSet, resource);
+			return (IWorkingSet) getFirstElement(fResourceToWorkingSet, resource);
 		}
+
 		public List getAllWorkingSetsForResource(IResource resource) {
 			return getAllElements(fResourceToWorkingSet, resource);
 		}
+
 		private void put(IWorkingSet ws) {
 			if (fWorkingSetToElement.containsKey(ws))
 				return;
@@ -145,20 +153,23 @@
 				addElement(elements[i], ws);
 			}
 		}
+
 		private void addElement(IAdaptable element, IWorkingSet ws) {
 			addToMap(fElementToWorkingSet, element, ws);
-			IResource resource= (IResource)element.getAdapter(IResource.class);
+			IResource resource= (IResource) element.getAdapter(IResource.class);
 			if (resource != null) {
 				addToMap(fResourceToWorkingSet, resource, ws);
 			}
 		}
+
 		private void removeElement(IAdaptable element, IWorkingSet ws) {
 			removeFromMap(fElementToWorkingSet, element, ws);
-			IResource resource= (IResource)element.getAdapter(IResource.class);
+			IResource resource= (IResource) element.getAdapter(IResource.class);
 			if (resource != null) {
 				removeFromMap(fResourceToWorkingSet, resource, ws);
 			}
 		}
+
 		private void addToMap(Map map, IAdaptable key, IWorkingSet value) {
 			Object obj= map.get(key);
 			if (obj == null) {
@@ -169,21 +180,22 @@
 				l.add(value);
 				map.put(key, l);
 			} else if (obj instanceof List) {
-				((List)obj).add(value);
+				((List) obj).add(value);
 			}
 		}
+
 		private void removeFromMap(Map map, IAdaptable key, IWorkingSet value) {
 			Object current= map.get(key);
 			if (current == null) {
 				return;
 			} else if (current instanceof List) {
-				List list= (List)current;
+				List list= (List) current;
 				list.remove(value);
 				switch (list.size()) {
-					case 0:
+					case 0 :
 						map.remove(key);
 						break;
-					case 1:
+					case 1 :
 						map.put(key, list.get(0));
 						break;
 				}
@@ -191,16 +203,18 @@
 				map.remove(key);
 			}
 		}
+
 		private Object getFirstElement(Map map, Object key) {
 			Object obj= map.get(key);
-			if (obj instanceof List) 
-				return ((List)obj).get(0);
+			if (obj instanceof List)
+				return ((List) obj).get(0);
 			return obj;
 		}
+
 		private List getAllElements(Map map, Object key) {
 			Object obj= map.get(key);
 			if (obj instanceof List)
-				return (List)obj;
+				return (List) obj;
 			if (obj == null)
 				return Collections.EMPTY_LIST;
 			List result= new ArrayList(1);
@@ -208,27 +222,27 @@
 			return result;
 		}
 	}
-	
+
 	public WorkingSetModel() {
 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
 		addListenersToWorkingSetManagers();
-    	fActiveWorkingSets= new ArrayList(2);
-    	
-    	IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]); 
-    	others.setId(OthersWorkingSetUpdater.ID);
-    	fLocalWorkingSetManager.addWorkingSet(others);
-    	fActiveWorkingSets.add(others);
-    	
-    	fOthersWorkingSetUpdater.init(this);
-    	fElementMapper.rebuild(getActiveWorkingSets());
+		fActiveWorkingSets= new ArrayList(2);
+
+		IWorkingSet others= fLocalWorkingSetManager.createWorkingSet(WorkingSetMessages.WorkingSetModel_others_name, new IAdaptable[0]);
+		others.setId(OthersWorkingSetUpdater.ID);
+		fLocalWorkingSetManager.addWorkingSet(others);
+		fActiveWorkingSets.add(others);
+
+		fOthersWorkingSetUpdater.init(this);
+		fElementMapper.rebuild(getActiveWorkingSets());
 	}
-	
+
 	public WorkingSetModel(IMemento memento) {
 		restoreState(memento);
 		fOthersWorkingSetUpdater.init(this);
-    	fElementMapper.rebuild(getActiveWorkingSets());
+		fElementMapper.rebuild(getActiveWorkingSets());
 	}
-	
+
 	private void addListenersToWorkingSetManagers() {
 		fListeners= new ListenerList(ListenerList.IDENTITY);
 		fWorkingSetManagerListener= new IPropertyChangeListener() {
@@ -239,7 +253,7 @@
 		PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(fWorkingSetManagerListener);
 		fLocalWorkingSetManager.addPropertyChangeListener(fWorkingSetManagerListener);
 	}
-	
+
 	public void dispose() {
 		if (fWorkingSetManagerListener != null) {
 			PlatformUI.getWorkbench().getWorkingSetManager().removePropertyChangeListener(fWorkingSetManagerListener);
@@ -248,118 +262,119 @@
 			fWorkingSetManagerListener= null;
 		}
 	}
-	
-	//---- model relationships ---------------------------------------
-	
+
+	// ---- model relationships ---------------------------------------
+
     public IAdaptable[] getChildren(IWorkingSet workingSet) {
-    	return workingSet.getElements();
-    }
-    
-    public Object getParent(Object element) {
-    	if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
-    		return this;
-    	return fElementMapper.getFirstWorkingSet(element);
-    }
-    
-    public Object[] getAllParents(Object element) {
-    	if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
-    		return new Object[] {this};
-    	return fElementMapper.getAllWorkingSets(element).toArray();
-    }
-    
-    public Object[] addWorkingSets(Object[] elements) {
-    	List result= null;
-    	for (int i= 0; i < elements.length; i++) {
-    		Object element= elements[i];
-    		List sets= null;
+		return workingSet.getElements();
+	}
+
+	public Object getParent(Object element) {
+		if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
+			return this;
+		return fElementMapper.getFirstWorkingSet(element);
+	}
+
+	public Object[] getAllParents(Object element) {
+		if (element instanceof IWorkingSet && fActiveWorkingSets.contains(element))
+			return new Object[]{this};
+		return fElementMapper.getAllWorkingSets(element).toArray();
+	}
+
+	public Object[] addWorkingSets(Object[] elements) {
+		List result= null;
+		for (int i= 0; i < elements.length; i++) {
+			Object element= elements[i];
+			List sets= null;
 			if (element instanceof IResource) {
-    			sets= fElementMapper.getAllWorkingSetsForResource((IResource)element);
-    		} else {
-    			sets= fElementMapper.getAllWorkingSets(element);
-    		}
+				sets= fElementMapper.getAllWorkingSetsForResource((IResource) element);
+			} else {
+				sets= fElementMapper.getAllWorkingSets(element);
+			}
 			if (sets != null && sets.size() > 0) {
 				if (result == null)
 					result= new ArrayList(Arrays.asList(elements));
 				result.addAll(sets);
 			}
 		}
-    	if (result == null)
-    		return elements;
-    	return result.toArray();
-    }
-    
-    public boolean needsConfiguration() {
-    	return !fConfigured && fActiveWorkingSets.size() == 1 &&
-			OthersWorkingSetUpdater.ID.equals(((IWorkingSet)fActiveWorkingSets.get(0)).getId());
-    }
-    
-    public void configured() {
-    	fConfigured= true;
-    }
-    
-    //---- working set management -----------------------------------
-    
+		if (result == null)
+			return elements;
+		return result.toArray();
+	}
+
+	public boolean needsConfiguration() {
+		return !fConfigured && fActiveWorkingSets.size() == 1 && OthersWorkingSetUpdater.ID.equals(((IWorkingSet) fActiveWorkingSets.get(0)).getId());
+	}
+
+	public void configured() {
+		fConfigured= true;
+	}
+
+	// ---- working set management -----------------------------------
+
 	/**
-     * Adds a property change listener.
-     * 
-     * @param listener the property change listener to add
-     */
-    public void addPropertyChangeListener(IPropertyChangeListener listener) {
-    	fListeners.add(listener);
-    }
-    
-    /**
-     * Removes the property change listener.
-     * 
-     * @param listener the property change listener to remove
-     */
-    public void removePropertyChangeListener(IPropertyChangeListener listener) {
-    	fListeners.remove(listener);
-    }
-    
-    public IWorkingSet[] getActiveWorkingSets() {
-    	return (IWorkingSet[])fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
-    }
-    
-    public IWorkingSet[] getAllWorkingSets() {
-    	List result= new ArrayList();
-    	result.addAll(fActiveWorkingSets);
-    	IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
-    	for (int i= 0; i < locals.length; i++) {
+	 * Adds a property change listener.
+	 * 
+	 * @param listener
+	 *            the property change listener to add
+	 */
+	public void addPropertyChangeListener(IPropertyChangeListener listener) {
+		fListeners.add(listener);
+	}
+
+	/**
+	 * Removes the property change listener.
+	 * 
+	 * @param listener
+	 *            the property change listener to remove
+	 */
+	public void removePropertyChangeListener(IPropertyChangeListener listener) {
+		fListeners.remove(listener);
+	}
+
+	public IWorkingSet[] getActiveWorkingSets() {
+		return (IWorkingSet[]) fActiveWorkingSets.toArray(new IWorkingSet[fActiveWorkingSets.size()]);
+	}
+
+	public IWorkingSet[] getAllWorkingSets() {
+		List result= new ArrayList();
+		result.addAll(fActiveWorkingSets);
+		IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
+		for (int i= 0; i < locals.length; i++) {
 			if (!result.contains(locals[i]))
 				result.add(locals[i]);
 		}
-    	IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
-    	for (int i= 0; i < globals.length; i++) {
+		IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
+		for (int i= 0; i < globals.length; i++) {
 			if (!result.contains(globals[i]))
 				result.add(globals[i]);
 		}
-    	return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]);
-    }
-    
-    public void setActiveWorkingSets(IWorkingSet[] workingSets) {
-    	fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
-    	fElementMapper.rebuild(getActiveWorkingSets());
-    	fOthersWorkingSetUpdater.updateElements();
-    	fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
-    }
-	
+		return (IWorkingSet[]) result.toArray(new IWorkingSet[result.size()]);
+	}
+
+	public void setActiveWorkingSets(IWorkingSet[] workingSets) {
+		fActiveWorkingSets= new ArrayList(Arrays.asList(workingSets));
+		fElementMapper.rebuild(getActiveWorkingSets());
+		fOthersWorkingSetUpdater.updateElements();
+		fireEvent(new PropertyChangeEvent(this, CHANGE_WORKING_SET_MODEL_CONTENT, null, null));
+	}
+
 	public void saveState(IMemento memento) {
 		memento.putString(TAG_CONFIGURED, Boolean.toString(fConfigured));
 		fLocalWorkingSetManager.saveState(memento.createChild(TAG_LOCAL_WORKING_SET_MANAGER));
 		for (Iterator iter= fActiveWorkingSets.iterator(); iter.hasNext();) {
 			IMemento active= memento.createChild(TAG_ACTIVE_WORKING_SET);
-			IWorkingSet workingSet= (IWorkingSet)iter.next();
+			IWorkingSet workingSet= (IWorkingSet) iter.next();
 			active.putString(TAG_WORKING_SET_NAME, workingSet.getName());
 		}
 	}
-	
+
 	private void restoreState(IMemento memento) {
 		String configured= memento.getString(TAG_CONFIGURED);
 		if (configured != null)
 			fConfigured= Boolean.valueOf(configured).booleanValue();
 		fLocalWorkingSetManager= PlatformUI.getWorkbench().createLocalWorkingSetManager();
-		addListenersToWorkingSetManagers();
+		addListenersToWorkingSetManagers(); 
 		fLocalWorkingSetManager.restoreState(memento.getChild(TAG_LOCAL_WORKING_SET_MANAGER));
 		IWorkingSet history= getHistoryWorkingSet();
 		if (history != null) {
@@ -380,54 +395,54 @@
 			}
 		}
 	}
-    private void workingSetManagerChanged(PropertyChangeEvent event) {
+
+	private void workingSetManagerChanged(PropertyChangeEvent event) {
 		String property= event.getProperty();
-    	if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) {
-			IWorkingSetUpdater updater= (IWorkingSetUpdater)event.getNewValue();
+		if (IWorkingSetManager.CHANGE_WORKING_SET_UPDATER_INSTALLED.equals(property) && event.getSource() == fLocalWorkingSetManager) {
+			IWorkingSetUpdater updater= (IWorkingSetUpdater) event.getNewValue();
 			if (updater instanceof OthersWorkingSetUpdater) {
-				fOthersWorkingSetUpdater= (OthersWorkingSetUpdater)updater;
+				fOthersWorkingSetUpdater= (OthersWorkingSetUpdater) updater;
 			}
 			return;
 		}
-    	// don't handle working sets not managed by the model
-    	if (!isAffected(event))
-    		return;
-    	
+		// don't handle working sets not managed by the model
+		if (!isAffected(event))
+			return;
+
 		if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)) {
-			IWorkingSet workingSet= (IWorkingSet)event.getNewValue();
+			IWorkingSet workingSet= (IWorkingSet) event.getNewValue();
 			IAdaptable[] elements= fElementMapper.refresh(workingSet);
 			if (elements != null) {
 				fireEvent(event);
 			}
 		} else if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)) {
-			IWorkingSet workingSet= (IWorkingSet)event.getOldValue();
+			IWorkingSet workingSet= (IWorkingSet) event.getOldValue();
 			List elements= new ArrayList(fActiveWorkingSets);
 			elements.remove(workingSet);
-			setActiveWorkingSets((IWorkingSet[])elements.toArray(new IWorkingSet[elements.size()]));
-    	} else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) {
+			setActiveWorkingSets((IWorkingSet[]) elements.toArray(new IWorkingSet[elements.size()]));
+		} else if (IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE.equals(property)) {
 			fireEvent(event);
 		}
 	}
-    
-    private void fireEvent(PropertyChangeEvent event) {
-    	Object[] listeners= fListeners.getListeners();
-    	for (int i= 0; i < listeners.length; i++) {
-			((IPropertyChangeListener)listeners[i]).propertyChange(event);
-		}
-    }
-    
-    private boolean isAffected(PropertyChangeEvent event) {
-    	if (fActiveWorkingSets == null)
-    		return false;
-    	Object oldValue= event.getOldValue();
-    	Object newValue= event.getNewValue();
-    	if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) 
-    		|| (newValue != null && fActiveWorkingSets.contains(newValue))) {
-    		return true;
-    	}
-    	return false;
-    }
-	
+
+	private void fireEvent(PropertyChangeEvent event) {
+		Object[] listeners= fListeners.getListeners();
+		for (int i= 0; i < listeners.length; i++) {
+			((IPropertyChangeListener) listeners[i]).propertyChange(event);
+		}
+	}
+
+	private boolean isAffected(PropertyChangeEvent event) {
+		if (fActiveWorkingSets == null)
+			return false;
+		Object oldValue= event.getOldValue();
+		Object newValue= event.getNewValue();
+		if ((oldValue != null && fActiveWorkingSets.contains(oldValue)) || (newValue != null && fActiveWorkingSets.contains(newValue))) {
+			return true;
+		}
+		return false;
+	}
+
 	private IWorkingSet getHistoryWorkingSet() {
 		IWorkingSet[] workingSets= fLocalWorkingSetManager.getWorkingSets();
 		for (int i= 0; i < workingSets.length; i++) {
Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java,v
retrieving revision 1.50
diff -u -r1.50 PackageExplorerContentProvider.java
--- ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java	11 Jan 2006 15:49:15 -0000	1.50
+++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerContentProvider.java	8 Feb 2006 00:46:03 -0000
@@ -76,14 +76,22 @@
 	private PackageFragmentProvider fPackageFragmentProvider= new PackageFragmentProvider();
 	
 	private int fPendingChanges;
-	PackageExplorerPart fPart;
+	//PackageExplorerPart fPart;
+	
+	/**
+	 * Creates a new content provider for Java elements.
+	 */
+	public PackageExplorerContentProvider(boolean provideMembers) {
+		super(provideMembers);	
+		//fPart= part;
+	}
 	
 	/**
 	 * Creates a new content provider for Java elements.
 	 */
 	public PackageExplorerContentProvider(PackageExplorerPart part, boolean provideMembers) {
 		super(provideMembers);	
-		fPart= part;
+		//fPart= part;
 	}
 	
 	/* package */ PackageFragmentProvider getPackageFragmentProvider() {
@@ -620,7 +628,7 @@
 		});
 	}
 
-	private void postAdd(final Object parent, final Object element) {
+	/* package */ void postAdd(final Object parent, final Object element) {
 		postRunnable(new Runnable() {
 			public void run() {
 				Control ctrl= fViewer.getControl();
@@ -647,7 +655,14 @@
 	private void postProjectStateChanged(final Object root) {
 		postRunnable(new Runnable() {
 			public void run() {
-				fPart.projectStateChanged(root);
+				//fPart.projectStateChanged(root); 
+				Control ctrl= fViewer.getControl();
+				if (ctrl != null && !ctrl.isDisposed()) {
+					fViewer.refresh(root, true);
+					// trigger a syntetic selection change so that action refresh their
+					// enable state.
+					fViewer.setSelection(fViewer.getSelection());
+				}
 			}
 		});
 	}
Index: plugin.xml
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/plugin.xml,v
retrieving revision 1.617
diff -u -r1.617 plugin.xml
--- plugin.xml	5 Feb 2006 18:11:23 -0000	1.617
+++ plugin.xml	8 Feb 2006 00:46:02 -0000
@@ -5047,4 +5047,97 @@
       </objectContribution>
    </extension>
 
+
+    <!-- ADDITIONS BELOW THIS LINE -->
+      
+    <extension
+          point="org.eclipse.ui.navigator.viewer">
+       <viewerContentBinding 
+             viewerId="org.eclipse.ui.navigator.resourceContent">
+          <includes>
+       	      <contentExtension pattern="org.eclipse.jdt.java.ui.javaContent" />       
+          </includes>       
+       </viewerContentBinding>
+    </extension> 
+      
+    <extension
+          point="org.eclipse.ui.navigator.navigatorContent">
+       <navigatorContent
+             activeByDefault="true"
+             contentProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareContentProvider"
+             icon="$nl$/icons/full/obj16/java_model.gif"
+             id="org.eclipse.jdt.java.ui.javaContent"
+             labelProvider="org.eclipse.jdt.internal.ui.packageview.PreferenceAwareLabelProvider"
+             name="Java Elements"
+             priority="high">
+          <triggerPoints> 
+	         <or>           
+               <adapt 
+	                     type="org.eclipse.core.resources.IProject" > 
+		                  <test
+		                     property="org.eclipse.core.resources.projectNature"
+		                     value="org.eclipse.jdt.core.javanature" />
+               </adapt>             
+	           <instanceof 
+	                 value="org.eclipse.core.resources.IWorkspaceRoot" /> 
+	                 
+	           <instanceof
+	                 value="org.eclipse.core.resources.IFolder" /> 
+	           <instanceof
+	                value="org.eclipse.core.resources.IFile" /> 
+	           <instanceof 
+	                 value="org.eclipse.jdt.core.IJavaProject" /> 
+	           <instanceof 
+	                 value="org.eclipse.jdt.core.IJavaElement" /> 
+	           <instanceof
+	                 value="org.eclipse.jdt.internal.core.JarEntryFile" /> 
+	           <instanceof
+	                 value="org.eclipse.jdt.core.IClassFile" /> 
+	           <instanceof
+	                 value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" /> 
+	            <!--
+				<instanceof 
+ 					value="org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel" /> 
+ 					-->
+	         </or>
+          </triggerPoints>
+          <possibleChildren> 
+	         <or>           
+               <adapt 
+					type="org.eclipse.core.resources.IProject" >  
+               </adapt>             
+	           <instanceof 
+	                 value="org.eclipse.core.resources.IWorkspaceRoot" /> 	                 
+	           <instanceof
+	                 value="org.eclipse.core.resources.IFolder" /> 
+	           <instanceof
+	                value="org.eclipse.core.resources.IFile" /> 
+	           <instanceof 
+	                 value="org.eclipse.jdt.core.IJavaProject" /> 
+	           <instanceof 
+	                 value="org.eclipse.jdt.core.IJavaElement" /> 
+	           <instanceof
+	                 value="org.eclipse.jdt.internal.core.JarEntryFile" /> 
+	           <instanceof
+	                 value="org.eclipse.jdt.core.IClassFile" /> 
+	           <instanceof
+	                 value="org.eclipse.jdt.internal.ui.packageview.ClassPathContainer" />  
+	         </or>
+          </possibleChildren>          
+          <actionProvider 
+	               class="org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionProvider">
+	               <enablement>	               
+	               <adapt 
+	                     type="org.eclipse.jdt.core.IJavaElement" /> 
+	               </enablement>
+          </actionProvider>
+          <override
+                policy="InvokeAlwaysRegardlessOfSuppressedExt"
+                suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/>
+          <commonSorter
+                class="org.eclipse.jdt.ui.JavaElementSorter"
+                id="org.eclipse.jdt.ui.javaElementSorter"/> 
+       </navigatorContent>
+    </extension>
+     
 </plugin>
\ No newline at end of file
Index: ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java
===================================================================
RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java,v
retrieving revision 1.7
diff -u -r1.7 MultiActionGroup.java
--- ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java	17 Jun 2005 15:51:51 -0000	1.7
+++ ui/org/eclipse/jdt/internal/ui/actions/MultiActionGroup.java	8 Feb 2006 00:46:02 -0000
@@ -37,6 +37,8 @@
  */
 public class MultiActionGroup extends ActionGroup {
 	
+	public IAction[] NO_ACTIONS = new IAction[0];
+	
 	private IAction[] fActions; 
 	
 	private int fCurrentSelection;
@@ -57,6 +59,32 @@
 		fCurrentSelection= currentSelection;
 		fActions= actions;
 	}
+	
+	/**
+	 * Creates a new action group with a given set of actions.
+	 * 
+	 * @param actions			the actions for this multi group
+	 * @param currentSelection	decides which action is selected in the menu on start up.
+	 * 							Denotes the location in the actions array of the current
+	 * 							selected state. It cannot be null.
+	 */
+	public MultiActionGroup(int currentSelection) {
+		super();
+		
+		fCurrentSelection= currentSelection;
+		fActions= NO_ACTIONS;
+	}
+	
+	/**
+	 * 
+	 * @param actions			the actions for this multi group 
+	 */
+	protected final void setActions(IAction[] actions) {
+		if(actions != null)
+			fActions = actions;
+		else
+			fActions = NO_ACTIONS;
+	}
 
 	/**
 	 * Add the actions to the given menu manager.
Index: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
diff -N ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/packageview/CommonLayoutActionGroup.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.packageview;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.StructuredViewer;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.actions.MultiActionGroup;
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
+
+/**
+ * Adds view menus to switch between flat and hierarchical layout.
+ * 
+ * @since 2.1
+ */
+public class CommonLayoutActionGroup extends MultiActionGroup {
+
+	private boolean fHasContributedToViewMenu = false;
+	private IAction fHierarchicalLayout = null;
+	private IAction fFlatLayoutAction = null; 
+
+	public CommonLayoutActionGroup(StructuredViewer structuredViewer, IExtensionStateModel stateModel) {
+		super(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) ? 0 : 1);
+		IAction[] actions = createActions(structuredViewer, stateModel);
+		setActions(actions); 
+	}
+
+	/* (non-Javadoc)
+	 * @see ActionGroup#fillActionBars(IActionBars)
+	 */
+	public void fillActionBars(IActionBars actionBars) {
+		super.fillActionBars(actionBars);
+		if(!fHasContributedToViewMenu) {
+			synchronized(this) {
+				if(!fHasContributedToViewMenu) {
+					fHasContributedToViewMenu = true;
+					contributeToViewMenu(actionBars.getMenuManager());
+				}
+			}
+		}
+	}
+	
+	private void contributeToViewMenu(IMenuManager viewMenu) {
+		viewMenu.add(new Separator());
+
+		// Create layout sub menu
+		
+		IMenuManager layoutSubMenu= new MenuManager(PackagesMessages.LayoutActionGroup_label); 
+		final String layoutGroupName= "layout"; //$NON-NLS-1$
+		Separator marker= new Separator(layoutGroupName);
+
+		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+		viewMenu.add(marker);
+		viewMenu.appendToGroup(layoutGroupName, layoutSubMenu);
+		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));//$NON-NLS-1$		
+		addActions(layoutSubMenu);
+	}
+	
+	
+	private IAction[] createActions(StructuredViewer structuredViewer, IExtensionStateModel stateModel) {
+		
+		fFlatLayoutAction= new CommonLayoutAction(structuredViewer, stateModel, true);
+		fFlatLayoutAction.setText(PackagesMessages.LayoutActionGroup_flatLayoutAction_label); 
+		JavaPluginImages.setLocalImageDescriptors(fFlatLayoutAction, "flatLayout.gif"); //$NON-NLS-1$
+		
+		fHierarchicalLayout= new CommonLayoutAction(structuredViewer, stateModel, false);
+		fHierarchicalLayout.setText(PackagesMessages.LayoutActionGroup_hierarchicalLayoutAction_label);	  
+		JavaPluginImages.setLocalImageDescriptors(fHierarchicalLayout, "hierarchicalLayout.gif"); //$NON-NLS-1$
+		
+		fHierarchicalLayout.setChecked(!stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT));
+		fFlatLayoutAction.setChecked(stateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT));
+		
+		return new IAction[]{fFlatLayoutAction, fHierarchicalLayout};
+	}
+	
+	public void setFlatLayout(boolean flatLayout) {
+		fHierarchicalLayout.setChecked(!flatLayout);
+		fFlatLayoutAction.setChecked(flatLayout);
+	}
+	 
+}
+
+class CommonLayoutAction extends Action implements IAction {
+
+	private final boolean fIsFlatLayout;
+	private IExtensionStateModel fStateModel;
+	private StructuredViewer fStructuredViewer;
+
+	public CommonLayoutAction(StructuredViewer structuredViewer, IExtensionStateModel stateModel, boolean flat) {
+		super("", AS_RADIO_BUTTON); //$NON-NLS-1$
+		fStateModel = stateModel;
+		fStructuredViewer = structuredViewer;
+		fIsFlatLayout= flat; 
+		if (fIsFlatLayout)
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_FLAT_ACTION);
+		else
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LAYOUT_HIERARCHICAL_ACTION);
+	}
+
+	/*
+	 * @see org.eclipse.jface.action.IAction#run()
+	 */
+	public void run() {
+		if (fStateModel.getBooleanProperty(Values.IS_LAYOUT_FLAT) != fIsFlatLayout) {
+			fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT, fIsFlatLayout);
+  			 	
+			fStructuredViewer.getControl().setRedraw(false);
+			fStructuredViewer.refresh();
+			fStructuredViewer.getControl().setRedraw(true);
+		}
+	}
+}
Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareContentProvider.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,174 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.jdt.internal.ui.packageview;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.IPipelinedTreeContentProvider;
+import org.eclipse.ui.navigator.PipelinedShapeModification;
+import org.eclipse.ui.navigator.PipelinedViewerUpdate;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaModel;
+import org.eclipse.jdt.core.JavaCore;
+
+import org.eclipse.jdt.ui.PreferenceConstants;
+
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
+
+public class PreferenceAwareContentProvider extends
+		PackageExplorerContentProvider implements IPipelinedTreeContentProvider {
+
+	public PreferenceAwareContentProvider() {
+		super(false);
+	}
+
+	public PreferenceAwareContentProvider(boolean provideMembers) {
+		super(provideMembers);
+	}
+
+	public static final String JDT_EXTENSION_ID = "org.eclipse.jdt.ui.javaContent"; //$NON-NLS-1$ 
+
+	private IExtensionStateModel fStateModel;
+
+	public void init(IExtensionStateModel stateModel, IMemento memento) {
+		fStateModel = stateModel;
+		// fManager = new WorkingSetModelManager(fStateModel, this);
+		// expose the manager for the action provider
+		// fStateModel.setProperty(WorkingSetModelManager.INSTANCE_KEY,
+		// fManager);
+		restoreState(memento);
+		fStateModel.addPropertyChangeListener(new IPropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
+					if (event.getNewValue() != null) {
+						boolean newValue = ((Boolean) event.getNewValue())
+								.booleanValue() ? true : false;
+						setIsFlatLayout(newValue);
+					}
+				}
+
+			}
+		});
+
+		IPreferenceStore store = PreferenceConstants.getPreferenceStore();
+		boolean showCUChildren = store
+				.getBoolean(PreferenceConstants.SHOW_CU_CHILDREN);
+		setProvideMembers(showCUChildren);
+	}
+
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		super.inputChanged(viewer, oldInput, findInputElement(newInput));
+	}
+
+	public Object[] getElements(Object inputElement) {
+		if (inputElement instanceof IWorkspaceRoot)
+			return super.getElements(JavaCore
+					.create((IWorkspaceRoot) inputElement));
+		return super.getElements(inputElement);
+	}
+
+	private Object findInputElement(Object newInput) {
+		if (newInput instanceof IWorkspaceRoot) {
+			return JavaCore.create((IWorkspaceRoot) newInput);
+		}
+		return newInput;
+	}
+
+	public void restoreState(IMemento memento) {
+
+	}
+
+	public void saveState(IMemento memento) {
+
+	}
+
+	public void getPipelinedChildren(Object parent, Set currentChildren) {
+		Object[] children = getChildren(parent);
+		for (Iterator iter = currentChildren.iterator(); iter.hasNext();)
+			if (iter.next() instanceof IResource)
+				iter.remove();
+		currentChildren.addAll(Arrays.asList(children));
+	}
+
+	public void getPipelinedElements(Object input, Set currentElements) {
+		Object[] children = getElements(input);
+
+		for (Iterator iter = currentElements.iterator(); iter.hasNext();)
+			if (iter.next() instanceof IResource)
+				iter.remove();
+
+		currentElements.addAll(Arrays.asList(children));
+	}
+
+	public Object getPipelinedParent(Object object, Object suggestedParent) {
+		return getParent(object);
+	}
+
+	public PipelinedShapeModification interceptAdd(
+			PipelinedShapeModification anAddModification) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public PipelinedShapeModification interceptRemove(
+			PipelinedShapeModification aRemoveModification) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public boolean interceptRefresh(
+			PipelinedViewerUpdate aRefreshSynchronization) {
+		IJavaElement javaElement;
+		Set interceptedElements = new HashSet();
+		for (Iterator iter = aRefreshSynchronization.getRefreshTargets()
+				.iterator(); iter.hasNext();) {
+			Object element = iter.next();
+			if (element instanceof IResource) {
+				if ((javaElement = JavaCore.create((IResource) element)) != null && javaElement.exists()) {
+					iter.remove();
+					interceptedElements.add(javaElement);
+				}
+			}
+		}
+		if (interceptedElements.size() > 0) {
+			aRefreshSynchronization.getRefreshTargets().addAll(
+					interceptedElements);
+			return true;
+		}
+		return false;
+
+	}
+
+	public boolean interceptUpdate(PipelinedViewerUpdate anUpdateSynchronization) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/* package */void postAdd(final Object parent, final Object element) {
+		if (parent instanceof IJavaModel)
+			super.postAdd(((IJavaModel) parent).getWorkspace(), element);
+		else
+			super.postAdd(parent, element);
+	}
+
+}
Index: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
diff -N ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionProvider.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,126 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.jdt.internal.ui.packageview;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.StructuredViewer;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.CommonActionProviderConfig;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+import org.eclipse.jdt.ui.actions.CCPActionGroup;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
+import org.eclipse.jdt.internal.ui.workingsets.ViewActionGroup;
+
+public class PackageExplorerActionProvider extends CommonActionProvider { 
+
+	private static final int HIERARCHICAL_LAYOUT = 0x1;
+
+	private static final int FLAT_LAYOUT = 0x2;
+
+	private static final String TAG_LAYOUT = "layout"; //$NON-NLS-1$
+
+	private ViewActionGroup fViewActionGroup;
+
+	private CommonLayoutActionGroup fLayoutActionGroup;
+
+	private boolean fHasFilledViewMenu = false;
+
+	private IExtensionStateModel fStateModel;
+
+	private CCPActionGroup fCCPGroup;
+
+	public void fillActionBars(IActionBars actionBars) {
+		if (!fHasFilledViewMenu) {
+			if(fViewActionGroup != null)
+				fViewActionGroup.fillActionBars(actionBars);
+			fLayoutActionGroup.fillActionBars(actionBars);
+			fHasFilledViewMenu = true;
+		}
+
+	}
+
+	public void fillContextMenu(IMenuManager menu) {
+
+		if(fCCPGroup != null)
+			fCCPGroup.fillContextMenu(menu);
+
+	}
+
+	public void init(CommonActionProviderConfig config) {
+
+		ICommonViewerWorkbenchSite workbenchSite = null;
+		if (config.getViewSite() instanceof ICommonViewerWorkbenchSite)
+			workbenchSite = (ICommonViewerWorkbenchSite) config.getViewSite();
+
+		fStateModel = config.getExtensionStateModel();
+//		WorkingSetModelManager workingSetModelManager = (WorkingSetModelManager) fStateModel
+//				.getProperty(WorkingSetModelManager.INSTANCE_KEY);
+
+		fLayoutActionGroup = new CommonLayoutActionGroup(config
+				.getStructuredViewer(), fStateModel);
+
+		if (workbenchSite != null) {
+//			fViewActionGroup = new ViewActionGroup(
+//					ViewActionGroup.SHOW_PROJECTS, /*workingSetModelManager,*/
+//					workbenchSite.getSite());
+			if (workbenchSite.getPart() != null
+					&& workbenchSite.getPart() instanceof IViewPart) {
+				fCCPGroup = new CCPActionGroup((IViewPart) workbenchSite
+						.getPart());
+			}
+
+		}
+
+	}
+
+	public void init(final String extensionId, final IViewPart viewPart,
+			final INavigatorContentService contentService,
+			final StructuredViewer structuredViewer) {
+
+	}
+
+	public void restoreState(IMemento memento) {
+		super.restoreState(memento);
+		restoreLayoutState(memento);
+	}
+
+	private void restoreLayoutState(IMemento memento) {
+		boolean isCurrentLayoutFlat = true;
+		Integer state = null;
+		if (memento != null)
+			state = memento.getInteger(TAG_LAYOUT);
+
+		// If no memento try an restore from preference store
+		if (state == null) {
+			IPreferenceStore store = JavaPlugin.getDefault()
+					.getPreferenceStore();
+			state = new Integer(store.getInt(TAG_LAYOUT));
+		}
+
+		if (state.intValue() == FLAT_LAYOUT)
+			isCurrentLayoutFlat = true;
+		else if (state.intValue() == HIERARCHICAL_LAYOUT)
+			isCurrentLayoutFlat = false;
+
+		fStateModel.setBooleanProperty(Values.IS_LAYOUT_FLAT,
+				isCurrentLayoutFlat);
+		fLayoutActionGroup.setFlatLayout(isCurrentLayoutFlat);
+	}
+
+}
Index: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
diff -N ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/packageview/PreferenceAwareLabelProvider.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,191 @@
+/***************************************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.jdt.internal.ui.packageview;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+import org.eclipse.ui.navigator.IExtensionStateModel;
+
+import org.eclipse.jdt.core.IJavaElement;
+
+import org.eclipse.jdt.ui.JavaElementLabels;
+
+import org.eclipse.jdt.internal.ui.packageview.IExtensionStateConstants.Values;
+import org.eclipse.jdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
+
+/**
+ * Provides the labels for the Package Explorer.
+ * <p>
+ * It provides labels for the packages in hierarchical layout and in all other
+ * cases delegates it to its super class.
+ * </p>
+ * 
+ * @since 2.1
+ */
+public class PreferenceAwareLabelProvider implements ICommonLabelProvider {
+
+	private final long LABEL_FLAGS = JavaElementLabels.DEFAULT_QUALIFIED
+			| JavaElementLabels.ROOT_POST_QUALIFIED
+			| JavaElementLabels.APPEND_ROOT_PATH
+			| JavaElementLabels.M_PARAMETER_TYPES
+			| JavaElementLabels.M_PARAMETER_NAMES
+			| JavaElementLabels.M_APP_RETURNTYPE
+			| JavaElementLabels.M_EXCEPTIONS
+			| JavaElementLabels.F_APP_TYPE_SIGNATURE
+			| JavaElementLabels.T_TYPE_PARAMETERS;
+
+	private PackageExplorerLabelProvider delegeteLabelProvider;
+
+	private PackageExplorerContentProvider fContentProvider;
+
+	private IExtensionStateModel fStateModel;
+
+	public PreferenceAwareLabelProvider() {
+
+	}
+
+	public void init(IExtensionStateModel aStateModel,
+			ITreeContentProvider contentProvider) {
+		fStateModel = aStateModel;
+
+		fContentProvider = (PackageExplorerContentProvider) contentProvider;
+		delegeteLabelProvider = createLabelProvider();
+
+		delegeteLabelProvider.setIsFlatLayout(fStateModel
+				.getBooleanProperty(Values.IS_LAYOUT_FLAT));
+		fStateModel.addPropertyChangeListener(new IPropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (Values.IS_LAYOUT_FLAT.equals(event.getProperty())) {
+					if (event.getNewValue() != null) {
+						boolean newValue = ((Boolean) event.getNewValue())
+								.booleanValue() ? true : false;
+						delegeteLabelProvider.setIsFlatLayout(newValue);
+					}
+				}
+
+			}
+		});
+	}
+
+	public String getDescription(Object anElement) {
+		return formatMessage(anElement);
+	}
+
+	private PackageExplorerLabelProvider createLabelProvider() {
+
+		return new PackageExplorerLabelProvider(
+				AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS
+						| JavaElementLabels.P_COMPRESSED,
+				AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS
+						| JavaElementImageProvider.SMALL_ICONS,
+				fContentProvider);
+
+	}
+
+	public void dispose() {
+		delegeteLabelProvider.dispose();
+	}
+
+	public void propertyChange(PropertyChangeEvent event) {
+		delegeteLabelProvider.propertyChange(event);
+	}
+
+	public void addLabelDecorator(ILabelDecorator decorator) {
+		delegeteLabelProvider.addLabelDecorator(decorator);
+	}
+
+	public void addListener(ILabelProviderListener listener) {
+		delegeteLabelProvider.addListener(listener);
+	}
+
+	public Color getBackground(Object element) {
+		return delegeteLabelProvider.getBackground(element);
+	}
+
+	public Color getForeground(Object element) {
+		return delegeteLabelProvider.getForeground(element);
+	}
+
+	public Image getImage(Object element) {
+		return delegeteLabelProvider.getImage(element);
+	}
+
+	public boolean isLabelProperty(Object element, String property) {
+		return delegeteLabelProvider.isLabelProperty(element, property);
+	}
+
+	public void removeListener(ILabelProviderListener listener) {
+		delegeteLabelProvider.removeListener(listener);
+	}
+
+	public boolean equals(Object obj) {
+		return delegeteLabelProvider.equals(obj);
+	}
+
+	public int hashCode() {
+		return delegeteLabelProvider.hashCode();
+	}
+
+	public String toString() {
+		return delegeteLabelProvider.toString();
+	}
+
+	public String getText(Object element) {
+		return delegeteLabelProvider.getText(element);
+	}
+
+	public void setIsFlatLayout(boolean state) {
+		delegeteLabelProvider.setIsFlatLayout(state);
+	}
+
+	// Taken from StatusBarUpdater
+
+	protected String formatMessage(Object element) {
+		if (element instanceof IJavaElement) {
+			return formatJavaElementMessage((IJavaElement) element);
+		} else if (element instanceof IResource) {
+			return formatResourceMessage((IResource) element);
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+	private String formatJavaElementMessage(IJavaElement element) {
+		return JavaElementLabels.getElementLabel(element, LABEL_FLAGS);
+	}
+
+	private String formatResourceMessage(IResource element) {
+		IContainer parent = element.getParent();
+		if (parent != null && parent.getType() != IResource.ROOT)
+			return element.getName() + JavaElementLabels.CONCAT_STRING
+					+ parent.getFullPath().makeRelative().toString();
+		else
+			return element.getName();
+	}
+
+	public void restoreState(IMemento aMemento) {
+
+	}
+
+	public void saveState(IMemento aMemento) {
+
+	}
+}
Index: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
diff -N ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/packageview/IExtensionStateConstants.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,23 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2004 IBM Corporation and others. All rights reserved. This program and the
+ * accompanying materials are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.jdt.internal.ui.packageview;
+
+
+public interface IExtensionStateConstants {
+ 
+	String ROOT_MODE= "rootMode"; //$NON-NLS-1$ 
+
+	interface Values {
+
+		String IS_LAYOUT_FLAT= "isLayoutFlat"; //$NON-NLS-1$
+ 
+
+	}
+
+}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.