Use Jena-generated ontology classes
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/974a9517 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/974a9517 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/974a9517 Branch: refs/heads/master Commit: 974a95171dd5063524e99e6809dad6015ab219ee Parents: 685fe2c Author: Stian Soiland-Reyes <[email protected]> Authored: Wed Feb 10 12:07:23 2016 +0000 Committer: Stian Soiland-Reyes <[email protected]> Committed: Wed Feb 10 12:07:23 2016 +0000 ---------------------------------------------------------------------- .../taverna/scufl2/wfdesc/ROEvoSerializer.java | 9 +- .../taverna/scufl2/wfdesc/WfdescSerialiser.java | 128 +++++++++---------- 2 files changed, 62 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/974a9517/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ROEvoSerializer.java ---------------------------------------------------------------------- diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ROEvoSerializer.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ROEvoSerializer.java index 0ed58fe..7599599 100644 --- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ROEvoSerializer.java +++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/ROEvoSerializer.java @@ -29,11 +29,10 @@ import org.apache.taverna.scufl2.api.annotation.Revision; import org.apache.taverna.scufl2.api.core.Workflow; import org.apache.taverna.scufl2.api.io.WriterException; import org.apache.taverna.scufl2.wfdesc.ontologies.Prov_o; - -import com.hp.hpl.jena.ontology.Individual; -import com.hp.hpl.jena.ontology.OntClass; -import com.hp.hpl.jena.ontology.OntModel; -import com.hp.hpl.jena.rdf.model.ModelFactory; +import org.apache.jena.ontology.Individual; +import org.apache.jena.ontology.OntClass; +import org.apache.jena.ontology.OntModel; +import org.apache.jena.rdf.model.ModelFactory; public class ROEvoSerializer { http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/974a9517/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/WfdescSerialiser.java ---------------------------------------------------------------------- diff --git a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/WfdescSerialiser.java b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/WfdescSerialiser.java index ee541ff..94bd5c3 100644 --- a/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/WfdescSerialiser.java +++ b/taverna-scufl2-wfdesc/src/main/java/org/apache/taverna/scufl2/wfdesc/WfdescSerialiser.java @@ -34,6 +34,12 @@ import java.util.logging.Logger; import javax.xml.namespace.QName; +import org.apache.jena.ontology.Individual; +import org.apache.jena.ontology.OntClass; +import org.apache.jena.ontology.OntModel; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.vocabulary.OWL; +import org.apache.jena.vocabulary.RDFS; import org.apache.taverna.scufl2.api.activity.Activity; import org.apache.taverna.scufl2.api.annotation.Annotation; import org.apache.taverna.scufl2.api.common.Child; @@ -54,27 +60,9 @@ import org.apache.taverna.scufl2.api.port.WorkflowPort; import org.apache.taverna.scufl2.api.profiles.ProcessorBinding; import org.apache.taverna.scufl2.api.profiles.ProcessorPortBinding; import org.apache.taverna.scufl2.api.profiles.Profile; -import org.openrdf.OpenRDFException; -import org.openrdf.concepts.rdfs.Resource; -import org.openrdf.elmo.ElmoModule; -import org.openrdf.elmo.sesame.SesameManager; -import org.openrdf.elmo.sesame.SesameManagerFactory; -import org.openrdf.query.parser.QueryParserRegistry; -import org.openrdf.query.parser.sparql.SPARQLParserFactory; -import org.openrdf.repository.Repository; -import org.openrdf.repository.contextaware.ContextAwareConnection; -import org.openrdf.rio.RDFFormat; -import org.openrdf.rio.helpers.OrganizedRDFWriter; -import org.purl.wf4ever.roterms.RotermsResource; -import org.purl.wf4ever.wf4ever.BeanshellScript; -import org.purl.wf4ever.wf4ever.CommandLineTool; -import org.purl.wf4ever.wf4ever.RESTService; -import org.purl.wf4ever.wf4ever.RScript; -import org.purl.wf4ever.wf4ever.SOAPService; -import org.purl.wf4ever.wfdesc.Input; -import org.purl.wf4ever.wfdesc.Output; -import org.purl.wf4ever.wfdesc.Process; -import org.w3.prov.Entity; +import org.apache.taverna.scufl2.wfdesc.ontologies.Roterms; +import org.apache.taverna.scufl2.wfdesc.ontologies.Wf4ever; +import org.apache.taverna.scufl2.wfdesc.ontologies.Wfdesc; import com.fasterxml.jackson.databind.JsonNode; @@ -113,8 +101,10 @@ public class WfdescSerialiser { } protected void save(final WorkflowBundle bundle) { - bundle.accept(new VisitorWithPath() { + final OntModel model = ModelFactory.createOntologyModel(); + bundle.accept(new VisitorWithPath() { Scufl2Tools scufl2Tools = new Scufl2Tools(); + public boolean visit() { WorkflowBean node = getCurrentNode(); // System.out.println(node); @@ -124,34 +114,37 @@ public class WfdescSerialiser { // @SuppressWarnings("rawtypes") if (node instanceof org.apache.taverna.scufl2.api.core.Workflow) { - entityForBean(node, org.purl.wf4ever.wfdesc.Workflow.class); + entityForBean(node, Wfdesc.Workflow); } else if (node instanceof Processor) { Processor processor = (Processor)node; - Process process = entityForBean(processor, Process.class); - entityForBean(processor.getParent(), org.purl.wf4ever.wfdesc.Workflow.class).getWfHasSubProcess().add(process); + Individual process = entityForBean(processor, Wfdesc.Process); + Individual wf = entityForBean(processor.getParent(), Wfdesc.Workflow); + wf.addProperty(Wfdesc.hasSubProcess, process); } else if (node instanceof InputPort) { WorkflowBean parent = ((Child) node).getParent(); - Input input = entityForBean(node, Input.class); - Process process = entityForBean(parent, Process.class); - process.getWfHasInput().add(input); + Individual input = entityForBean(node, Wfdesc.Input); + Individual process = entityForBean(parent, Wfdesc.Process); + process.addProperty(Wfdesc.hasInput, input); + } else if (node instanceof OutputPort) { WorkflowBean parent = ((Child) node).getParent(); - Output output = entityForBean(node, Output.class); - Process process = entityForBean(parent, Process.class); - process.getWfHasOutput().add(output); + Individual output = entityForBean(node, Wfdesc.Output); + Individual process = entityForBean(parent, Wfdesc.Process); + process.addProperty(Wfdesc.hasOutput, output); } else if (node instanceof DataLink) { WorkflowBean parent = ((Child) node).getParent(); DataLink link = (DataLink) node; - org.purl.wf4ever.wfdesc.DataLink dl = entityForBean(link, - org.purl.wf4ever.wfdesc.DataLink.class); - Output source = entityForBean(link.getReceivesFrom(), - Output.class); - dl.getWfHasSource().add(source); - Input sink = entityForBean(link.getSendsTo(), Input.class); - dl.getWfHasSink().add(sink); - entityForBean(parent, - org.purl.wf4ever.wfdesc.Workflow.class) - .getWfHasDataLink().add(dl); + Individual dl = entityForBean(link, + Wfdesc.DataLink); + + Individual source = entityForBean(link.getReceivesFrom(), + Wfdesc.Output); + dl.addProperty(Wfdesc.hasSource, source); + + Individual sink = entityForBean(link.getSendsTo(), Wfdesc.Input); + dl.addProperty(Wfdesc.hasSink, sink); + Individual wf = entityForBean(parent, Wfdesc.Workflow); + wf.addProperty(Wfdesc.hasDataLink, dl); } else if (node instanceof Profile) { // So that we can get at the ProcessorBinding - buy only if it is the main Profile return node == bundle.getMainProfile(); @@ -159,7 +152,7 @@ public class WfdescSerialiser { ProcessorBinding b = (ProcessorBinding) node; Activity a = b.getBoundActivity(); Processor boundProcessor = b.getBoundProcessor(); - Process process = entityForBean(boundProcessor, Process.class); + Individual process = entityForBean(boundProcessor, Wfdesc.Process); // Note: We don't describe the activity and processor binding in wfdesc. Instead we // assign additional types and attributes to the parent processor @@ -169,19 +162,18 @@ public class WfdescSerialiser { Configuration c = scufl2Tools.configurationFor(a, b.getParent()); JsonNode json = c.getJson(); if (type.equals(BEANSHELL)) { - BeanshellScript script = getSesameManager().designateEntity(process, BeanshellScript.class); + process.addRDFType(Wf4ever.BeanshellScript); String s = json.get("script").asText(); - script.getWfScript().add(s); - + process.addProperty(Wf4ever.script, s); JsonNode localDep = json.get("localDependency"); if (localDep != null && localDep.isArray()) { for (int i=0; i<localDep.size(); i++) { String depStr = localDep.get(i).asText(); - RotermsResource res = getSesameManager().designateEntity(script, RotermsResource.class); - RotermsResource dep = getSesameManager().create(RotermsResource.class); - dep.getWfLabel().add(depStr); - dep.getWfComment().add("JAR dependency"); - res.getWfRequiresSoftware().add(dep); + // FIXME: Better class for dependency? + Individual dep = model.createIndividual(OWL.Thing); + dep.addLabel(depStr, null); + dep.addComment("JAR dependency", "en"); + process.addProperty(Roterms.requiresSoftware, dep); // Somehow this gets the whole thing to fall out of the graph! // QName depQ = new QName("http://google.com/", ""+ UUID.randomUUID()); // sesameManager.rename(dep, depQ); @@ -189,22 +181,21 @@ public class WfdescSerialiser { } } } - if (type.equals(RSHELL)) { - RScript script = getSesameManager().designateEntity(process, RScript.class); - String s = json.get("script").asText(); - script.getWfScript().add(s); + if (type.equals(RSHELL)) { + process.addRDFType(Wf4ever.RScript); + String s = json.get("script").asText(); + process.addProperty(Wf4ever.script, s); } if (type.equals(WSDL)) { - SOAPService soap = getSesameManager().designateEntity(process, SOAPService.class); + process.addRDFType(Wf4ever.SOAPService); JsonNode operation = json.get("operation"); URI wsdl = URI.create(operation.get("wsdl").asText()); - soap.getWfWsdlURI().add(wsdl); - soap.getWfWsdlOperationName().add(operation.get("name").asText()); - soap.getWfRootURI().add(wsdl.resolve("/")); - + process.addProperty(Wf4ever.wsdlURI, wsdl.toASCIIString()); + process.addProperty(Wf4ever.wsdlOperationName, operation.get("name").asText()); + process.addProperty(Wf4ever.rootURI, wsdl.resolve("/").toASCIIString()); } if (type.equals(REST)) { - RESTService rest = getSesameManager().designateEntity(process, RESTService.class); + process.addRDFType(Wf4ever.RESTService); // System.out.println(json); JsonNode request = json.get("request"); String absoluteURITemplate = request.get("absoluteURITemplate").asText(); @@ -213,7 +204,7 @@ public class WfdescSerialiser { // TODO: Detect {} try { URI root = new URI(uriTemplate).resolve("/"); - rest.getWfRootURI().add(root); + process.addProperty(Wf4ever.rootURI, root.toASCIIString()); } catch (URISyntaxException e) { logger.warning("Potentially invalid URI template: " + absoluteURITemplate); // Uncomment to temporarily break TestInvalidURITemplate: @@ -221,12 +212,12 @@ public class WfdescSerialiser { } } if (type.equals(TOOL)) { - CommandLineTool cmd = getSesameManager().designateEntity(process, CommandLineTool.class); + process.addRDFType(Wf4ever.CommandLineTool); JsonNode desc = json.get("toolDescription"); //System.out.println(json); JsonNode command = desc.get("command"); if (command != null) { - cmd.getWfCommand().add(command.asText()); + process.addProperty(Wf4ever.command, command.asText()); } } if (type.equals(NESTED_WORKFLOW)) { @@ -234,7 +225,7 @@ public class WfdescSerialiser { // The parent process is a specialization of the nested workflow // (because the nested workflow could exist as several processors) specializationOf(boundProcessor, nestedWf); - getSesameManager().designateEntity(process, org.purl.wf4ever.wfdesc.Workflow.class); + process.addRDFType(Wfdesc.Workflow); // Just like the Processor specializes the nested workflow, the // ProcessorPorts specialize the WorkflowPort @@ -295,8 +286,8 @@ public class WfdescSerialiser { specialEnt.getWfSpecializationOf().add(generalEnt); } - private <T> T entityForBean(WorkflowBean bean, Class<T> type) { - return getSesameManager().create(uriForBean(bean), type); + private Individual entityForBean(WorkflowBean bean, OntClass type) { + return model.createIndividual(uriForBean(bean), type); } // @Override @@ -334,6 +325,7 @@ public class WfdescSerialiser { throw new WriterException( "wfdesc format requires a main workflow"); } + ContextAwareConnection connection = getSesameManager().getConnection(); try { @@ -373,10 +365,6 @@ public class WfdescSerialiser { this.scufl2Tools = scufl2Tools; } - public void setSesameManager(SesameManager sesameManager) { - this.sesameManager = sesameManager; - } - public void setUriTools(URITools uriTools) { this.uriTools = uriTools; }
