Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 161238 Details for
Bug 228022
[CommonNavigator] Allow content providers to explicitly specify their ordering
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Submitted patch
clipboard.txt (text/plain), 37.42 KB, created by
Francis Upton IV
on 2010-03-07 05:10:51 EST
(
hide
)
Description:
Submitted patch
Filename:
MIME Type:
Creator:
Francis Upton IV
Created:
2010-03-07 05:10:51 EST
Size:
37.42 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.navigator >Index: schema/navigatorContent.exsd >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/schema/navigatorContent.exsd,v >retrieving revision 1.46 >diff -u -r1.46 navigatorContent.exsd >--- schema/navigatorContent.exsd 12 Sep 2009 06:36:47 -0000 1.46 >+++ schema/navigatorContent.exsd 7 Mar 2010 10:08:53 -0000 >@@ -134,6 +134,18 @@ > </restriction> > </simpleType> > </attribute> >+ <attribute name="appearsBefore" type="string"> >+ <annotation> >+ <documentation> >+ Specifies the ID of the navigator content that this navigator content appears before. This navigator content will be processed before the specified navigator content is processed. >+<br/><br/> >+The overall order in which the navigator content extensions are processed is calculated by first sorting all of the NCEs by priority, and then rearranging them according to the <b>appearsBefore</b> relationship. Once the overall order is determined, a unique sequence number is assigned to each navigator content descriptior which is available through the API. >+ </documentation> >+ <appInfo> >+ <meta.attribute kind="identifier" basedOn="org.eclipse.ui.navigator.navigatorContent/navigatorContent/@id"/> >+ </appInfo> >+ </annotation> >+ </attribute> > <attribute name="contentProvider" type="string"> > <annotation> > <documentation> >Index: src/org/eclipse/ui/internal/navigator/NavigatorContentService.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorContentService.java,v >retrieving revision 1.45 >diff -u -r1.45 NavigatorContentService.java >--- src/org/eclipse/ui/internal/navigator/NavigatorContentService.java 7 Mar 2010 08:12:35 -0000 1.45 >+++ src/org/eclipse/ui/internal/navigator/NavigatorContentService.java 7 Mar 2010 10:08:54 -0000 >@@ -44,7 +44,7 @@ > > import org.eclipse.ui.IMemento; > import org.eclipse.ui.internal.navigator.dnd.NavigatorDnDService; >-import org.eclipse.ui.internal.navigator.extensions.ExtensionPriorityComparator; >+import org.eclipse.ui.internal.navigator.extensions.ExtensionSequenceNumberComparator; > import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor; > import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptorManager; > import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension; >@@ -538,9 +538,9 @@ > boolean toRespectViewerRoots) { > > SortedSet rootExtensions = new TreeSet( >- ExtensionPriorityComparator.INSTANCE); >+ ExtensionSequenceNumberComparator.INSTANCE); > if (toRespectViewerRoots >- && viewerDescriptor.hasOverriddenRootExtensions()) { >+ /*&& viewerDescriptor.hasOverriddenRootExtensions()*/) { > > NavigatorContentDescriptor[] descriptors = CONTENT_DESCRIPTOR_REGISTRY > .getAllContentDescriptors(); >@@ -576,7 +576,7 @@ > public Set findOverrideableContentExtensionsForPossibleChild( > Object anElement) { > Set overrideableExtensions = new TreeSet( >- ExtensionPriorityComparator.INSTANCE); >+ ExtensionSequenceNumberComparator.INSTANCE); > Set descriptors = findDescriptorsWithPossibleChild(anElement, false); > for (Iterator iter = descriptors.iterator(); iter.hasNext();) { > INavigatorContentDescriptor descriptor = (INavigatorContentDescriptor) iter >@@ -776,7 +776,7 @@ > // Here we use the cache, since objects are inserted into the > // cache in response to the trigger point > NavigatorContentDescriptor descriptor = getSourceOfContribution(anElement); >- Set result = new TreeSet(ExtensionPriorityComparator.INSTANCE); >+ Set result = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE); > if (descriptor != null) { > result.add(descriptor); > } >@@ -816,7 +816,7 @@ > public Set findDescriptorsWithPossibleChild(Object anElement, > boolean toComputeOverrides) { > // Don't use the cache which is only used for triggerPoints >- Set result = new TreeSet(ExtensionPriorityComparator.INSTANCE); >+ Set result = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE); > result.addAll(CONTENT_DESCRIPTOR_REGISTRY > .findDescriptorsForPossibleChild(anElement, assistant, > toComputeOverrides)); >@@ -1196,7 +1196,7 @@ > if (theDescriptors.size() == 0) { > return Collections.EMPTY_SET; > } >- Set resultInstances = new TreeSet(ExtensionPriorityComparator.INSTANCE); >+ Set resultInstances = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE); > for (Iterator descriptorIter = theDescriptors.iterator(); descriptorIter > .hasNext();) { > NavigatorContentExtension extension = getExtension( >Index: src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java,v >retrieving revision 1.14 >diff -u -r1.14 NavigatorSaveablesService.java >--- src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java 5 Mar 2010 07:38:12 -0000 1.14 >+++ src/org/eclipse/ui/internal/navigator/NavigatorSaveablesService.java 7 Mar 2010 10:08:54 -0000 >@@ -36,7 +36,7 @@ > import org.eclipse.ui.Saveable; > import org.eclipse.ui.SaveablesLifecycleEvent; > import org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener; >-import org.eclipse.ui.internal.navigator.extensions.ExtensionPriorityComparator; >+import org.eclipse.ui.internal.navigator.extensions.ExtensionSequenceNumberComparator; > import org.eclipse.ui.internal.navigator.extensions.NavigatorContentDescriptor; > import org.eclipse.ui.internal.navigator.extensions.NavigatorContentExtension; > import org.eclipse.ui.navigator.INavigatorContentDescriptor; >@@ -436,7 +436,7 @@ > // TODO optimize this > if (saveablesProviders == null) { > inactivePluginsWithSaveablesProviders = new HashMap(); >- saveablesProviderMap = new TreeMap(ExtensionPriorityComparator.INSTANCE); >+ saveablesProviderMap = new TreeMap(ExtensionSequenceNumberComparator.INSTANCE); > INavigatorContentDescriptor[] descriptors = contentService > .getActiveDescriptorsWithSaveables(); > List result = new ArrayList(); >Index: src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java,v >retrieving revision 1.3 >diff -u -r1.3 CommonDropDescriptorManager.java >--- src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java 24 Feb 2006 17:48:43 -0000 1.3 >+++ src/org/eclipse/ui/internal/navigator/dnd/CommonDropDescriptorManager.java 7 Mar 2010 10:08:54 -0000 >@@ -20,7 +20,7 @@ > import java.util.TreeMap; > > import org.eclipse.core.runtime.IConfigurationElement; >-import org.eclipse.ui.internal.navigator.extensions.ExtensionPriorityComparator; >+import org.eclipse.ui.internal.navigator.extensions.ExtensionSequenceNumberComparator; > import org.eclipse.ui.internal.navigator.extensions.INavigatorContentExtPtConstants; > import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader; > import org.eclipse.ui.navigator.INavigatorContentDescriptor; >@@ -40,7 +40,7 @@ > * A map of (INavigatorContentDescriptor, > * CommonDropAdapterDescriptor)-pairs. > */ >- private final Map dropDescriptors = new TreeMap(ExtensionPriorityComparator.INSTANCE); >+ private final Map dropDescriptors = new TreeMap(ExtensionSequenceNumberComparator.INSTANCE); > > /** > * >Index: src/org/eclipse/ui/internal/navigator/extensions/ExtensionPriorityComparator.java >=================================================================== >RCS file: src/org/eclipse/ui/internal/navigator/extensions/ExtensionPriorityComparator.java >diff -N src/org/eclipse/ui/internal/navigator/extensions/ExtensionPriorityComparator.java >--- src/org/eclipse/ui/internal/navigator/extensions/ExtensionPriorityComparator.java 9 May 2008 14:12:56 -0000 1.6 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,82 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2006, 2008 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.ui.internal.navigator.extensions; >- >-import java.util.Comparator; >- >-import org.eclipse.ui.navigator.INavigatorContentDescriptor; >-import org.eclipse.ui.navigator.INavigatorContentExtension; >- >-/** >- * @since 3.2 >- * >- */ >-public class ExtensionPriorityComparator implements Comparator { >- >- /** >- * The initialized singleton instance. >- */ >- public static final ExtensionPriorityComparator INSTANCE = new ExtensionPriorityComparator(true); >- >- /** >- * The initialized singleton instance. >- */ >- public static final ExtensionPriorityComparator DESCENDING = new ExtensionPriorityComparator(false); >- >- private final int sortAscending; >- >- /** >- * Creates an instance that sorts according to the given boolean flag. >- * >- * @param toSortAscending >- * <code>true</code> for ascending sort order or >- * <code>false</code> for descending sort order. >- */ >- public ExtensionPriorityComparator(boolean toSortAscending) { >- sortAscending = toSortAscending ? 1 : -1; >- } >- >- /* >- * (non-Javadoc) >- * >- * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) >- */ >- public int compare(Object o1, Object o2) { >- >- INavigatorContentDescriptor lvalue = null; >- INavigatorContentDescriptor rvalue = null; >- >- if (o1 instanceof INavigatorContentDescriptor) { >- lvalue = (INavigatorContentDescriptor) o1; >- } else if (o1 instanceof INavigatorContentExtension) { >- lvalue = ((INavigatorContentExtension) o1).getDescriptor(); >- } >- >- if (o2 instanceof INavigatorContentDescriptor) { >- rvalue = (INavigatorContentDescriptor) o2; >- } else if (o2 instanceof INavigatorContentExtension) { >- rvalue = ((INavigatorContentExtension) o2).getDescriptor(); >- } >- >- if (lvalue == null || rvalue == null) { >- return -1 * sortAscending; >- } >- >- int c = lvalue.getPriority() - rvalue.getPriority(); >- if (c != 0) { >- return c * sortAscending; >- } >- return lvalue.getId().compareTo(rvalue.getId()) * sortAscending; >- >- } >- >-} >Index: src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java >=================================================================== >RCS file: src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java >diff -N src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/internal/navigator/extensions/ExtensionSequenceNumberComparator.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,82 @@ >+/******************************************************************************* >+ * Copyright (c) 2006, 2010 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.ui.internal.navigator.extensions; >+ >+import java.util.Comparator; >+ >+import org.eclipse.ui.navigator.INavigatorContentDescriptor; >+import org.eclipse.ui.navigator.INavigatorContentExtension; >+ >+/** >+ * @since 3.2 >+ * >+ */ >+public class ExtensionSequenceNumberComparator implements Comparator { >+ >+ /** >+ * The initialized singleton instance. >+ */ >+ public static final ExtensionSequenceNumberComparator INSTANCE = new ExtensionSequenceNumberComparator(true); >+ >+ /** >+ * The initialized singleton instance. >+ */ >+ public static final ExtensionSequenceNumberComparator DESCENDING = new ExtensionSequenceNumberComparator(false); >+ >+ private final int sortAscending; >+ >+ /** >+ * Creates an instance that sorts according to the given boolean flag. >+ * >+ * @param toSortAscending >+ * <code>true</code> for ascending sort order or >+ * <code>false</code> for descending sort order. >+ */ >+ public ExtensionSequenceNumberComparator(boolean toSortAscending) { >+ sortAscending = toSortAscending ? 1 : -1; >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) >+ */ >+ public int compare(Object o1, Object o2) { >+ >+ INavigatorContentDescriptor lvalue = null; >+ INavigatorContentDescriptor rvalue = null; >+ >+ if (o1 instanceof INavigatorContentDescriptor) { >+ lvalue = (INavigatorContentDescriptor) o1; >+ } else if (o1 instanceof NavigatorContentExtension) { >+ lvalue = ((NavigatorContentExtension) o1).getDescriptor(); >+ } >+ >+ if (o2 instanceof INavigatorContentDescriptor) { >+ rvalue = (INavigatorContentDescriptor) o2; >+ } else if (o2 instanceof INavigatorContentExtension) { >+ rvalue = ((NavigatorContentExtension) o2).getDescriptor(); >+ } >+ >+ if (lvalue == null || rvalue == null) { >+ return -1 * sortAscending; >+ } >+ >+ int c = lvalue.getSequenceNumber() - rvalue.getSequenceNumber(); >+ if (c != 0) { >+ return c * sortAscending; >+ } >+ return 0; >+ >+ } >+ >+} >Index: src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java,v >retrieving revision 1.22 >diff -u -r1.22 NavigatorContentDescriptor.java >--- src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java 20 Jan 2010 00:01:31 -0000 1.22 >+++ src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptor.java 7 Mar 2010 10:08:55 -0000 >@@ -63,6 +63,14 @@ > > private int priority = Priority.NORMAL_PRIORITY_VALUE; > >+ /** >+ * This is calculated based on the priority and appearsBeforeId when all of the descriptors >+ * are first loaded. This is what's used to sort on after that. >+ */ >+ private int sequenceNumber; >+ >+ private String appearsBeforeId; >+ > private Expression enablement; > > private Expression possibleChildren; >@@ -134,6 +142,28 @@ > return priority; > } > >+ >+ /** >+ * @return the sequence number >+ */ >+ public int getSequenceNumber() { >+ return sequenceNumber; >+ } >+ >+ >+ void setSequenceNumber(int num) { >+ sequenceNumber = num; >+ } >+ >+ /** >+ * >+ * @return The value specified by the <i>appearsBefore</i> attribute of the >+ * <navigatorContent/> element. >+ */ >+ public String getAppearsBeforeId() { >+ return appearsBeforeId; >+ } >+ > /** > * Parses the configuration element. > * >@@ -163,6 +193,7 @@ > providesSaveables = (providesSaveablesString != null && providesSaveablesString > .length() > 0) ? Boolean.valueOf(providesSaveablesString) > .booleanValue() : false; >+ appearsBeforeId = configElement.getAttribute(ATT_APPEARS_BEFORE); > > if (priorityString != null) { > try { >@@ -173,6 +204,11 @@ > priority = Priority.NORMAL_PRIORITY_VALUE; > } > } >+ >+ // We start with this because the sort ExtensionPriorityComparator works >+ // from the sequenceNumber >+ sequenceNumber = priority; >+ > if (id == null) { > throw new WorkbenchException(NLS.bind( > CommonNavigatorMessages.Attribute_Missing_Warning, >@@ -423,7 +459,7 @@ > */ > public Set getOverriddingExtensions() { > if (overridingExtensions == null) { >- overridingExtensions = new TreeSet(ExtensionPriorityComparator.DESCENDING); >+ overridingExtensions = new TreeSet(ExtensionSequenceNumberComparator.DESCENDING); > } > return overridingExtensions; > } >@@ -453,7 +489,7 @@ > * @see java.lang.Object#toString() > */ > public String toString() { >- return "Content[" + id + ", \"" + name + "\"]"; //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ >+ return "Content[" + id + "(" + sequenceNumber + ") " + ", \"" + name + "\"]"; //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ > } > > /* (non-Javadoc) >Index: src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java,v >retrieving revision 1.23 >diff -u -r1.23 NavigatorContentDescriptorManager.java >--- src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java 10 Jan 2010 10:43:43 -0000 1.23 >+++ src/org/eclipse/ui/internal/navigator/extensions/NavigatorContentDescriptorManager.java 7 Mar 2010 10:08:55 -0000 >@@ -15,6 +15,8 @@ > import java.util.HashMap; > import java.util.HashSet; > import java.util.Iterator; >+import java.util.LinkedList; >+import java.util.List; > import java.util.Map; > import java.util.Set; > import java.util.TreeSet; >@@ -133,7 +135,7 @@ > NavigatorContentDescriptor[] finalDescriptors = new NavigatorContentDescriptor[allDescriptors > .size()]; > finalDescriptors = (NavigatorContentDescriptor[]) allDescriptors.values().toArray(finalDescriptors); >- Arrays.sort(finalDescriptors, ExtensionPriorityComparator.INSTANCE); >+ Arrays.sort(finalDescriptors, ExtensionSequenceNumberComparator.INSTANCE); > return finalDescriptors; > } > >@@ -145,7 +147,7 @@ > NavigatorContentDescriptor[] finalDescriptors = new NavigatorContentDescriptor[saveablesProviderDescriptors > .size()]; > saveablesProviderDescriptors.toArray(finalDescriptors); >- Arrays.sort(finalDescriptors, ExtensionPriorityComparator.INSTANCE); >+ Arrays.sort(finalDescriptors, ExtensionSequenceNumberComparator.INSTANCE); > return finalDescriptors; > } > >@@ -195,7 +197,7 @@ > EvaluationCache cache = getEvaluationCache( > cachedEvaluations, aVisibilityAssistant); > >- Set descriptors = new TreeSet(ExtensionPriorityComparator.INSTANCE); >+ Set descriptors = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE); > NavigatorContentDescriptor[] cachedDescriptors = null; > if ((cachedDescriptors = cache.getDescriptors(anElement)) != null) { > descriptors.addAll(Arrays.asList(cachedDescriptors)); >@@ -256,7 +258,7 @@ > > boolean isOverridden; > >- Set overridingDescriptors = new TreeSet(ExtensionPriorityComparator.INSTANCE); >+ Set overridingDescriptors = new TreeSet(ExtensionSequenceNumberComparator.INSTANCE); > isOverridden = addDescriptorsConsideringOverrides(anElement, descriptor.getOverriddingExtensions(), > aVisibilityAssistant, overridingDescriptors, possibleChild); > >@@ -426,6 +428,48 @@ > } > } > } >+ >+ private int findId(List list, String id) { >+ for (int i = 0, len = list.size(); i < len; i++) { >+ NavigatorContentDescriptor desc = (NavigatorContentDescriptor) list.get(i); >+ if (desc.getId().equals(id)) >+ return i; >+ } >+ throw new RuntimeException("Can't find id: " + id); //$NON-NLS-1$ >+ } >+ >+ private void computeSequenceNumbers() { >+ NavigatorContentDescriptor[] descs = getAllContentDescriptors(); >+ >+ LinkedList list = new LinkedList(); >+ for (int i = 0; i < descs.length; i++) { >+ list.add(descs[i]); >+ } >+ >+ boolean changed = true; >+ while (changed) { >+ changed = false; >+ for (int i = 0, len = list.size(); i < len; i++) { >+ NavigatorContentDescriptor desc = (NavigatorContentDescriptor) list.get(i); >+ if (desc.getAppearsBeforeId() != null) { >+ int beforeInd = findId(list, desc.getAppearsBeforeId()); >+ if (beforeInd < i) { >+ list.add(beforeInd, desc); >+ list.remove(i + 1); >+ changed = true; >+ } >+ } >+ } >+ } >+ >+ for (int i = 0, len = list.size(); i < len; i++) { >+ NavigatorContentDescriptor desc = (NavigatorContentDescriptor) list.get(i); >+ desc.setSequenceNumber(i); >+ if (Policy.DEBUG_EXTENSION_SETUP) { >+ System.out.println("Descriptors by sequence: " + desc); //$NON-NLS-1$ >+ } >+ } >+ } > > private ImageRegistry getImageRegistry() { > if (imageRegistry == null) { >@@ -444,6 +488,7 @@ > */ > public void readRegistry() { > super.readRegistry(); >+ computeSequenceNumbers(); > computeOverrides(); > } > >Index: src/org/eclipse/ui/navigator/CommonViewerSorter.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSorter.java,v >retrieving revision 1.20 >diff -u -r1.20 CommonViewerSorter.java >--- src/org/eclipse/ui/navigator/CommonViewerSorter.java 26 Aug 2009 02:41:19 -0000 1.20 >+++ src/org/eclipse/ui/navigator/CommonViewerSorter.java 7 Mar 2010 10:08:55 -0000 >@@ -74,7 +74,7 @@ > return 0; > > INavigatorContentDescriptor source = getSource(element); >- return source != null ? source.getPriority() : Priority.NORMAL_PRIORITY_VALUE; >+ return source != null ? source.getSequenceNumber() : Priority.NORMAL_PRIORITY_VALUE; > } > > private void logMissingExtension(Object parent, Object object) { >@@ -104,43 +104,38 @@ > return -1; > } > >- // shortcut if contributed by same source >- if(sourceOfLvalue == sourceOfRvalue) { >- ViewerSorter sorter = sorterService.findSorter(sourceOfLvalue, parent, e1, e2); >- if (sorter != null) { >- return sorter.compare(viewer, e1, e2); >- } >- } >+ ViewerSorter sorter = null; > >- boolean flags[] = new boolean[4]; >- flags[0] = sourceOfLvalue.isTriggerPoint(e1); >- flags[1] = sourceOfLvalue.isTriggerPoint(e2); >- flags[2] = sourceOfRvalue.isTriggerPoint(e1); >- flags[3] = sourceOfRvalue.isTriggerPoint(e2); >- >- int whoknows = 0; >- whoknows = whoknows | (flags[0] & flags[1] ? LEFT_UNDERSTANDS : 0); >- whoknows = whoknows | (flags[2] & flags[3] ? RIGHT_UNDERSTANDS : 0); >- >+ // shortcut if contributed by same source >+ if (sourceOfLvalue == sourceOfRvalue) { >+ sorter = sorterService.findSorter(sourceOfLvalue, parent, e1, e2); >+ } else { > >- ViewerSorter sorter = null; >- >- switch(whoknows) { >- case BOTH_UNDERSTAND: >- sorter = sourceOfLvalue.getPriority() > sourceOfRvalue.getPriority() ? >- sorterService.findSorter(sourceOfLvalue, parent, e1, e2) : >- sorterService.findSorter(sourceOfRvalue, parent, e1, e2); >+ boolean flags[] = new boolean[4]; >+ flags[0] = sourceOfLvalue.isTriggerPoint(e1); >+ flags[1] = sourceOfLvalue.isTriggerPoint(e2); >+ flags[2] = sourceOfRvalue.isTriggerPoint(e1); >+ flags[3] = sourceOfRvalue.isTriggerPoint(e2); >+ >+ int whoknows = 0; >+ whoknows = whoknows | (flags[0] & flags[1] ? LEFT_UNDERSTANDS : 0); >+ whoknows = whoknows | (flags[2] & flags[3] ? RIGHT_UNDERSTANDS : 0); >+ >+ switch (whoknows) { >+ case BOTH_UNDERSTAND: >+ sorter = sourceOfLvalue.getSequenceNumber() > sourceOfRvalue.getSequenceNumber() ? sorterService >+ .findSorter(sourceOfLvalue, parent, e1, e2) >+ : sorterService.findSorter(sourceOfRvalue, parent, e1, e2); >+ break; >+ case LEFT_UNDERSTANDS: >+ sorter = sorterService.findSorter(sourceOfLvalue, parent, e1, e2); > break; >- case LEFT_UNDERSTANDS: >- sorter = sorterService.findSorter(sourceOfLvalue, >- parent, e1, e2) ; >- break; >- case RIGHT_UNDERSTANDS: >- sorter = sorterService.findSorter(sourceOfRvalue, >- parent, e1, e2) ; >- break; >+ case RIGHT_UNDERSTANDS: >+ sorter = sorterService.findSorter(sourceOfRvalue, parent, e1, e2); >+ break; >+ } > } >- >+ > if (sorter != null) { > return sorter.compare(viewer, e1, e2); > } >Index: src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java,v >retrieving revision 1.17 >diff -u -r1.17 INavigatorContentDescriptor.java >--- src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java 3 Mar 2009 04:16:53 -0000 1.17 >+++ src/org/eclipse/ui/navigator/INavigatorContentDescriptor.java 7 Mar 2010 10:08:55 -0000 >@@ -56,7 +56,28 @@ > * if no priority was specified. > */ > int getPriority(); >- >+ >+ /** >+ * Returns the extension that this extension must appear before. >+ * >+ * @return The value specified by the <i>appearsBefore</i> attribute of the >+ * <navigatorContent/> element. >+ * >+ * @since 3.5 >+ */ >+ public String getAppearsBeforeId(); >+ >+ /** >+ * Returns the unique sequence number of this extension. This is calculated based on >+ * the priority and the appears before and represents the order the extension will appear >+ * relative to the other extensions >+ * >+ * @return The sequence number of the extension >+ * >+ * @since 3.5 >+ */ >+ public int getSequenceNumber(); >+ > /** > * The enabledByDefault attribute specifies whether an extension should be > * activated in the context of a viewer automatically. Users may override >#P org.eclipse.ui.tests.navigator >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.tests.navigator/plugin.xml,v >retrieving revision 1.55 >diff -u -r1.55 plugin.xml >--- plugin.xml 5 Mar 2010 16:23:40 -0000 1.55 >+++ plugin.xml 7 Mar 2010 10:08:58 -0000 >@@ -222,8 +222,58 @@ > </actionProvider> > > </navigatorContent> >+ >+ >+ <navigatorContent >+ name="Unsorted Resources" >+ priority="low" >+ icon="$nl$/icons/full/eview16/resource_persp.gif" >+ activeByDefault="true" >+ contentProvider="org.eclipse.ui.internal.navigator.resources.workbench.ResourceExtensionContentProvider" >+ labelProvider="org.eclipse.ui.internal.navigator.resources.workbench.ResourceExtensionLabelProvider" >+ id="org.eclipse.ui.tests.navigator.resourceContent.unsorted"> >+ <enablement> >+ <or> >+ <adapt type="org.eclipse.core.resources.IProject" /> >+ <instanceof >+ value="org.eclipse.core.resources.IResource" /> >+ </or> >+ </enablement> >+ </navigatorContent> > > <navigatorContent >+ id="org.eclipse.ui.tests.navigator.testSimpleChildrenContent1" >+ contentProvider="org.eclipse.ui.tests.navigator.extension.TestSimpleChildrenContentProvider1" >+ labelProvider="org.eclipse.ui.tests.navigator.extension.TestLabelProviderBlue" >+ name="Test Simple Children 1"> >+ <enablement> >+ <instanceof value="org.eclipse.core.resources.IProject"/> >+ </enablement> >+ </navigatorContent> >+ >+ <navigatorContent >+ appearsBefore="org.eclipse.ui.tests.navigator.testSimpleChildrenContent1" >+ contentProvider="org.eclipse.ui.tests.navigator.extension.TestSimpleChildrenContentProvider2" >+ id="org.eclipse.ui.tests.navigator.testSimpleChildrenContent2" >+ labelProvider="org.eclipse.ui.tests.navigator.extension.TestLabelProviderCyan" >+ name="Test Simple Children 2"> >+ <enablement> >+ <instanceof value="org.eclipse.core.resources.IProject"/> >+ </enablement> >+ </navigatorContent> >+ >+ <navigatorContent >+ appearsBefore="org.eclipse.ui.tests.navigator.testSimpleChildrenContent2" >+ contentProvider="org.eclipse.ui.tests.navigator.extension.TestSimpleChildrenContentProvider3" >+ id="org.eclipse.ui.tests.navigator.testSimpleChildrenContent3" >+ labelProvider="org.eclipse.ui.tests.navigator.extension.TestLabelProviderPlainRed" >+ name="Test Simple Children 3"> >+ <enablement> >+ <instanceof value="org.eclipse.core.resources.IProject"/> >+ </enablement> >+ </navigatorContent> >+ >+ <navigatorContent > id="org.eclipse.ui.tests.navigator.testContent2" > contentProvider="org.eclipse.ui.tests.navigator.extension.TestContentProvider" > labelProvider="org.eclipse.ui.tests.navigator.extension.TestLabelProviderBlue" >Index: src/org/eclipse/ui/tests/navigator/NavigatorTestBase.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/NavigatorTestBase.java,v >retrieving revision 1.35 >diff -u -r1.35 NavigatorTestBase.java >--- src/org/eclipse/ui/tests/navigator/NavigatorTestBase.java 5 Mar 2010 16:23:40 -0000 1.35 >+++ src/org/eclipse/ui/tests/navigator/NavigatorTestBase.java 7 Mar 2010 10:08:58 -0000 >@@ -74,6 +74,12 @@ > public static final String TEST_CONTENT_WITH = "org.eclipse.ui.tests.navigator.testContentWith"; > public static final String TEST_CONTENT_NO_CHILDREN = "org.eclipse.ui.tests.navigator.testContentNoChildren"; > >+ public static final String TEST_CONTENT_RESOURCE_UNSORTED = "org.eclipse.ui.tests.navigator.resourceContent.unsorted"; >+ >+ public static final String TEST_SIMPLE_CHILDREN1 = "org.eclipse.ui.tests.navigator.testSimpleChildrenContent1"; >+ public static final String TEST_SIMPLE_CHILDREN2 = "org.eclipse.ui.tests.navigator.testSimpleChildrenContent2"; >+ public static final String TEST_SIMPLE_CHILDREN3 = "org.eclipse.ui.tests.navigator.testSimpleChildrenContent3"; >+ > public static final String TEST_CONTENT_M12_VIEW = "org.eclipse.ui.tests.navigator.M12View"; > public static final String TEST_CONTENT_M12_M1_CONTENT = "org.eclipse.ui.tests.navigator.m12.M1"; > public static final String TEST_CONTENT_M12_M1_CONTENT_FIRST_CLASS = "org.eclipse.ui.tests.navigator.m12.M1FirstClass"; >Index: src/org/eclipse/ui/tests/navigator/ProgrammaticOpenTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/ProgrammaticOpenTest.java,v >retrieving revision 1.15 >diff -u -r1.15 ProgrammaticOpenTest.java >--- src/org/eclipse/ui/tests/navigator/ProgrammaticOpenTest.java 7 Mar 2010 05:17:30 -0000 1.15 >+++ src/org/eclipse/ui/tests/navigator/ProgrammaticOpenTest.java 7 Mar 2010 10:08:58 -0000 >@@ -21,6 +21,7 @@ > import org.eclipse.ui.tests.navigator.extension.TestLabelProviderBlue; > import org.eclipse.ui.tests.navigator.extension.TestLabelProviderCyan; > import org.eclipse.ui.tests.navigator.extension.TestLabelProviderStyledGreen; >+import org.eclipse.ui.tests.navigator.extension.TestSimpleChildrenContentProvider; > import org.eclipse.ui.tests.navigator.extension.TestSorterData; > > public class ProgrammaticOpenTest extends NavigatorTestBase { >@@ -152,4 +153,40 @@ > checkItems(rootItems, TestLabelProviderBlue.instance); > } > >+ // bug 228022 add ordering of content >+ public void testNceOrdering() throws Exception { >+ _contentService.bindExtensions(new String[] { >+ COMMON_NAVIGATOR_RESOURCE_EXT, TEST_SIMPLE_CHILDREN1 }, false); >+ _contentService.getActivationService().activateExtensions( >+ new String[] { COMMON_NAVIGATOR_RESOURCE_EXT, TEST_SIMPLE_CHILDREN1 }, true); >+ >+ TreeItem[] rootItems = _viewer.getTree().getItems(); >+ _viewer.expandAll(); >+ >+ assertEquals("10", rootItems[0].getItems()[0].getText()); >+ >+ _contentService.bindExtensions(new String[] { TEST_SIMPLE_CHILDREN3 }, false); >+ _contentService.getActivationService().activateExtensions( >+ new String[] { TEST_SIMPLE_CHILDREN3 }, false); >+ >+ _viewer.expandAll(); >+ >+ assertEquals("30", rootItems[0].getItems()[0].getText()); >+ assertEquals("10", rootItems[0].getItems()[TestSimpleChildrenContentProvider.NUM_ITEMS] >+ .getText()); >+ >+ _contentService.bindExtensions(new String[] { TEST_SIMPLE_CHILDREN2 }, false); >+ _contentService.getActivationService().activateExtensions( >+ new String[] { TEST_SIMPLE_CHILDREN2 }, false); >+ >+ _viewer.expandAll(); >+ >+ assertEquals("30", rootItems[0].getItems()[0].getText()); >+ assertEquals("20", rootItems[0].getItems()[TestSimpleChildrenContentProvider.NUM_ITEMS] >+ .getText()); >+ assertEquals("10", rootItems[0].getItems()[TestSimpleChildrenContentProvider.NUM_ITEMS * 2] >+ .getText()); >+ >+ } >+ > } >Index: src/org/eclipse/ui/tests/navigator/extension/TestLabelProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/extension/TestLabelProvider.java,v >retrieving revision 1.16 >diff -u -r1.16 TestLabelProvider.java >--- src/org/eclipse/ui/tests/navigator/extension/TestLabelProvider.java 10 Jan 2010 10:58:17 -0000 1.16 >+++ src/org/eclipse/ui/tests/navigator/extension/TestLabelProvider.java 7 Mar 2010 10:08:58 -0000 >@@ -96,7 +96,7 @@ > if (element instanceof IResource) { > return getColorName() + ((IResource) element).getName(); > } >- return null; >+ return element.toString(); > } > > public String getDescription(Object anElement) { >Index: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider.java >=================================================================== >RCS file: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider.java >diff -N src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,79 @@ >+/******************************************************************************* >+ * Copyright (c) 2010 Oakland Software Incorporated 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: >+ * Francis Upton IV, Oakland Software - initial API and implementation >+ ******************************************************************************/ >+package org.eclipse.ui.tests.navigator.extension; >+ >+import java.util.ArrayList; >+import java.util.List; >+ >+import org.eclipse.core.resources.IResource; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.Viewer; >+ >+/** >+ * Provides some children for a given resource. >+ */ >+public class TestSimpleChildrenContentProvider implements ITreeContentProvider { >+ >+ public static final int NUM_ITEMS = 4; >+ >+ public String _name; >+ >+ private Object[] _children; >+ >+ public class SimpleChild { >+ public String _name; >+ public Object _parent; >+ >+ public String toString() { >+ return _name; >+ } >+ } >+ >+ public TestSimpleChildrenContentProvider() { >+ } >+ >+ public Object[] getElements(Object inputElement) { >+ return getChildren(inputElement); >+ } >+ >+ public Object[] getChildren(Object parentElement) { >+ if (parentElement instanceof IResource) { >+ if (_children == null) { >+ List l = new ArrayList(); >+ for (int i = 0; i < NUM_ITEMS; i++) { >+ SimpleChild child = new SimpleChild(); >+ child._parent = parentElement; >+ child._name = _name + i; >+ l.add(child); >+ } >+ _children = l.toArray(); >+ } >+ return _children; >+ } >+ return new Object[] {}; >+ } >+ >+ public Object getParent(Object element) { >+ SimpleChild child = (SimpleChild) element; >+ return child._parent; >+ } >+ >+ public boolean hasChildren(Object element) { >+ return true; >+ } >+ >+ public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) { >+ _children = null; >+ } >+ >+ public void dispose() { >+ } >+} >Index: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider1.java >=================================================================== >RCS file: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider1.java >diff -N src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider1.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider1.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,9 @@ >+package org.eclipse.ui.tests.navigator.extension; >+ >+public class TestSimpleChildrenContentProvider1 extends TestSimpleChildrenContentProvider { >+ >+ public TestSimpleChildrenContentProvider1() { >+ _name = "1"; >+ } >+ >+} >Index: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider2.java >=================================================================== >RCS file: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider2.java >diff -N src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider2.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider2.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,9 @@ >+package org.eclipse.ui.tests.navigator.extension; >+ >+public class TestSimpleChildrenContentProvider2 extends TestSimpleChildrenContentProvider { >+ >+ public TestSimpleChildrenContentProvider2() { >+ _name = "2"; >+ } >+ >+} >Index: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider3.java >=================================================================== >RCS file: src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider3.java >diff -N src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider3.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/ui/tests/navigator/extension/TestSimpleChildrenContentProvider3.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,9 @@ >+package org.eclipse.ui.tests.navigator.extension; >+ >+public class TestSimpleChildrenContentProvider3 extends TestSimpleChildrenContentProvider { >+ >+ public TestSimpleChildrenContentProvider3() { >+ _name = "3"; >+ } >+ >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 228022
:
105827
|
133258
|
161171
| 161238