1 11 package org.eclipse.ui.internal.navigator.workingsets; 12 13 import java.util.Map ; 14 import java.util.WeakHashMap ; 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 33 public class WorkingSetsContentProvider implements ICommonContentProvider { 34 35 38 public static final String EXTENSION_ID = "org.eclipse.ui.navigator.resources.workingSets"; 40 44 public static final String SHOW_TOP_LEVEL_WORKING_SETS = EXTENSION_ID + ".showTopLevelWorkingSets"; 46 47 private static final Object [] NO_CHILDREN = new Object [0]; 48 static final int WORKING_SETS = 0; 49 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 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 73 public void init(ICommonContentExtensionSite aConfig) { 74 extensionStateModel = aConfig.getExtensionStateModel(); 75 extensionStateModel.addPropertyChangeListener(rootModeListener); 76 updateRootMode(); 77 78 } 79 80 83 public void restoreState(IMemento aMemento) { 84 85 } 86 87 90 public void saveState(IMemento aMemento) { 91 92 } 93 94 public Object [] getChildren(Object 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 getParent(Object element) { 111 if (helper != null) 112 return helper.getParent(element); 113 return null; 114 } 115 116 public boolean hasChildren(Object element) { 117 return true; 118 } 119 120 public Object [] getElements(Object 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 oldInput, Object 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 parents = new WeakHashMap (); 149 150 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 186 public Object getParent(Object element) { 187 return parents.get(element); 188 } 189 } 190 191 192 193 } 194 | Popular Tags |