فهرست منبع

Updating the activity with ports and adding property to easy endpoint at
first page.

Lucas Albertins 2 سال پیش
والد
کامیت
e9be388ce6

+ 17 - 3
src/main/java/ua/be/wee/controller/PMControllerMVC.java

@@ -1,7 +1,11 @@
 package ua.be.wee.controller;
 
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.ModelAttribute;
@@ -13,11 +17,13 @@ import ua.be.wee.model.EnactmentController;
 import ua.be.wee.model.repository.FusekiWrapper;
 
 @Controller
-@RequestMapping("/wee")
+@RequestMapping("/")
 public class PMControllerMVC {
 
 	@Autowired private EnactmentController controller;
   
+	@Autowired
+	private Environment env;
 
     @Value("${base_url}")
     private String baseUrl;
@@ -27,10 +33,18 @@ public class PMControllerMVC {
         return this.baseUrl;
     }
 
-    
+    @RequestMapping("/")
+    public String index(Model model) throws FileNotFoundException, IOException {
+    	
+		if (!env.getProperty("endpoint").equals("")) {
+			model.addAttribute("savedEndpoint", env.getProperty("endpoint"));
+			model.addAttribute("hasEndpoint", true);
+		}
+        return "index";
+    }
 
     @PostMapping("/pm")
-    public String getPMs(Model model, @RequestParam String endpoint) {
+    public String getPMs(Model model, @RequestParam String endpoint) throws FileNotFoundException, IOException {
     	FusekiWrapper.getInstance().setServiceURI(endpoint);
     	if (FusekiWrapper.getInstance().testEndpoint()) {
     		model.addAttribute("error",false);

+ 8 - 0
src/main/java/ua/be/wee/model/NamedElement.java

@@ -0,0 +1,8 @@
+package ua.be.wee.model;
+
+public interface NamedElement {
+
+	public String getName();
+	
+	public void setName(String name);
+}

+ 53 - 19
src/main/java/ua/be/wee/model/nodes/Activity.java

@@ -3,6 +3,10 @@ package ua.be.wee.model.nodes;
 import java.util.List;
 
 import ua.be.wee.model.artifacts.WorkflowArtifact;
+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;
 
 public class Activity extends Node {
 	
@@ -10,27 +14,15 @@ public class Activity extends Node {
 	
 	private List<WorkflowArtifact> outputs;
 	
-	private List<Node> nextNodes;
+	private List<ControlOutputPort> ctrlOutPorts;
 	
-	private List<Node> previousNodes;
+	private List<ControlInputPort> ctrlInPorts;
 	
-	private String TransformationName;
-
-	public List<Node> getNextNodes() {
-		return nextNodes;
-	}
-
-	public void setNextNodes(List<Node> nextNodes) {
-		this.nextNodes = nextNodes;
-	}
-
-	public List<Node> getPreviousNodes() {
-		return previousNodes;
-	}
-
-	public void setPreviousNodes(List<Node> previousNodes) {
-		this.previousNodes = previousNodes;
-	}
+	private List<DataOutputPort> dataOutPorts;
+	
+	private List<DataInputPort> datalInPorts;
+	
+	private String transformationName;
 
 	public List<WorkflowArtifact> getInputs() {
 		return inputs;
@@ -48,4 +40,46 @@ public class Activity extends Node {
 		this.outputs = outputs;
 	}
 
+	public List<ControlOutputPort> getCtrlOutPorts() {
+		return ctrlOutPorts;
+	}
+
+	public void setCtrlOutPorts(List<ControlOutputPort> ctrlOutPorts) {
+		this.ctrlOutPorts = ctrlOutPorts;
+	}
+
+	public List<ControlInputPort> getCtrlInPorts() {
+		return ctrlInPorts;
+	}
+
+	public void setCtrlInPorts(List<ControlInputPort> ctrlInPorts) {
+		this.ctrlInPorts = ctrlInPorts;
+	}
+
+	public String getTransformationName() {
+		return transformationName;
+	}
+
+	public void setTransformationName(String transformationName) {
+		this.transformationName = transformationName;
+	}
+
+	public List<DataOutputPort> getDataOutPorts() {
+		return dataOutPorts;
+	}
+
+	public void setDataOutPorts(List<DataOutputPort> dataOutPorts) {
+		this.dataOutPorts = dataOutPorts;
+	}
+
+	public List<DataInputPort> getDatalInPorts() {
+		return datalInPorts;
+	}
+
+	public void setDatalInPorts(List<DataInputPort> datalInPorts) {
+		this.datalInPorts = datalInPorts;
+	}
+
+	
+
 }

+ 7 - 5
src/main/java/ua/be/wee/model/nodes/Node.java

@@ -3,14 +3,16 @@ package ua.be.wee.model.nodes;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 
+import ua.be.wee.model.NamedElement;
+
 @Entity
-public abstract class Node {
+public abstract class Node implements NamedElement {
 
 	
-	public static final String ACTIVITY_IRI = "<http://ua.be/sdo2l/vocabulary/formalisms/pm#Activity>";
-	public static final String INITIAL_IRI = "<http://ua.be/sdo2l/vocabulary/formalisms/pm#Initial>";
-	public static final String FINAL_IRI = "<http://ua.be/sdo2l/vocabulary/formalisms/pm#Final>";
-	public static final String FORKJOIN_IRI = "<http://ua.be/sdo2l/vocabulary/formalisms/pm#ForkJoin>";
+	public static final String ACTIVITY_IRI = "http://ua.be/sdo2l/vocabulary/formalisms/pm#Activity";
+	public static final String INITIAL_IRI = "http://ua.be/sdo2l/vocabulary/formalisms/pm#Initial";
+	public static final String FINAL_IRI = "http://ua.be/sdo2l/vocabulary/formalisms/pm#Final";
+	public static final String FORKJOIN_IRI = "http://ua.be/sdo2l/vocabulary/formalisms/pm#ForkJoin";
 		
 	@Id
 	private String iri;

+ 123 - 5
src/main/java/ua/be/wee/model/nodes/NodeRespository.java

@@ -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;
 	}
 
 }

+ 17 - 0
src/main/java/ua/be/wee/model/nodes/ports/ControlInputPort.java

@@ -0,0 +1,17 @@
+package ua.be.wee.model.nodes.ports;
+
+import ua.be.wee.model.nodes.Activity;
+
+public class ControlInputPort extends Port {
+
+	private Activity act;
+
+	public Activity getAct() {
+		return act;
+	}
+
+	public void setAct(Activity act) {
+		this.act = act;
+	}
+	
+}

+ 16 - 0
src/main/java/ua/be/wee/model/nodes/ports/ControlOutputPort.java

@@ -0,0 +1,16 @@
+package ua.be.wee.model.nodes.ports;
+
+import ua.be.wee.model.nodes.Activity;
+
+public class ControlOutputPort extends Port {
+	
+	private Activity act;
+
+	public Activity getAct() {
+		return act;
+	}
+
+	public void setAct(Activity act) {
+		this.act = act;
+	}
+}

+ 15 - 0
src/main/java/ua/be/wee/model/nodes/ports/DataInputPort.java

@@ -0,0 +1,15 @@
+package ua.be.wee.model.nodes.ports;
+
+import ua.be.wee.model.nodes.Activity;
+
+public class DataInputPort extends Port {
+	private Activity act;
+
+	public Activity getAct() {
+		return act;
+	}
+
+	public void setAct(Activity act) {
+		this.act = act;
+	}
+}

+ 15 - 0
src/main/java/ua/be/wee/model/nodes/ports/DataOutputPort.java

@@ -0,0 +1,15 @@
+package ua.be.wee.model.nodes.ports;
+
+import ua.be.wee.model.nodes.Activity;
+
+public class DataOutputPort extends Port {
+	private Activity act;
+
+	public Activity getAct() {
+		return act;
+	}
+
+	public void setAct(Activity act) {
+		this.act = act;
+	}
+}

+ 27 - 0
src/main/java/ua/be/wee/model/nodes/ports/Port.java

@@ -0,0 +1,27 @@
+package ua.be.wee.model.nodes.ports;
+
+import ua.be.wee.model.NamedElement;
+
+public abstract class Port implements NamedElement {
+	
+	private String name;
+	
+	private String iri;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getIri() {
+		return iri;
+	}
+
+	public void setIri(String iri) {
+		this.iri = iri;
+	}
+
+}

+ 3 - 3
src/main/java/ua/be/wee/model/pm/PMRepository.java

@@ -27,7 +27,7 @@ public class PMRepository {
 			QuerySolution soln = results.nextSolution();
 			RDFNode iri = soln.get("?pm");
 			RDFNode name = soln.get("?pmName");
-			pm.setIri("<" + iri.toString() + ">");
+			pm.setIri(iri.toString());
 			pm.setName(name.toString());
 			list.add(pm);
 		}
@@ -41,14 +41,14 @@ public class PMRepository {
 				+ "SELECT ?pm ?pmName WHERE {\n"
 				+ "  ?pm a pm:Model ;\n"
 				+ "  	pm:hasPMName ?pmName ;\n"
-				+ "  	owl:sameAs " + pmiri + " .\n"
+				+ "  	owl:sameAs <" + pmiri + "> .\n"
 				+ "}";
 		ResultSet results = FusekiWrapper.getInstance().execQuery(query);
 		PM pm = new PM();
 		QuerySolution soln = results.nextSolution();
 		RDFNode iri = soln.get("?pm");
 		RDFNode name = soln.get("?pmName");
-		pm.setIri("<" + iri.toString() + ">");
+		pm.setIri(iri.toString());
 		pm.setName(name.toString());
 		return pm;
 	}

+ 2 - 1
src/main/resources/application.properties

@@ -1,3 +1,4 @@
 server.port=8081
-base_url=http://localhost:8081/wee
+base_url=http://localhost:8081/
 spring.application.name=wee
+endpoint=http://localhost:3030/joeri

+ 7 - 2
src/main/resources/templates/index.html

@@ -72,10 +72,15 @@
 <h2 style="color: #2e6c80; text-align: center;">Otherwise, please, indicate the url of your endpoint and let's start enacting your workflow!</h2>
 
 	<table>
-	    <form th:action="@{/wee/pm}" method="post">
+	    <form th:action="@{/pm}" method="post">
 	    <tr >
 	        <td ><h3 style="color: #5e9ca0;">Endpoint:</h3></td>
-	        <td ><input type="text" id="endpointURL" name="endpoint" size="50" /> </td>
+	       
+	       
+	        <td>
+	        <input th:if="${hasEndpoint}" type="text" id="endpointURL" name="endpoint" size="50" th:value="${savedEndpoint}" /> 
+	        <input th:unless="${hasEndpoint}" type="text" id="endpointURL" name="endpoint" size="50" />
+	        </td>
 	    </tr>
 	    <tr><td><input class="button button1" type="submit" value="Next"/> </td></tr>   
 	    </form> 

+ 1 - 1
src/main/resources/templates/pms.html

@@ -36,7 +36,7 @@
 <body>
 
 <table>
-	<form th:action="@{/wee/pm/enact}" method="post">
+	<form th:action="@{/pm/enact}" method="post">
     <tr >
         <td ><h3 style="color: #5e9ca0;">Choose the Process Model to be enacted:</h3></td>
         <td ><select class="form-control" id="dropDownList" name="pmiri" >