|
@@ -8,6 +8,10 @@ import org.apache.jena.query.ResultSet;
|
|
|
import org.apache.jena.rdf.model.RDFNode;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import ua.be.wee.model.nodes.ports.ControlInputPort;
|
|
|
+import ua.be.wee.model.nodes.ports.ControlOutputPort;
|
|
|
+import ua.be.wee.model.nodes.ports.DataInputPort;
|
|
|
+import ua.be.wee.model.nodes.ports.DataOutputPort;
|
|
|
import ua.be.wee.model.pm.PM;
|
|
|
import ua.be.wee.model.repository.FusekiWrapper;
|
|
|
|
|
@@ -24,7 +28,7 @@ public class NodeRespository {
|
|
|
+ "SELECT ?node ?nodetype WHERE {\n"
|
|
|
+ " ?pm a pm:Model ;\n"
|
|
|
+ " pm:hasPMName ?pmName ;\n"
|
|
|
- + " owl:sameAs " + pm.getIri() + " ;\n"
|
|
|
+ + " owl:sameAs <" + pm.getIri() + "> ;\n"
|
|
|
+ " ob:hasObject ?node .\n"
|
|
|
+ " ?node a ?nodetype .\n"
|
|
|
+ " FILTER (?nodetype in (pm:Initial, pm:Activity, pm:Final, pm:Join, pm:Fork)) . \n"
|
|
@@ -45,7 +49,7 @@ public class NodeRespository {
|
|
|
|
|
|
private Node createNode(RDFNode iri, RDFNode type) {
|
|
|
Node node = null;
|
|
|
- switch ("<"+ type.toString()+ ">") {
|
|
|
+ switch (type.toString()) {
|
|
|
case Node.ACTIVITY_IRI:
|
|
|
node = createActivity(iri.toString());
|
|
|
break;
|
|
@@ -60,12 +64,126 @@ public class NodeRespository {
|
|
|
node = new JoinNode();
|
|
|
break;
|
|
|
}
|
|
|
- node.setIri("<"+ iri.toString()+">");
|
|
|
+ node.setIri(iri.toString());
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
- private Node createActivity(String string2) {
|
|
|
- return new Activity();
|
|
|
+ private Node createActivity(String iri) {
|
|
|
+ Activity act = new Activity();
|
|
|
+ String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
|
+ + "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ + "SELECT ?act ?name WHERE {\n"
|
|
|
+ + " ?act owl:sameAs <" + iri + ">;\n"
|
|
|
+ + " pm:hasName ?name ; \n"
|
|
|
+ + "}";
|
|
|
+ ResultSet results = FusekiWrapper.getInstance().execQuery(query);
|
|
|
+ QuerySolution soln = results.nextSolution();
|
|
|
+ RDFNode name = soln.get("?name");
|
|
|
+ act.setIri(iri);
|
|
|
+ act.setName(name.toString());
|
|
|
+
|
|
|
+ act.setCtrlInPorts(getCtrlInPorts(act));
|
|
|
+ act.setCtrlOutPorts(getCtrlOutPorts(act));
|
|
|
+ act.setDatalInPorts(getDataInPorts(act));
|
|
|
+ act.setDataOutPorts(getDataOutPorts(act));
|
|
|
+
|
|
|
+ return act;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<DataOutputPort> getDataOutPorts(Activity act) {
|
|
|
+ List<DataOutputPort> list = new ArrayList<DataOutputPort>();
|
|
|
+ String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
|
+ + "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ + "SELECT ?port ?pname WHERE {\n"
|
|
|
+ + " ?act owl:sameAs <" + act.getIri() + ">;\n"
|
|
|
+ + " pm:hasPort ?port .\n"
|
|
|
+ + " ?port a pm:DataOutputPort .\n"
|
|
|
+ + " ?port pm:hasName ?pname .\n"
|
|
|
+ + "}";
|
|
|
+ ResultSet results = FusekiWrapper.getInstance().execQuery(query);
|
|
|
+ while (results.hasNext()) {
|
|
|
+ QuerySolution soln = results.nextSolution();
|
|
|
+ RDFNode iri = soln.get("?port");
|
|
|
+ RDFNode name = soln.get("?pname");
|
|
|
+ DataOutputPort cout = new DataOutputPort();
|
|
|
+ cout.setIri(iri.toString());
|
|
|
+ cout.setName(name.toString());
|
|
|
+ cout.setAct(act);
|
|
|
+ list.add(cout);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<DataInputPort> getDataInPorts(Activity act) {
|
|
|
+ List<DataInputPort> list = new ArrayList<DataInputPort>();
|
|
|
+ String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
|
+ + "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ + "SELECT ?port ?pname WHERE {\n"
|
|
|
+ + " ?act owl:sameAs <" + act.getIri() + ">;\n"
|
|
|
+ + " pm:hasPort ?port .\n"
|
|
|
+ + " ?port a pm:DataInputPort .\n"
|
|
|
+ + " ?port pm:hasName ?pname .\n"
|
|
|
+ + "}";
|
|
|
+ ResultSet results = FusekiWrapper.getInstance().execQuery(query);
|
|
|
+ while (results.hasNext()) {
|
|
|
+ QuerySolution soln = results.nextSolution();
|
|
|
+ RDFNode iri = soln.get("?port");
|
|
|
+ RDFNode name = soln.get("?pname");
|
|
|
+ DataInputPort cout = new DataInputPort();
|
|
|
+ cout.setIri(iri.toString());
|
|
|
+ cout.setName(name.toString());
|
|
|
+ cout.setAct(act);
|
|
|
+ list.add(cout);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ControlOutputPort> getCtrlOutPorts(Activity act) {
|
|
|
+ List<ControlOutputPort> list = new ArrayList<ControlOutputPort>();
|
|
|
+ String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
|
+ + "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ + "SELECT ?port ?pname WHERE {\n"
|
|
|
+ + " ?act owl:sameAs <" + act.getIri() + ">;\n"
|
|
|
+ + " pm:hasPort ?port .\n"
|
|
|
+ + " ?port a pm:CtrlOutputPort .\n"
|
|
|
+ + " ?port pm:hasName ?pname .\n"
|
|
|
+ + "}";
|
|
|
+ ResultSet results = FusekiWrapper.getInstance().execQuery(query);
|
|
|
+ while (results.hasNext()) {
|
|
|
+ QuerySolution soln = results.nextSolution();
|
|
|
+ RDFNode iri = soln.get("?port");
|
|
|
+ RDFNode name = soln.get("?pname");
|
|
|
+ ControlOutputPort cout = new ControlOutputPort();
|
|
|
+ cout.setIri(iri.toString());
|
|
|
+ cout.setName(name.toString());
|
|
|
+ cout.setAct(act);
|
|
|
+ list.add(cout);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ControlInputPort> getCtrlInPorts(Activity act) {
|
|
|
+ List<ControlInputPort> list = new ArrayList<ControlInputPort>();
|
|
|
+ String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
|
+ + "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ + "SELECT ?port ?pname WHERE {\n"
|
|
|
+ + " ?act owl:sameAs <" + act.getIri() + ">;\n"
|
|
|
+ + " pm:hasPort ?port .\n"
|
|
|
+ + " ?port a pm:CtrlInputPort .\n"
|
|
|
+ + " ?port pm:hasName ?pname .\n"
|
|
|
+ + "}";
|
|
|
+ ResultSet results = FusekiWrapper.getInstance().execQuery(query);
|
|
|
+ while (results.hasNext()) {
|
|
|
+ QuerySolution soln = results.nextSolution();
|
|
|
+ RDFNode iri = soln.get("?port");
|
|
|
+ RDFNode name = soln.get("?pname");
|
|
|
+ ControlInputPort cout = new ControlInputPort();
|
|
|
+ cout.setIri(iri.toString());
|
|
|
+ cout.setName(name.toString());
|
|
|
+ cout.setAct(act);
|
|
|
+ list.add(cout);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
}
|