Added optional priority to URI resolver.
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java
index 1e34175..b4489ec 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionDescriptor.java
@@ -32,16 +32,18 @@
 	public List projectNatureIds;
 	protected String resourceType;
 	protected int stage = URIResolverExtensionRegistry.STAGE_POSTNORMALIZATION;
+  protected String priority = URIResolverExtensionRegistry.PRIORITY_MEDIUM;
 	protected ClassLoader classLoader;
 	protected boolean error;
 
-	public URIResolverExtensionDescriptor(String className, ClassLoader classLoader, List projectNatureIds, String resourceType, int stage)
+	public URIResolverExtensionDescriptor(String className, ClassLoader classLoader, List projectNatureIds, String resourceType, int stage, String priority)
 	{
 		this.className = className;
 		this.classLoader = classLoader;
 		this.projectNatureIds = projectNatureIds;
 		this.resourceType = resourceType;
 		this.stage = stage;
+    this.priority = priority;
 	}
 
 	public URIResolverExtension getResolver()
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
index 1e5bfd5..2587c7b 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistry.java
@@ -19,7 +19,6 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.wst.common.uriresolver.URIResolverExtension;
 
 
 
@@ -27,31 +26,44 @@
 	protected HashMap map = new HashMap();
 	public static final int STAGE_PRENORMALIZATION = 1;
 	public static final int STAGE_POSTNORMALIZATION = 2;	
+  public static final String PRIORITY_LOW = "low";
+  public static final String PRIORITY_MEDIUM = "medium";
+  public static final String PRIORITY_HIGH = "high";
 	protected final static String NULL_PROJECT_NATURE_ID = "";
 	
 	public URIResolverExtensionRegistry() {
 	}
 
-	public void put(String className, ClassLoader classLoader, List projectNatureIds, String resourceType, int stage) {
+	public void put(String className, ClassLoader classLoader, List projectNatureIds, String resourceType, int stage, String priority) {
 		if(projectNatureIds == null)
 		  projectNatureIds = new ArrayList();
 		if(projectNatureIds.isEmpty())
 		{
 		  projectNatureIds.add(NULL_PROJECT_NATURE_ID);
 		}
-		URIResolverExtensionDescriptor info = new URIResolverExtensionDescriptor(className, classLoader, projectNatureIds, resourceType, stage);
+		URIResolverExtensionDescriptor info = new URIResolverExtensionDescriptor(className, classLoader, projectNatureIds, resourceType, stage, priority);
 		
 		Iterator idsIter = projectNatureIds.iterator();
 		while(idsIter.hasNext())
 		{
 		  String key = (String)idsIter.next();
 		  
-		  List list = (List)map.get(key);   
-		  if (list == null)
-		  {			
-			list = new ArrayList();
-			map.put(key, list);
-		  }
+      HashMap priorityMap = (HashMap)map.get(key);
+      if(priorityMap == null)
+      {
+        priorityMap = new HashMap();
+        map.put(key, priorityMap);
+        priorityMap.put(PRIORITY_HIGH, new ArrayList());
+        priorityMap.put(PRIORITY_MEDIUM, new ArrayList());
+        priorityMap.put(PRIORITY_LOW, new ArrayList());
+      }
+      List list = (List)priorityMap.get(priority);
+		  //List list = (List)map.get(key);   
+//		  if (list == null)
+//		  {			
+//			list = new ArrayList();
+//			priorityMap.put(priority, list);
+//		  }
 		
 		  list.add(info);	
 		}
@@ -59,7 +71,8 @@
 	
 	
 	/**
-	 * Return a list of URIResolverExtensionDescriptor objects that apply to this project.
+	 * Return a list of URIResolverExtensionDescriptor objects that apply to this project. The list
+   * is in the priority order high, medium, low.
 	 * 
 	 */
 	public List getExtensionDescriptors(IProject project)
@@ -73,7 +86,9 @@
 				    project == null ||
 					project.hasNature(key))
 				{				
-					result.addAll((List)map.get(key)); 
+					result.addAll((List)((HashMap)map.get(key)).get(PRIORITY_HIGH)); 
+          result.addAll((List)((HashMap)map.get(key)).get(PRIORITY_MEDIUM)); 
+          result.addAll((List)((HashMap)map.get(key)).get(PRIORITY_LOW)); 
 				}	
 			}
 			catch (CoreException e)
@@ -103,10 +118,10 @@
 		return result;
 	}	
 
-	public URIResolverExtension get(String key) {
-		URIResolverExtensionDescriptor info = (URIResolverExtensionDescriptor) map.get(key);
-		return info != null ? info.getResolver() : null;
-	}
+//	public URIResolverExtension get(String key) {
+//		URIResolverExtensionDescriptor info = (URIResolverExtensionDescriptor) map.get(key);
+//		return info != null ? info.getResolver() : null;
+//	}
 
 
 	
diff --git a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
index 4da8b1a..6b2950f 100644
--- a/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
+++ b/plugins/org.eclipse.wst.common.uriresolver/src/org/eclipse/wst/common/uriresolver/internal/URIResolverExtensionRegistryReader.java
@@ -39,6 +39,7 @@
 	    protected static final String VAL_STAGE_PRE = "prenormalization";
 	    protected static final String VAL_STAGE_POST = "postnormalization";
 	    protected static final String ATT_VALUE = "value";
+      protected static final String ATT_PRIORITY = "priority";
 	   
 
 		protected URIResolverExtensionRegistry registry;
@@ -75,6 +76,11 @@
 				//String projectNatureId = element.getAttribute(ATT_PROJECT_NATURE_ID);
 				String resourceType = element.getAttribute(ATT_RESOURCE_TYPE);
 				String stage = element.getAttribute(ATT_STAGE);	
+        String priority = element.getAttribute(ATT_PRIORITY); 
+        if(priority == null || priority.equals(""))
+        {
+          priority = URIResolverExtensionRegistry.PRIORITY_MEDIUM;
+        }
 				List projectNatureIds = new ArrayList();
 				IConfigurationElement[] ids = element.getChildren(ELEM_PROJECT_NATURE_ID);
 				int numids = ids.length;
@@ -95,7 +101,7 @@
 						{
 						  stageint = URIResolverExtensionRegistry.STAGE_PRENORMALIZATION;
 						}
-						registry.put(className, classLoader, projectNatureIds, resourceType, stageint);
+						registry.put(className, classLoader, projectNatureIds, resourceType, stageint, priority);
 					} catch (Exception e) {
 					}
 				}