Flexmi: use a map to store templates (3x speedup)
diff --git a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java
index 617c2f6..f264a54 100644
--- a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java
+++ b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java
@@ -63,7 +63,7 @@
 	protected StringSimilarityProvider stringSimilarityProvider = new CachedStringSimilarityProvider(new DefaultStringSimilarityProvider());
 	protected Stack<URI> parsedFragmentURIStack = new Stack<>();
 	protected Set<URI> parsedFragmentURIs = new HashSet<>();
-	protected List<Template> templates = new ArrayList<>();
+	protected Map<String, Template> templates = new HashMap<>();
 	protected BiMap<String, EObject> fullyQualifiedIDs = HashBiMap.create();
 	protected Map<EObject, String> localIDs = new HashMap<>();
 	protected FrameStack frameStack = new FrameStack();
@@ -86,19 +86,18 @@
 		return parsedFragmentURIs;
 	}
 	
-	public List<Template> getTemplates() {
-		return templates;
+	public void addTemplate(Template template) {
+		templates.put(template.getName(), template);
 	}
 	
-	public Template getTemplate(String name) {
-		for (Template template : templates) {
-			if (template.getName().equals(name)) {
-				return template;
-			}
-		}
-		return null;
+	public Template getTemplate(String templateName) {
+		return templates.get(templateName);
 	}
 	
+	public Collection<Template> getTemplates() {
+		return templates.values();
+	}
+
 	public static void main(String[] args) throws Exception {
 		
 		// Load the metamodel
@@ -799,5 +798,5 @@
 		if (importedFrom == null) return this;
 		else return importedFrom.getRootResource();
 	}
-	
+
 }
diff --git a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/xml/FlexmiXmlParser.java b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/xml/FlexmiXmlParser.java
index 328b8a2..ecbfaef 100644
--- a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/xml/FlexmiXmlParser.java
+++ b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/xml/FlexmiXmlParser.java
@@ -78,13 +78,13 @@
 		
 		if (isFlexmiRootNode(document.getDocumentElement())) {
 			for (Element templateElement : Xml.getChildren(document.getDocumentElement(), Template.NODE_NAME)) {
-				resource.getTemplates().add(TemplateFactory.getInstance().createTemplate(templateElement, resource, new java.net.URI(uri.toString())));
+				resource.addTemplate(TemplateFactory.getInstance().createTemplate(templateElement, resource, new java.net.URI(uri.toString())));
 				document.getDocumentElement().removeChild(templateElement);
 			}
 		}
 		else {
 			if (isTemplate(document.getDocumentElement())) {
-				resource.getTemplates().add(TemplateFactory.getInstance().createTemplate(document.getDocumentElement(), resource, new java.net.URI(uri.toString())));
+				resource.addTemplate(TemplateFactory.getInstance().createTemplate(document.getDocumentElement(), resource, new java.net.URI(uri.toString())));
 				document.removeChild(document.getDocumentElement());
 				return;
 			}
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
index eb892e5..5d0e3d4 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
@@ -23,8 +23,8 @@
 		FlexmiResource resource = loadResource("templates/model-with-template.flexmi");
 		assertEquals(0, resource.getWarnings().size());
 		assertEquals(3, resource.getTemplates().size());
-		assertEquals("t1", resource.getTemplates().get(0).getName());
-		assertEquals("p", resource.getTemplates().get(0).getParameters().get(0).getName());
+		assertTrue(resource.getTemplate("t1") != null);
+		assertEquals("p", resource.getTemplate("t1").getParameters().get(0).getName());
 	}
 	
 	@Test