package org.openprovenance.prov.template; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.openprovenance.prov.model.Document; import org.openprovenance.prov.model.Bundle; import org.openprovenance.prov.model.Namespace; import org.openprovenance.prov.model.ProvFactory; import org.openprovenance.prov.model.QualifiedName; import org.openprovenance.prov.model.TypedValue; import org.openprovenance.prov.notation.Utility; import static org.openprovenance.prov.template.ExpandUtil.VAR_NS; import static org.openprovenance.prov.template.ExpandUtil.TMPL_NS; import junit.framework.TestCase; public class ExpandTest extends TestCase { static final String EX_NS = "http://example.org/"; public ExpandTest(String testName) { super(testName); } ProvFactory pf=new org.openprovenance.prov.xml.ProvFactory(); QualifiedName var_a=pf.newQualifiedName(VAR_NS, "a", "var"); QualifiedName var_b=pf.newQualifiedName(VAR_NS, "b", "var"); QualifiedName var_c=pf.newQualifiedName(VAR_NS, "c", "var"); QualifiedName var_d=pf.newQualifiedName(VAR_NS, "d", "var"); QualifiedName var_e=pf.newQualifiedName(VAR_NS, "e", "var"); QualifiedName var_ag=pf.newQualifiedName(VAR_NS, "ag", "var"); QualifiedName var_pl=pf.newQualifiedName(VAR_NS, "pl", "var"); QualifiedName var_label=pf.newQualifiedName(VAR_NS, "label", "var"); QualifiedName var_start=pf.newQualifiedName(VAR_NS, "start", "var"); QualifiedName var_end=pf.newQualifiedName(VAR_NS, "end", "var"); public void expander(String in, String inBindings, String out) throws IOException, Throwable { System.err.println("expander ==========================================> " + in); Document doc= new Utility().readDocument(in, pf); Document docBindings= new Utility().readDocument(inBindings,pf); Bindings bindings1=Bindings.fromDocument(docBindings,pf); Bundle bun=(Bundle) doc.getStatementOrBundle().get(0); Groupings grp1=Groupings.fromDocument(doc); System.err.println("Found groupings " + grp1); Bundle bun1=(Bundle) new Expand(pf,addOrderp,false).expand(bun, bindings1, grp1).get(0); Document doc1=pf.newDocument(); doc1.getStatementOrBundle().add(bun1); bun1.setNamespace(Namespace.gatherNamespaces(bun1)); //doc1.setNamespace(bun1.getNamespace()); doc1.setNamespace(new Namespace()); new Utility().writeDocument(doc1, out, pf); //InteropFramework inf=new InteropFramework(); //inf.writeDocument(out, doc1); System.err.println("expander ==========================================> "); } boolean addOrderp=true; public void expander (String in, String out, Bindings bindings1, String outBindings) throws IOException, Throwable { System.err.println("expander ==========================================> " + in); Document doc= new Utility().readDocument(in, pf); Bundle bun=(Bundle) doc.getStatementOrBundle().get(0); Groupings grp1=Groupings.fromDocument(doc); System.err.println("Found groupings " + grp1); Bundle bun1=(Bundle) new Expand(pf,addOrderp,false).expand(bun, bindings1, grp1).get(0); Document doc1=pf.newDocument(); doc1.getStatementOrBundle().add(bun1); bun1.setNamespace(Namespace.gatherNamespaces(bun1)); //doc1.setNamespace(bun1.getNamespace()); doc1.setNamespace(new Namespace()); //System.out.println(bun1.getNamespace()); Namespace.withThreadNamespace(doc1.getNamespace()); new Utility().writeDocument(doc1, out, pf); Document doc2=bindings1.toDocument(); Namespace.withThreadNamespace(doc2.getNamespace()); new Utility().writeDocument(doc2,outBindings,pf); System.err.println("expander ==========================================> "); } public void testExpand1() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av3", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); expander("src/test/resources/template1.provn", "target/expanded1.provn", bindings1, "target/bindings1.provn"); } public void testExpand2() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); expander("src/test/resources/template2.provn", "target/expanded2.provn", bindings1, "target/bindings2.provn"); } public void testExpand3() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av3", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); bindings1.addVariable(var_c, pf.newQualifiedName(EX_NS, "cv1", "ex")); bindings1.addVariable(var_c, pf.newQualifiedName(EX_NS, "cv2", "ex")); expander("src/test/resources/template3.provn", "target/expanded3.provn", bindings1, "target/bindings3.provn"); } public void testExpand20() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av3", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); bindings1.addVariable(var_c, pf.newQualifiedName(EX_NS, "cv1", "ex")); bindings1.addVariable(var_c, pf.newQualifiedName(EX_NS, "cv2", "ex")); List<TypedValue> ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "m22@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc3@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc4@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc5@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc6@example", pf.getName().XSD_STRING)); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc7@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); expander("src/test/resources/template20.provn", "target/expanded20.provn", bindings1, "target/bindings20.provn"); } public void testExpand21() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av3", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv3", "ex")); List<TypedValue> ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me3@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc6@example", pf.getName().XSD_STRING)); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc7@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); expander("src/test/resources/template21.provn", "target/expanded21.provn", bindings1, "target/bindings21.provn"); } public void testExpand22() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av3", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv3", "ex")); List<TypedValue> ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me3@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc6@example", pf.getName().XSD_STRING)); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc7@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); expander("src/test/resources/template22.provn", "target/expanded22.provn", bindings1, "target/bindings22.provn"); } public void testExpand23() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av2", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av3", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv1", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv2", "ex")); bindings1.addVariable(var_b, pf.newQualifiedName(EX_NS, "bv3", "ex")); List<TypedValue> ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me3@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_d, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc1@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc2@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc6@example", pf.getName().XSD_STRING)); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "Luc7@example", pf.getName().XSD_STRING)); bindings1.addAttribute(var_e, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "label1", pf.getName().XSD_STRING)); bindings1.addAttribute(var_label, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "label2", pf.getName().XSD_STRING)); bindings1.addAttribute(var_label, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "label3", pf.getName().XSD_STRING)); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "label3b", pf.getName().XSD_STRING)); bindings1.addAttribute(var_label, ll); expander("src/test/resources/template23.provn", "target/expanded23.provn", bindings1, "target/bindings23.provn"); } public void testExpand25() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "apple", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "orange", "ex")); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "pear", "ex")); List<TypedValue> ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "apples", pf.getName().XSD_STRING)); bindings1.addAttribute(var_b, ll); ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "oranges", pf.getName().XSD_STRING)); bindings1.addAttribute(var_b, ll); boolean threw = false; try { expander("src/test/resources/template25.provn", "target/expanded25.provn", bindings1, "target/bindings25.provn"); } catch (org.openprovenance.prov.template.MissingAttributeValue e) { threw = true; } if (!threw) { fail("Exception not raised."); } ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "pears", pf.getName().XSD_STRING)); bindings1.addAttribute(var_b, ll); expander("src/test/resources/template25.provn", "target/expanded25.provn", bindings1, "target/bindings25.provn"); threw = false; try { expander("src/test/resources/template25.provn", "src/test/resources/bindings25.provn", "target/expanded25.provn"); } catch (org.openprovenance.prov.template.MissingAttributeValue e) { threw = true; } if (!threw) { fail("Exception not raised."); } } public void testExpand10() throws IOException, Throwable { Bindings bindings1=new Bindings(pf); bindings1.addVariable(var_a, pf.newQualifiedName(EX_NS, "av1", "ex")); bindings1.addVariable(var_e, pf.newQualifiedName(EX_NS, "ev1", "ex")); bindings1.addVariable(var_ag, pf.newQualifiedName(EX_NS, "agv1", "ex")); bindings1.addVariable(var_pl, pf.newQualifiedName(EX_NS, "pl1", "ex")); List<TypedValue> ll=new LinkedList<TypedValue>(); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "me1@example", pf.getName().XSD_STRING)); ll.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), "m22@example", pf.getName().XSD_STRING)); List<TypedValue> ll2=new LinkedList<TypedValue>(); ll2.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), pf.newTimeNow(), pf.getName().XSD_DATETIME)); bindings1.addAttribute(var_start, ll2); List<TypedValue> ll3=new LinkedList<TypedValue>(); ll3.add(pf.newOther(pf.newQualifiedName(TMPL_NS, "ignore", "app"), pf.newTimeNow(), pf.getName().XSD_DATETIME)); bindings1.addAttribute(var_end, ll3); expander("src/test/resources/template10.provn", "src/test/resources/bindings10.provn", "target/expanded10.provn"); } public void testExpandQualifiedName() throws IOException, Throwable { expander("src/test/resources/a_template.provn", "src/test/resources/a_binding.provn", "target/a_expanded_template.provn"); } }