KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ui > internal > navigator > workingsets > WorkingSetsContentProvider


1 /*******************************************************************************
2  * Copyright (c) 2005, 2007 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ui.internal.navigator.workingsets;
12
13 import java.util.Map JavaDoc;
14 import java.util.WeakHashMap JavaDoc;
15
16 import org.eclipse.core.runtime.IAdaptable;
17 import org.eclipse.jface.util.IPropertyChangeListener;
18 import org.eclipse.jface.util.PropertyChangeEvent;
19 import org.eclipse.jface.viewers.Viewer;
20 import org.eclipse.ui.IMemento;
21 import org.eclipse.ui.IWorkingSet;
22 import org.eclipse.ui.internal.AggregateWorkingSet;
23 import org.eclipse.ui.navigator.ICommonContentExtensionSite;
24 import org.eclipse.ui.navigator.ICommonContentProvider;
25 import org.eclipse.ui.navigator.IExtensionStateModel;
26
27 /**
28  * Provides children and parents for IWorkingSets.
29  *
30  * @since 3.2.1
31  *
32  */

33 public class WorkingSetsContentProvider implements ICommonContentProvider {
34
35     /**
36      * The extension id for the WorkingSet extension.
37      */

38     public static final String JavaDoc EXTENSION_ID = "org.eclipse.ui.navigator.resources.workingSets"; //$NON-NLS-1$
39

40     /**
41      * A key used by the Extension State Model to keep track of whether top level Working Sets or
42      * Projects should be shown in the viewer.
43      */

44     public static final String JavaDoc SHOW_TOP_LEVEL_WORKING_SETS = EXTENSION_ID + ".showTopLevelWorkingSets"; //$NON-NLS-1$
45

46
47     private static final Object JavaDoc[] NO_CHILDREN = new Object JavaDoc[0];
48     /* package */ static final int WORKING_SETS = 0;
49     /* package */ static final int PROJECTS = 1;
50
51     private WorkingSetHelper helper;
52     private int rootMode = WORKING_SETS;
53     private IExtensionStateModel extensionStateModel;
54
55     private IPropertyChangeListener rootModeListener = new IPropertyChangeListener() {
56         
57         /* (non-Javadoc)
58          * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
59          */

60         public void propertyChange(PropertyChangeEvent event) {
61             if(SHOW_TOP_LEVEL_WORKING_SETS.equals(event.getProperty())) {
62                 updateRootMode();
63             }
64             
65         }
66
67     };
68     
69
70     /* (non-Javadoc)
71      * @see org.eclipse.ui.navigator.ICommonContentProvider#init(org.eclipse.ui.navigator.ICommonContentExtensionSite)
72      */

73     public void init(ICommonContentExtensionSite aConfig) {
74         extensionStateModel = aConfig.getExtensionStateModel();
75         extensionStateModel.addPropertyChangeListener(rootModeListener);
76         updateRootMode();
77         
78     }
79
80     /* (non-Javadoc)
81      * @see org.eclipse.ui.navigator.IMementoAware#restoreState(org.eclipse.ui.IMemento)
82      */

83     public void restoreState(IMemento aMemento) {
84         
85     }
86
87     /* (non-Javadoc)
88      * @see org.eclipse.ui.navigator.IMementoAware#saveState(org.eclipse.ui.IMemento)
89      */

90     public void saveState(IMemento aMemento) {
91         
92     }
93
94     public Object JavaDoc[] getChildren(Object JavaDoc parentElement) {
95         if (parentElement instanceof IWorkingSet) {
96             IWorkingSet workingSet = (IWorkingSet) parentElement;
97             if (workingSet.isAggregateWorkingSet()) {
98                 switch (rootMode) {
99                     case WORKING_SETS :
100                         return ((AggregateWorkingSet) workingSet).getComponents();
101                     case PROJECTS :
102                         return workingSet.getElements();
103                 }
104             }
105             return workingSet.getElements();
106         }
107         return NO_CHILDREN;
108     }
109
110     public Object JavaDoc getParent(Object JavaDoc element) {
111         if (helper != null)
112             return helper.getParent(element);
113         return null;
114     }
115
116     public boolean hasChildren(Object JavaDoc element) {
117         return true;
118     }
119
120     public Object JavaDoc[] getElements(Object JavaDoc inputElement) {
121         return getChildren(inputElement);
122     }
123
124     public void dispose() {
125         helper = null;
126
127         extensionStateModel.removePropertyChangeListener(rootModeListener);
128     }
129
130     public void inputChanged(Viewer viewer, Object JavaDoc oldInput, Object JavaDoc newInput) {
131         if (newInput instanceof IWorkingSet) {
132             IWorkingSet rootSet = (IWorkingSet) newInput;
133             helper = new WorkingSetHelper(rootSet);
134         }
135
136     }
137  
138     private void updateRootMode() {
139         if( extensionStateModel.getBooleanProperty(SHOW_TOP_LEVEL_WORKING_SETS) )
140             rootMode = WORKING_SETS;
141         else
142             rootMode = PROJECTS;
143     }
144
145     protected class WorkingSetHelper {
146
147         private final IWorkingSet workingSet;
148         private final Map JavaDoc parents = new WeakHashMap JavaDoc();
149
150         /**
151          * Create a Helper class for the given working set
152          *
153          * @param set
154          * The set to use to build the item to parent map.
155          */

156         public WorkingSetHelper(IWorkingSet set) {
157             workingSet = set;
158
159             if (workingSet.isAggregateWorkingSet()) {
160                 AggregateWorkingSet aggregateSet = (AggregateWorkingSet) workingSet;
161
162                 IWorkingSet[] components = aggregateSet.getComponents();
163
164                 for (int componentIndex = 0; componentIndex < components.length; componentIndex++) {
165                     IAdaptable[] elements = components[componentIndex].getElements();
166                     for (int elementsIndex = 0; elementsIndex < elements.length; elementsIndex++) {
167                         parents.put(elements[elementsIndex], components[componentIndex]);
168                     }
169                     parents.put(components[componentIndex], aggregateSet);
170
171                 }
172             } else {
173                 IAdaptable[] elements = workingSet.getElements();
174                 for (int elementsIndex = 0; elementsIndex < elements.length; elementsIndex++) {
175                     parents.put(elements[elementsIndex], workingSet);
176                 }
177             }
178         }
179
180         /**
181          *
182          * @param element
183          * An element from the viewer
184          * @return The parent associated with the element, if any.
185          */

186         public Object JavaDoc getParent(Object JavaDoc element) {
187             return parents.get(element);
188         }
189     }
190     
191
192
193 }
194
Popular Tags