Quellcode durchsuchen

Adding support to allow multiple input ports and inserting the correct
port in the rdf triple.

Lucas Albertins vor 2 Jahren
Ursprung
Commit
dfb2ed6891

+ 60 - 43
src/main/java/ua/be/wee/controller/EnactmentControllerMVC.java

@@ -4,7 +4,6 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.sql.Timestamp;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -28,6 +27,7 @@ import ua.be.wee.model.nodes.FinalNode;
 import ua.be.wee.model.nodes.Node;
 import ua.be.wee.model.nodes.ports.ControlInputPort;
 import ua.be.wee.model.nodes.ports.ControlOutputPort;
+import ua.be.wee.model.nodes.ports.Port;
 import ua.be.wee.model.pm.PM;
 import ua.be.wee.model.pt.EndActivityEvent;
 import ua.be.wee.model.pt.Event;
@@ -105,45 +105,22 @@ public class EnactmentControllerMVC {
 		}
     }
 
-	private List<PMTrigger> findElements(PM pm, List<Pair<String, String>> iris) {
-		List<PMTrigger> acts = new ArrayList<PMTrigger>();
-		for (Pair<String,String> pair : iris) {
-			PMTrigger tr = new PMTrigger();
-			if (pair.getSnd() != null) {
-				List<ControlInputPort> ctrlInPorts = ((Activity)pm.getNode(pair.getSnd())).getCtrlInPorts();
-				ControlInputPort port = null;
-				for (ControlInputPort ctr : ctrlInPorts) {
-					if (ctr.getIri().equals(pair.getFst())) {
-						port = ctr;
-						break;
-					}
-				}
-				tr.setPort(port);
-
-			} else {
-				tr.setNode((FinalNode)pm.getNode(pair.getFst()));
-			}
-			acts.add(tr);
-		}
-		return acts;
-	}
-
     @PostMapping("/startAct")
-    public String startActivity(Model model, @RequestParam String activity, HttpServletRequest request) throws Exception {
+    public String startActivity(Model model, @RequestParam String iri, HttpServletRequest request) throws Exception {
     	PM pm = (PM)request.getSession().getAttribute("pm");
     	PT pt = (PT)request.getSession().getAttribute("trace");
     	List<PMTrigger> acts = (List<PMTrigger>) request.getSession().getAttribute("acts");
     	List<Node> endacts = (List<Node>) request.getSession().getAttribute("endacts");
-    	Node node = pm.getNode(activity);
+    	PMTrigger element = findPMTrigger(acts,iri);
     	Object arts = request.getSession().getAttribute("arts");
-    	if (node instanceof Activity) {
-
-        	controller.addStartEvent(pt,(Activity)node,((List<TraceArtifact>)arts));
-        	removeElement(acts,node);
-        	endacts.add(node);
+    	if (element.getPort() != null) {
+    		ControlInputPort port = (ControlInputPort)element.getPort();
+        	controller.addStartEvent(pt,port, port.getActivity(),((List<TraceArtifact>)arts));
+        	removeElement(acts,iri);
+        	endacts.add(port.getActivity());
         	request.getSession().removeAttribute("arts");
         	return "enact";
-		} else if (node instanceof FinalNode) {
+		} else if (element.getNode() != null) {
 			String previous = (String)request.getSession().getAttribute("previous");
 			Event endTraceEvent = controller.addEndTraceEvent(pt.getIri(), previous, pm.getIri());
 			pt.addEvent(endTraceEvent);
@@ -156,15 +133,7 @@ public class EnactmentControllerMVC {
     	
     }
     
-    private void removeElement(List<PMTrigger> acts, Node node) {
-		for (PMTrigger pmTrigger : acts) {
-			if (pmTrigger.getIri().equals(node.getIri())) {
-				acts.remove(pmTrigger);
-				break;
-			}
-		}
-
-	}
+    
 
     @PostMapping("/endAct")
     public String endActivityWithArtifacts(Model model, @RequestParam String port, @RequestParam String activity, HttpServletRequest request) throws Exception {
@@ -235,9 +204,11 @@ public class EnactmentControllerMVC {
     public String selectActivity(Model model, @RequestParam String iri, HttpServletRequest request) throws Exception {
     	PM pm = (PM)request.getSession().getAttribute("pm");
     	PT pt = (PT)request.getSession().getAttribute("trace");
+    	List<PMTrigger> acts = (List<PMTrigger>) request.getSession().getAttribute("acts");
     	if (!iri.equals("1")) {
-        	if (pm.getNode(iri) instanceof Activity) {
-        		Activity act = (Activity)pm.getNode(iri);
+    		PMTrigger element = findPMTrigger(acts, iri);
+        	if (element.getPort() != null) {
+        		Activity act = (Activity)element.getPort().getActivity();
         		List<Artifact> inputs = act.getInputs();
         		List<TraceArtifact> arts = new ArrayList<TraceArtifact>();
         		for (Artifact artifact : inputs) {
@@ -270,6 +241,52 @@ public class EnactmentControllerMVC {
     	model.addAttribute("current", iri);
     	return "enact";
     }
+    
+
+    // Helper methods
+    
+    
+    private List<PMTrigger> findElements(PM pm, List<Pair<String, String>> iris) {
+		List<PMTrigger> acts = new ArrayList<PMTrigger>();
+		for (Pair<String,String> pair : iris) {
+			PMTrigger tr = new PMTrigger();
+			if (pair.getSnd() != null) {
+				List<ControlInputPort> ctrlInPorts = ((Activity)pm.getNode(pair.getSnd())).getCtrlInPorts();
+				ControlInputPort port = null;
+				for (ControlInputPort ctr : ctrlInPorts) {
+					if (ctr.getIri().equals(pair.getFst())) {
+						port = ctr;
+						break;
+					}
+				}
+				tr.setPort(port);
+
+			} else {
+				tr.setNode((FinalNode)pm.getNode(pair.getFst()));
+			}
+			acts.add(tr);
+		}
+		return acts;
+	}
+    
+    private PMTrigger findPMTrigger(List<PMTrigger> acts, String iri) {
+		for (PMTrigger pmTrigger : acts) {
+			if (pmTrigger.getIri().equals(iri)) {
+				return pmTrigger;
+			}
+		}
+		return null;
+	}
+
+	private void removeElement(List<PMTrigger> acts, String iri) {
+		for (PMTrigger pmTrigger : acts) {
+			if (pmTrigger.getIri().equals(iri)) {
+				acts.remove(pmTrigger);
+				break;
+			}
+		}
+
+	}
 
 	
 }

+ 1 - 1
src/main/java/ua/be/wee/controller/PMTrigger.java

@@ -35,7 +35,7 @@ public class PMTrigger {
 	
 	public String getIri() {
 		if (port != null) {
-			return port.getActivity().getIri();
+			return port.getIri();
 		} else {
 			return node.getIri();
 		}

+ 3 - 2
src/main/java/ua/be/wee/model/EnactmentController.java

@@ -8,6 +8,7 @@ import org.springframework.stereotype.Component;
 import ua.be.wee.model.nodes.Activity;
 import ua.be.wee.model.nodes.Artifact;
 import ua.be.wee.model.nodes.NodeRespository;
+import ua.be.wee.model.nodes.ports.ControlInputPort;
 import ua.be.wee.model.nodes.ports.ControlOutputPort;
 import ua.be.wee.model.pm.PM;
 import ua.be.wee.model.pm.PMRepository;
@@ -47,8 +48,8 @@ public class EnactmentController {
 		return traceRepo.createTrace(pm);
 	}
 
-	public void addStartEvent(PT pt, Activity act, List<TraceArtifact> arts) throws Exception {
-		traceRepo.createStartEvent(pt,act,arts);
+	public void addStartEvent(PT pt, ControlInputPort port, Activity act, List<TraceArtifact> arts) throws Exception {
+		traceRepo.createStartEvent(pt,port,act,arts);
 	}
 
 	public void addEndEvent(PT pt, List<TraceArtifact> arts, ControlOutputPort p) throws Exception {

+ 3 - 2
src/main/java/ua/be/wee/model/pt/PTRepository.java

@@ -11,6 +11,7 @@ import org.apache.jena.rdf.model.RDFNode;
 import org.springframework.stereotype.Component;
 
 import ua.be.wee.model.nodes.Activity;
+import ua.be.wee.model.nodes.ports.ControlInputPort;
 import ua.be.wee.model.nodes.ports.ControlOutputPort;
 import ua.be.wee.model.pm.PM;
 import ua.be.wee.model.repository.FusekiWrapper;
@@ -57,14 +58,14 @@ public class PTRepository {
 		return index;
 	}
 
-	public void createStartEvent(PT pt, Activity act, List<TraceArtifact> arts) throws Exception {
+	public void createStartEvent(PT pt, ControlInputPort port, Activity act, List<TraceArtifact> arts) throws Exception {
 		int index = pt.getLastEvent() == null ? 0 : (Integer.parseInt(""+pt.getLastEvent().getIri().charAt(pt.getLastEvent().getIri().length()-1))+1); 
 
 		String iri = pt.getIri().replace('#', '/') + "#" + "start_activity" + index;
 		String endiri = pt.getIri().replace('#', '/') + "#" + "end_activity" + index;
 		
 		String preiri = pt.getLastEvent() != null ? pt.getLastEvent().getIri() : pt.getIri();
-		String portiri = act.getCtrlInPorts().get(0).getIri(); //TODO:  change it later to consider multiple input ports
+		String portiri = port.getIri();
 		String query = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
 				+ "PREFIX tr: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
 				+ "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"

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

@@ -23,7 +23,7 @@
           <div class="field has-addons">
             <div class="control is-expanded">
               <div class="select is-fullwidth">
-                <select id="activities" name="activity" th:onchange="'window.location.href = \'' + @{/inarts} + '?iri=\' + encodeURIComponent(this.value) ' ">
+                <select id="activities" name="iri" th:onchange="'window.location.href = \'' + @{/inarts} + '?iri=\' + encodeURIComponent(this.value) ' ">
                   <option th:value="1">Select Activity</option>
                   <option th:each="act: ${session.acts}" th:selected="${act.iri == current}" th:value="${act.iri}" th:text="${act.name}"></option>
                 </select>