Updates to CDA processing

Modified XSI to use clinical document namespace over others
Modified excel generation for zip to use file name versus complete path
diff --git a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
index 7d4737f..65b09b5 100644
--- a/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
+++ b/cda/plugins/org.eclipse.mdht.cda.xml.ui/src/org/eclipse/mdht/cda/xml/ui/handlers/GenerateCDADataHandler.java
@@ -1717,8 +1717,6 @@
 			this.prefix = prefix;
 			this.zipEntry = zipEntry;
 			this.inputStream = inputStream;
-			// this.zipFile = zipFile;
-			// this.zipEntry = zipEntry;
 		}
 
 		/*
@@ -2728,7 +2726,7 @@
 		 */
 		@Override
 		public String getName() {
-			return prefix + zipEntry.getName();
+			return FilenameUtils.getName(zipEntry.getName());
 		}
 
 		/*
diff --git a/cda/plugins/org.eclipse.mdht.uml.cda/src/org/eclipse/mdht/uml/cda/internal/resource/CDAXSITypeProvider.java b/cda/plugins/org.eclipse.mdht.uml.cda/src/org/eclipse/mdht/uml/cda/internal/resource/CDAXSITypeProvider.java
index eba7047..638e296 100644
--- a/cda/plugins/org.eclipse.mdht.uml.cda/src/org/eclipse/mdht/uml/cda/internal/resource/CDAXSITypeProvider.java
+++ b/cda/plugins/org.eclipse.mdht.uml.cda/src/org/eclipse/mdht/uml/cda/internal/resource/CDAXSITypeProvider.java
@@ -15,6 +15,7 @@
  *******************************************************************************/
 package org.eclipse.mdht.uml.cda.internal.resource;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -60,6 +61,8 @@
 
 	private final EClass documentClass;
 
+	private String preffered = null;
+
 	/**
 	 * Initializes me without a document {@link EClass}, so that I will discover it by template ID.
 	 */
@@ -101,23 +104,77 @@
 		int last = 0;
 		NodeList nodeList = element.getChildNodes();
 
+		ArrayList<EClass> potentialTemplates = new ArrayList<EClass>();
+
 		EClass type = getType(element);
 
+		/*
+		 * Collect the potential templates
+		 */
 		for (int i = 0; i < nodeList.getLength(); i++) {
 			if (nodeList.item(i) instanceof Element) {
 				Element e = (Element) nodeList.item(i);
 				if ("templateId".equals(e.getLocalName())) {
 					EClass eClass = getEClass(
 						e.getAttributeNS(null, "root"), e.getAttributeNS(null, "extension"), element);
-					if ((eClass != null) && !eClass.isAbstract() && conformsTo(eClass, type)
-							&& (eClass.getEAllSuperTypes().size() > last)) {
-						result = eClass;
-						last = eClass.getEAllSuperTypes().size();
+					if (eClass != null) {
+						potentialTemplates.add(eClass);
 					}
 				}
 			}
 		}
 
+		// if we found some
+		if (!potentialTemplates.isEmpty()) {
+			// if one - use it
+			if (potentialTemplates.size() == 1) {
+				result = potentialTemplates.get(0);
+			} else {
+				// else if we have identified an initial URI to use for the cases of mixed content
+				if (preffered != null) {
+					for (EClass potentialTemplate : potentialTemplates) {
+						// check if the potentialTemplate is in the uri
+						if (preffered.equals(potentialTemplate.getEPackage().getNsURI())) {
+							if ((potentialTemplate != null) && !potentialTemplate.isAbstract()
+									&& conformsTo(potentialTemplate, type)
+									&& (potentialTemplate.getEAllSuperTypes().size() > last)) {
+								result = potentialTemplate;
+								last = potentialTemplate.getEAllSuperTypes().size();
+							}
+						}
+					}
+					// if we did not find one in the preferred namespec
+					if (result == null) {
+						for (EClass potentialTemplate : potentialTemplates) {
+							if ((potentialTemplate != null) && !potentialTemplate.isAbstract()
+									&& conformsTo(potentialTemplate, type)
+									&& (potentialTemplate.getEAllSuperTypes().size() > last)) {
+
+								result = potentialTemplate;
+								last = potentialTemplate.getEAllSuperTypes().size();
+							}
+						}
+					}
+				} else {
+					// else check for best fit
+					for (EClass potentialTemplate : potentialTemplates) {
+						if ((potentialTemplate != null) && !potentialTemplate.isAbstract()
+								&& conformsTo(potentialTemplate, type)
+								&& (potentialTemplate.getEAllSuperTypes().size() > last)) {
+							result = potentialTemplate;
+							last = potentialTemplate.getEAllSuperTypes().size();
+						}
+					}
+				}
+
+			}
+
+		}
+
+		if (result != null && element.getLocalName().equals("ClinicalDocument")) {
+			preffered = result.getEPackage().getNsURI();
+		}
+
 		return result;
 	}