|
@@ -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;
|
|
@@ -150,11 +152,11 @@ public class EnactmentControllerMVC {
|
|
|
|
|
|
} 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(), trace.getIri());
|
|
|
- acts = findElements(pm, iris);
|
|
|
+ acts.addAll(findElements(pm, iris));
|
|
|
}
|
|
|
|
|
|
request.getSession().setAttribute("acts",acts);
|
|
@@ -171,6 +173,77 @@ public class EnactmentControllerMVC {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ 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>();
|
|
|
for (Event event : events) {
|
|
@@ -200,10 +273,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");
|
|
@@ -292,7 +365,6 @@ public class EnactmentControllerMVC {
|
|
|
|
|
|
@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")) {
|