|
@@ -4,6 +4,7 @@ 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;
|
|
@@ -25,6 +26,7 @@ import ua.be.wee.model.EnactmentController;
|
|
|
import ua.be.wee.model.nodes.Activity;
|
|
|
import ua.be.wee.model.nodes.Artifact;
|
|
|
import ua.be.wee.model.nodes.FinalNode;
|
|
|
+import ua.be.wee.model.nodes.ForkJoinNode;
|
|
|
import ua.be.wee.model.nodes.Node;
|
|
|
import ua.be.wee.model.nodes.ports.ControlInputPort;
|
|
|
import ua.be.wee.model.nodes.ports.ControlOutputPort;
|
|
@@ -44,13 +46,13 @@ import ua.be.wee.service.FileStorageService;
|
|
|
public class EnactmentControllerMVC {
|
|
|
|
|
|
@Autowired private EnactmentController controller;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
private PTController ptController;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
private Environment env;
|
|
|
-
|
|
|
+
|
|
|
@Autowired
|
|
|
FileStorageService storageService;
|
|
|
|
|
@@ -87,7 +89,7 @@ public class EnactmentControllerMVC {
|
|
|
return "index";
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@RequestMapping("/gettraces")
|
|
|
public String getTraces(Model model, @RequestParam String iri, HttpServletRequest request) throws Exception {
|
|
|
List<StartTraceEvent> activeTraces = ptController.getActiveTraces(iri);
|
|
@@ -101,8 +103,8 @@ public class EnactmentControllerMVC {
|
|
|
model.addAttribute("current", iri);
|
|
|
return "pms";
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
@RequestMapping(value="/enactpm", method=RequestMethod.POST, params="action=new")
|
|
|
public String getPMtoEnact(Model model, @RequestParam String pmiri, HttpServletRequest request) throws Exception {
|
|
|
if ((pmiri.equals("select PM"))) {
|
|
@@ -112,31 +114,31 @@ public class EnactmentControllerMVC {
|
|
|
model.addAttribute("current", "1");
|
|
|
return "pms";
|
|
|
} else {
|
|
|
- PM pm = controller.getPM(pmiri);
|
|
|
+ PM pm = controller.getPM(pmiri);
|
|
|
PT trace = controller.createTrace(pm);
|
|
|
- List<Pair<String,String>> iris = controller.findNextNodes(pm.getInitial().getIri());
|
|
|
+ List<Pair<String,String>> iris = controller.findNextNodes(pm.getInitial().getIri(), trace.getIri());
|
|
|
List<PMTrigger> acts = findElements(pm, iris);
|
|
|
model.addAttribute("error", false);
|
|
|
request.getSession().setAttribute("pm", pm);
|
|
|
request.getSession().setAttribute("trace", trace);
|
|
|
request.getSession().setAttribute("acts",acts);
|
|
|
- request.getSession().setAttribute("endacts",new ArrayList<Node>());
|
|
|
+ request.getSession().setAttribute("endacts",new ArrayList<Node>()); // TODO Is this a typo?
|
|
|
model.addAttribute("arts", null);
|
|
|
model.addAttribute("current", "1");
|
|
|
return "enact";
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@RequestMapping(value="/enactpm", method=RequestMethod.POST, params="action=continue")
|
|
|
public String continueEnact(Model model, @RequestParam String pmiri, @RequestParam String contTrace, HttpServletRequest request) throws Exception {
|
|
|
- if ((pmiri.equals("select PM")) || contTrace != null && contTrace.equals("Select Trace")) {
|
|
|
- model.addAttribute("error", true);
|
|
|
+ if ((pmiri.equals("select PM")) || contTrace != null && contTrace.equals("Select Trace")) {
|
|
|
+ model.addAttribute("error", true);
|
|
|
model.addAttribute("pms", controller.getAllPMs());
|
|
|
model.addAttribute("traces",null);
|
|
|
model.addAttribute("current", "1");
|
|
|
return "pms";
|
|
|
} else {
|
|
|
- PM pm = controller.getPM(pmiri);
|
|
|
+ PM pm = controller.getPM(pmiri);
|
|
|
List<Event> events = ptController.getEvents(contTrace);
|
|
|
PT trace = new PT();
|
|
|
trace.setEvents(events);
|
|
@@ -144,22 +146,19 @@ public class EnactmentControllerMVC {
|
|
|
trace.setPmEnacted(pm);
|
|
|
List <Node> endActs = new ArrayList<Node>();
|
|
|
if (events.size() == 1) {
|
|
|
- List<Pair<String,String>> iris = controller.findNextNodes(pm.getInitial().getIri());
|
|
|
+ List<Pair<String,String>> iris = controller.findNextNodes(pm.getInitial().getIri(), trace.getIri());
|
|
|
List<PMTrigger> acts = findElements(pm, iris);
|
|
|
request.getSession().setAttribute("acts",acts);
|
|
|
-
|
|
|
} else {
|
|
|
endActs = findEndActs(events);
|
|
|
- List<PMTrigger> acts = new ArrayList<PMTrigger>();
|
|
|
+ List<PMTrigger> acts = findStartActs(trace);
|
|
|
if (events.get(events.size()-1) instanceof EndActivityEvent) {
|
|
|
EndActivityEvent last = (EndActivityEvent)events.get(events.size()-1);
|
|
|
- List<Pair<String,String>> iris = controller.findNextNodes(last.getRelatesTo().getIri());
|
|
|
- acts = findElements(pm, iris);
|
|
|
+ List<Pair<String,String>> iris = controller.findNextNodes(last.getRelatesTo().getIri(), trace.getIri());
|
|
|
+ acts.addAll(findElements(pm, iris));
|
|
|
}
|
|
|
-
|
|
|
request.getSession().setAttribute("acts",acts);
|
|
|
-
|
|
|
- }
|
|
|
+ }
|
|
|
model.addAttribute("error", false);
|
|
|
request.getSession().setAttribute("pm", pm);
|
|
|
request.getSession().setAttribute("trace", trace);
|
|
@@ -169,7 +168,78 @@ public class EnactmentControllerMVC {
|
|
|
return "enact";
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ private List<PMTrigger> findStartActs(PT trace) throws Exception {
|
|
|
+ PM pmEnacted = trace.getPmEnacted();
|
|
|
+ List<Node> nodes = pmEnacted.getNodes();
|
|
|
+ List<PMTrigger> result = new ArrayList<PMTrigger>();
|
|
|
+ for (Node node : nodes) {
|
|
|
+ if (node instanceof ForkJoinNode) {
|
|
|
+ ForkJoinNode fj = ((ForkJoinNode)node);
|
|
|
+ if (fj.getNextNodes().size() > 1) {
|
|
|
+ List<Pair<String,String>> findNextNodes = controller.findNextNodes(fj.getIri(), trace.getIri());
|
|
|
+ List<String> actIris = new ArrayList<String>();
|
|
|
+ for (Pair<String,String> pair : findNextNodes) {
|
|
|
+ if (pair.getSnd() != null) {
|
|
|
+ actIris.add(pair.getSnd());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> consider = checkTrace(trace,actIris);
|
|
|
+
|
|
|
+ for (Iterator<Pair<String,String>> iterator = findNextNodes.iterator(); iterator.hasNext();) {
|
|
|
+ Pair<String,String> pair = iterator.next();
|
|
|
+
|
|
|
+ if (pair.getSnd() == null) {
|
|
|
+ findNextNodes.remove(pair);
|
|
|
+ } else {
|
|
|
+ boolean found = false;
|
|
|
+ for (String str : consider) {
|
|
|
+ if (str.equals(pair.getSnd())) {
|
|
|
+ found = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!found) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ result.addAll(findElements(trace.getPmEnacted(), findNextNodes));
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private List<String> checkTrace(PT trace, List<String> actIris) {
|
|
|
+ List<Pair<String,Integer>> pairs = new ArrayList<Pair<String,Integer>>();
|
|
|
+ int max = 0;
|
|
|
+ for (String iri : actIris) {
|
|
|
+ int count = 0;
|
|
|
+ for (Event ev : trace.getEvents()) {
|
|
|
+ if (ev instanceof StartActivityEvent && ((StartActivityEvent)ev).getRelatesTo().getActivity().getIri().equals(iri)) {
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (count > max) {
|
|
|
+ max = count;
|
|
|
+ }
|
|
|
+ pairs.add(new Pair<String, Integer>(iri, count));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> result = new ArrayList<String>();
|
|
|
+ for (Pair<String, Integer> pair : pairs) {
|
|
|
+ if (pair.getSnd() < max) {
|
|
|
+ result.add(pair.getFst());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
private List<Node> findEndActs(List<Event> events) {
|
|
|
List<Node> result = new ArrayList<Node>();
|
|
@@ -200,10 +270,10 @@ public class EnactmentControllerMVC {
|
|
|
List<PMTrigger> acts = (List<PMTrigger>) request.getSession().getAttribute("acts");
|
|
|
List<Node> endacts = (List<Node>) request.getSession().getAttribute("endacts");
|
|
|
PMTrigger element = findPMTrigger(acts,iri);
|
|
|
- Object arts = request.getSession().getAttribute("arts");
|
|
|
+ List<TraceArtifact> arts = (List<TraceArtifact>)request.getSession().getAttribute("arts");
|
|
|
if (element.getPort() != null) {
|
|
|
ControlInputPort port = (ControlInputPort)element.getPort();
|
|
|
- controller.addStartEvent(pt,port, port.getActivity(),((List<TraceArtifact>)arts));
|
|
|
+ controller.addStartEvent(pt,port, port.getActivity(),arts);
|
|
|
removeElement(acts,iri);
|
|
|
endacts.add(port.getActivity());
|
|
|
request.getSession().removeAttribute("arts");
|
|
@@ -216,11 +286,11 @@ public class EnactmentControllerMVC {
|
|
|
} else {
|
|
|
return "error";
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
|
|
|
@PostMapping("/endAct")
|
|
|
public String endActivityWithArtifacts(Model model, @RequestParam String port, @RequestParam String activity, HttpServletRequest request) throws Exception {
|
|
@@ -237,7 +307,7 @@ public class EnactmentControllerMVC {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
List<Artifact> arts = act.getOutputs();
|
|
|
List<TraceArtifact> traceArts = new ArrayList<TraceArtifact>();
|
|
|
for (Artifact artifact : arts) {
|
|
@@ -250,18 +320,18 @@ public class EnactmentControllerMVC {
|
|
|
traceArts.add(tArt);
|
|
|
storageService.save(part);
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
controller.addEndEvent(pt,traceArts,p);
|
|
|
for (Node activ : endacts) {
|
|
|
if (activ.getIri().equals(act.getIri())) {
|
|
|
endacts.remove(activ);
|
|
|
break;
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- List<Pair<String,String>> iris = controller.findNextNodes(p.getIri());
|
|
|
+ List<Pair<String,String>> iris = controller.findNextNodes(p.getIri(), pt.getIri());
|
|
|
acts.addAll(findElements(pm, iris));
|
|
|
|
|
|
request.getSession().setAttribute("trace", pt);
|
|
@@ -270,7 +340,7 @@ public class EnactmentControllerMVC {
|
|
|
model.addAttribute("current", "1");
|
|
|
return "enact";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@RequestMapping("/endselect")
|
|
|
public String selectActivityToEnd(Model model, @RequestParam String iri, HttpServletRequest request) throws Exception {
|
|
|
PM pm = (PM)request.getSession().getAttribute("pm");
|
|
@@ -279,20 +349,19 @@ public class EnactmentControllerMVC {
|
|
|
Activity act = (Activity)pm.getNode(iri);
|
|
|
model.addAttribute("act", pm.getNode(iri));
|
|
|
model.addAttribute("arts", act.getOutputs());
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
model.addAttribute("endBool", true);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
} else {
|
|
|
model.addAttribute("arts", null);
|
|
|
}
|
|
|
|
|
|
return "enactEnd";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@RequestMapping("/inarts")
|
|
|
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")) {
|
|
@@ -321,21 +390,21 @@ public class EnactmentControllerMVC {
|
|
|
//model.addAttribute("arts", arts);
|
|
|
request.getSession().setAttribute("arts", arts);
|
|
|
model.addAttribute("storageURL", env.getProperty("storageURL"));
|
|
|
- } else {
|
|
|
+ } else {
|
|
|
model.addAttribute("endBool", true);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
} else {
|
|
|
request.getSession().setAttribute("arts", null);
|
|
|
}
|
|
|
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) {
|
|
@@ -358,7 +427,7 @@ public class EnactmentControllerMVC {
|
|
|
}
|
|
|
return acts;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private PMTrigger findPMTrigger(List<PMTrigger> acts, String iri) {
|
|
|
for (PMTrigger pmTrigger : acts) {
|
|
|
if (pmTrigger.getIri().equals(iri)) {
|
|
@@ -378,5 +447,5 @@ public class EnactmentControllerMVC {
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
}
|