/** * Load a named model from the classpath * @param name the model name * @return the model */ public static Model loadModel(String name) { String filename = Util.getFilename(MODEL, name); InputStream is = Model.class.getClassLoader().getResourceAsStream(filename); if (is == null) { throw new IllegalArgumentException("Model definition file '" + filename + "' cannot be found"); } Model model = null; try { model = new InterMineModelParser().process(new InputStreamReader(is)); } catch (Exception e) { throw new RuntimeException("Error parsing model definition file '" + filename + "'", e); } return model; } }
/** * Load a named model from the classpath * @param name the model name * @return the model */ public static Model loadModel(String name) { String filename = Util.getFilename(MODEL, name); InputStream is = Model.class.getClassLoader().getResourceAsStream(filename); if (is == null) { throw new IllegalArgumentException("Model definition file '" + filename + "' cannot be found"); } Model model = null; try { model = new InterMineModelParser().process(new InputStreamReader(is)); } catch (Exception e) { throw new RuntimeException("Error parsing model definition file '" + filename + "'", e); } return model; } }
public void testExecute() throws Exception { ClassLoader cl = getClass().getClassLoader(); File output = File.createTempFile("output", ".xml"); ModelMergerTask task = new ModelMergerTask(); task.setAdditionsFiles(Collections.singletonList("xml/ModelMergerTaskTestAdditions.xml")); task.setInputModelFile(new File(cl.getResource("xml/ModelMergerTaskTestInput.xml").getPath())); task.setOutputFile(output); task.execute(); InterMineModelParser parser = new InterMineModelParser(); Model result = parser.process(new FileReader(output)); Model exp = parser.process(new InputStreamReader(cl.getResourceAsStream("xml/ModelMergerTaskTestExpected.xml"))); assertEquals(exp, result); } }
public void testAddAttribute() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\"><attribute name=\"name\" type=\"java.lang.String\"/></class></model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\"><attribute name=\"age\" type=\"java.lang.Integer\"/></class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\"><attribute name=\"name\" type=\"java.lang.String\"/><attribute name=\"age\" type=\"java.lang.Integer\"/></class></model>"; //assertXMLEqual(expected, xml); assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
try { Reader fileReader = new FileReader(oldModelLocation); oldModel = imModelParser.process(fileReader); } catch (FileNotFoundException fnfe) { throw new BuildException("File of the previous model not found ", fnfe);
public void testConflictingAttributes() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\"><attribute name=\"name\" type=\"java.lang.String\"/></class></model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\"><attribute name=\"name\" type=\"java.lang.Integer\"/></class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); try { ModelMerger.mergeModel(model, additionClds); fail("Expected ModelMergerException"); } catch (ModelMergerException e) { //e.printStackTrace(); } }
public void testMergeClassAddingInheritance() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"\">" + "<class name=\"A\" is-interface=\"false\"></class>" + "<class name=\"B\" is-interface=\"false\"></class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>"; ClassDescriptor cld1 = model.getClassDescriptorByName("A"); ClassDescriptor cld2 = (ClassDescriptor) parser .generateClassDescriptors(new StringReader(addition), model.getPackageName()) .iterator().next(); ClassDescriptor res = ModelMerger.mergeClass(cld1, cld2, model, Collections.singleton(cld2)); Set supers = new HashSet(); supers.add("B"); assertEquals(supers, res.getSuperclassNames()); }
public void testInheritanceChain() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"A\" extends=\"C\" is-interface=\"false\"></class>" + "<class name=\"C\" is-interface=\"false\"></class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>" + "<class name=\"B\" extends=\"C\" is-interface=\"false\"></class>" + "</model>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>" + "<class name=\"B\" extends=\"C\" is-interface=\"false\"></class>" + "<class name=\"C\" is-interface=\"false\"></class>" + "</model>"; assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testMergeClassReplacingInheritance() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"package.name\">" + "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>" + "<class name=\"B\" is-interface=\"false\"></class>" + "<class name=\"C\" is-interface=\"false\"></class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"A\" extends=\"C\" is-interface=\"false\"></class>"; ClassDescriptor cld1 = model.getClassDescriptorByName("A"); ClassDescriptor cld2 = parseClass(addition, ""); ClassDescriptor res = ModelMerger.mergeClass(cld1, cld2, model, Collections.singleton(cld2)); Set supers = new HashSet(); supers.add("C"); assertEquals(supers, res.getSuperclassNames()); }
public void testSubclassExisting() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"org.intermine.model.testmodel.DepartmentSecretary\" extends=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"department\" type=\"java.lang.String\"/>" + "</class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.DepartmentSecretary\" extends=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"department\" type=\"java.lang.String\"/>" + "</class>" + "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; //assertXMLEqual(expected, ModelMerger.mergeModel(model, additionClds).toString()); assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testAddClass() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testAddReference() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\">" + "</class>" + "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "</class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); // add Department.company String addition = "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "<reference name=\"company\" referenced-type=\"org.intermine.model.testmodel.Company\"/>" + "</class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\">" + "</class>" + "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "<reference name=\"company\" referenced-type=\"org.intermine.model.testmodel.Company\"/>" + "</class>" + "</model>"; //assertXMLEqual(expected, ModelMerger.mergeModel(model, additionClds).toString()); assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testIsInterfaceMismatch() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"false\">" + "</class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); // Merge class with differing is-interface attribute String addition = "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\">" + "</class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); try { ModelMerger.mergeModel(model, additionClds); fail("Expected ModelMergerException"); } catch (ModelMergerException err) { } }
public void testAddCollection() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"false\">" + "</class>" + "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "</class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); // add Company.departments String addition = "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"false\">" + "<collection name=\"departments\" referenced-type=\"org.intermine.model.testmodel.Department\" ordered=\"true\"/>" + "</class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"false\">" + "<collection name=\"departments\" referenced-type=\"org.intermine.model.testmodel.Department\" ordered=\"true\"/>" + "</class>" + "<class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\">" + "</class>" + "</model>"; //assertXMLEqual(expected, ModelMerger.mergeModel(model, additionClds).toString()); assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testGenerateClassDescriptors() throws Exception { Model model = parser.process(new StringReader(getModelXml())); assertEquals(getExpectedClds(), model.getClassDescriptors()); }
public void testProcess() throws Exception { Model model = parser.process(new StringReader(getModelXml())); Model expected = new Model("testmodel", "org.intermine.model.testmodel", getExpectedClds()); assertEquals(expected, model); }
public void testSuperclassExisting() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.DepartmentSecretary\" is-interface=\"false\">" + "<attribute name=\"department\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<model name=\"additions\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.DepartmentSecretary\" extends=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "</class>" + "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"org.intermine.model.testmodel.DepartmentSecretary\" extends=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"department\" type=\"java.lang.String\"/>" + "</class>" + "<class name=\"org.intermine.model.testmodel.Secretary\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "</class>" + "</model>"; //assertXMLEqual(expected, ModelMerger.mergeModel(model, additionClds).toString()); assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testConflictingCollections() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\"><collection name=\"departments\" referenced-type=\"org.intermine.model.testmodel.Department\" ordered=\"true\" reverse-reference=\"company\"/></class><class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\"><reference name=\"company\" referenced-type=\"org.intermine.model.testmodel.Company\" reverse-reference=\"departments\"/></class></model>"; Model model = parser.process(new StringReader(modelStr)); // referenced-type wrong - Company.departments String addition = "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\"><collection name=\"departments\" referenced-type=\"org.intermine.model.testmodel.Company\" ordered=\"true\" reverse-reference=\"company\"/></class>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); try { ModelMerger.mergeModel(model, additionClds); fail("Expected ModelMergerException"); } catch (ModelMergerException e) { } // reverse reference wrong - Company.departments addition = "<class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\"><collection name=\"departments\" referenced-type=\"org.intermine.model.testmodel.Department\" ordered=\"true\" reverse-reference=\"incorrect\"/></class>"; additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); model = parser.process(new StringReader(modelStr)); try { ModelMerger.mergeModel(model, additionClds); fail("Expected ModelMergerException"); } catch (ModelMergerException e) { // e.printStackTrace(); } }
public void testRedundancy() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"A\" extends=\"C\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "<collection name=\"col\" referenced-type=\"C\"/>" + "<reference name=\"ref\" referenced-type=\"C\"/>" + "</class>" + "<class name=\"C\" is-interface=\"false\"></class>" + "</model>"; Model model = parser.process(new StringReader(modelStr)); String addition = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>" + "<class name=\"B\" extends=\"C\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "<collection name=\"col\" referenced-type=\"C\"/>" + "<reference name=\"ref\" referenced-type=\"C\"/>" + "</class>" + "</model>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); String expected = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\">" + "<class name=\"A\" extends=\"B\" is-interface=\"false\"></class>" + "<class name=\"B\" extends=\"C\" is-interface=\"false\">" + "<attribute name=\"name\" type=\"java.lang.String\"/>" + "<collection name=\"col\" referenced-type=\"C\"/>" + "<reference name=\"ref\" referenced-type=\"C\"/>" + "</class>" + "<class name=\"C\" is-interface=\"false\"></class>" + "</model>"; assertEquals(parser.process(new StringReader(expected)).getClassDescriptors(), ModelMerger.mergeModel(model, additionClds).getClassDescriptors()); }
public void testConflictingReferences() throws Exception { String modelStr = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Company\" is-interface=\"true\"><collection name=\"departments\" referenced-type=\"org.intermine.model.testmodel.Department\" ordered=\"true\" reverse-reference=\"company\"/></class><class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\"><reference name=\"company\" referenced-type=\"org.intermine.model.testmodel.Company\" reverse-reference=\"departments\"/></class></model>"; Model model = parser.process(new StringReader(modelStr)); // referenced-type wrong - Department.company String addition = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\"><reference name=\"company\" referenced-type=\"org.intermine.model.testmodel.Department\" reverse-reference=\"departments\"/></class></model>"; Set additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); try { ModelMerger.mergeModel(model, additionClds); fail("Expected ModelMergerException"); } catch (ModelMergerException e) { e.printStackTrace(); } // reverse reference wrong - Department.company addition = "<model name=\"testmodel\" package=\"org.intermine.model.testmodel\"><class name=\"org.intermine.model.testmodel.Department\" is-interface=\"false\"><reference name=\"company\" referenced-type=\"org.intermine.model.testmodel.Company\" reverse-reference=\"incorrect\"/></class></model>"; additionClds = parser.generateClassDescriptors(new StringReader(addition), model.getPackageName()); model = parser.process(new StringReader(modelStr)); try { ModelMerger.mergeModel(model, additionClds); fail("Expected ModelMergerException"); } catch (ModelMergerException e) { //e.printStackTrace(); } }