Browse Source

Changes to support automated activities.

Lucas Albertins 1 year ago
parent
commit
6d11409596

+ 36 - 4
src/main/java/ua/be/wee/controller/EnactmentControllerMVC.java

@@ -26,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.AutomatedActivity;
+import ua.be.wee.model.nodes.AutomatedStatus;
 import ua.be.wee.model.nodes.FinalNode;
 import ua.be.wee.model.nodes.ForkJoinNode;
 import ua.be.wee.model.nodes.Node;
@@ -120,7 +121,8 @@ public class EnactmentControllerMVC {
 			request.getSession().setAttribute("trace", trace);
 			request.getSession().setAttribute("acts",acts);
 			request.getSession().setAttribute("endacts",new ArrayList<Node>());
-			request.getSession().setAttribute("automated",new ArrayList<AutomatedActivity>());
+			//TODO instead of creating empty check if there is any automated activity being executed
+			request.getSession().setAttribute("automated",controller.getAutomatedActivities(trace));
 			model.addAttribute("arts", null);
 			model.addAttribute("current", "1");
 	        return "enact";
@@ -157,11 +159,13 @@ public class EnactmentControllerMVC {
 				}
 				request.getSession().setAttribute("acts",acts);
 			}
-			model.addAttribute("error", false);
+			
 			request.getSession().setAttribute("pm", pm);
 			request.getSession().setAttribute("trace", trace);
 			request.getSession().setAttribute("endacts",endActs);
-			request.getSession().setAttribute("automated",new ArrayList<AutomatedActivity>());
+			//TODO instead of creating empty check if there is any automated activity being executed
+			request.getSession().setAttribute("automated",controller.getAutomatedActivities(trace));
+			model.addAttribute("error", false);
 			model.addAttribute("arts", null);
 			model.addAttribute("current", "1");
 	        return "enact";
@@ -262,6 +266,33 @@ public class EnactmentControllerMVC {
 		return result;
 	}
 
+	@PostMapping("/reload")
+    public String reload(Model model, HttpServletRequest request) throws Exception {
+		PT pt = (PT)request.getSession().getAttribute("trace");
+		PM pm = (PM)request.getSession().getAttribute("pm");
+		request.getSession().setAttribute("automated",controller.getAutomatedActivities(pt));
+				
+		List<Event> events = ptController.getEvents(pt.getIri());
+		pt.setEvents(events);
+		
+		List <Node> endActs = findEndActs(pt.getEvents());
+		List<PMTrigger> acts = findStartActs(pt);
+		if (pt.getEvents().get(pt.getEvents().size()-1) instanceof EndActivityEvent) {
+			EndActivityEvent last = (EndActivityEvent)pt.getEvents().get(pt.getEvents().size()-1);
+			List<Pair<String,String>> iris = controller.findNextNodes(last.getRelatesTo().getIri(), pt.getIri());
+			acts.addAll(findElements(pm, iris));
+		}
+		request.getSession().setAttribute("acts",acts);
+		request.getSession().setAttribute("endacts",endActs);
+
+    	request.getSession().setAttribute("trace", pt);
+
+    	model.addAttribute("error", false);
+		model.addAttribute("arts", null);
+		model.addAttribute("current", "1");
+		return "enact";
+	}
+	
 	@PostMapping("/startAct")
     public String startActivity(Model model, @RequestParam String iri, HttpServletRequest request) throws Exception {
     	PM pm = (PM)request.getSession().getAttribute("pm");
@@ -277,6 +308,7 @@ public class EnactmentControllerMVC {
         	if (activity instanceof AutomatedActivity) {
 				AutomatedActivity aut = (AutomatedActivity)activity;
 				controller.callAutomatedActivity(pt,aut, arts);
+				aut.setAutomatedStatus(AutomatedStatus.IN_PROGRESS);
 				automated.add(aut);
 			} else {
 				endacts.add(port.getActivity());
@@ -340,7 +372,7 @@ public class EnactmentControllerMVC {
         acts.addAll(findElements(pm, iris));
 
     	request.getSession().setAttribute("trace", pt);
-    	request.getSession().setAttribute("previous", p.getIri());
+    	//request.getSession().setAttribute("previous", p.getIri());
 		model.addAttribute("arts", null);
 		model.addAttribute("current", "1");
     	return "enact";

+ 47 - 0
src/main/java/ua/be/wee/model/EnactmentController.java

@@ -2,6 +2,7 @@ package ua.be.wee.model;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -13,12 +14,15 @@ 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.AutomatedActivity;
+import ua.be.wee.model.nodes.AutomatedStatus;
 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.pm.PM;
+import ua.be.wee.model.pt.EndActivityEvent;
 import ua.be.wee.model.pt.Event;
 import ua.be.wee.model.pt.PT;
+import ua.be.wee.model.pt.StartActivityEvent;
 import ua.be.wee.model.pt.TraceArtifact;
 import ua.be.wee.model.repository.NodeRespository;
 import ua.be.wee.model.repository.PMRepository;
@@ -105,4 +109,47 @@ public class EnactmentController {
 	public void uploadArtifact(InputStream is, String filename) throws IOException {
 		storageService.save(is,filename);	
 	}
+
+	public List<AutomatedActivity> getAutomatedActivities(PT trace) {
+		trace.getPmEnacted();
+		List<AutomatedActivity> result = new ArrayList<AutomatedActivity>();
+		List<Event> events = trace.getEvents();
+		for (Event event : events) {
+			if (event instanceof StartActivityEvent) {
+				Activity activity = ((StartActivityEvent) event).getRelatesTo().getActivity();
+				if (activity instanceof AutomatedActivity) {
+					boolean found = false;
+					for (Event event2 : events) {
+						if (event2 instanceof EndActivityEvent) {
+							if (checkMatchingActivityEvents((StartActivityEvent)event, (EndActivityEvent)event2)) {
+								AutomatedActivity aut =(AutomatedActivity)activity;
+								aut.setAutomatedStatus(AutomatedStatus.COMPLETED);
+								result.add(aut);
+								found = true;
+								break;
+							}
+							
+						}
+					}
+					if (!found) {
+						AutomatedActivity aut =(AutomatedActivity)activity;
+						aut.setAutomatedStatus(AutomatedStatus.IN_PROGRESS);
+						result.add(aut);	
+					}
+				}
+			} 
+		}
+		return result;
+	}
+	
+	public boolean checkMatchingActivityEvents(StartActivityEvent ev1, EndActivityEvent ev2) {
+		String ir = ev1.getIri();
+		String ir2= ev2.getIri();
+		String[] split = ir.split("#");
+		String[] split2 = ir2.split("#");
+		String sub1 = split[1].substring(split[1].indexOf('_'));
+		String sub2 = split2[1].substring(split2[1].indexOf('_'));
+		return split[0].equals(split2[0]) && sub1.equals(sub2);
+	}
+	
 }

+ 11 - 2
src/main/java/ua/be/wee/model/nodes/AutomatedActivity.java

@@ -2,11 +2,12 @@ package ua.be.wee.model.nodes;
 
 public class AutomatedActivity extends Activity {
 
-	
 	private String endpoint;
 	
 	private long timeout;
 	
+	private AutomatedStatus status;
+	
 	public long getTimeout() {
 		return timeout;
 	}
@@ -21,5 +22,13 @@ public class AutomatedActivity extends Activity {
 
 	public void setEndpoint(String endpoint) {
 		this.endpoint = endpoint;
-	}	
+	}
+	
+	public void setAutomatedStatus(AutomatedStatus s) {
+		this.status = s;
+	}
+	
+	public AutomatedStatus getAutomatedStatus() {
+		return this.status;
+	}
 }

+ 5 - 0
src/main/java/ua/be/wee/model/nodes/AutomatedStatus.java

@@ -0,0 +1,5 @@
+package ua.be.wee.model.nodes;
+
+public enum AutomatedStatus {
+	IN_PROGRESS, COMPLETED
+}

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

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Repository;
 
 import ua.be.wee.model.nodes.Activity;
 import ua.be.wee.model.nodes.Artifact;
+import ua.be.wee.model.nodes.AutomatedActivity;
 import ua.be.wee.model.nodes.ports.ControlInputPort;
 import ua.be.wee.model.nodes.ports.ControlOutputPort;
 import ua.be.wee.model.pm.PM;
@@ -812,8 +813,6 @@ public class PTRepository {
 			list.add(ev);
 		}
 		return list;		
-	}
-
-	
+	}	
 
 }

+ 20 - 3
src/main/java/ua/be/wee/model/util/AsyncHttpClientService.java

@@ -88,14 +88,13 @@ public class AsyncHttpClientService {
 							}
 						}	
 					} 
-					Thread.sleep(1000);
+					Thread.sleep(500);
 					control.addEndEvent(pt, traceArts, ctrlOutPort);
 					
 				} else {
 					throw new Exception("The response of automated activity " + act.getName() + " returned an unexpected status code: " + statusCode);
 				}
 				
-				
 				client.close();
 				return result;
 		    }
@@ -105,6 +104,7 @@ public class AsyncHttpClientService {
 				if (t instanceof TimeoutException) {
 					System.err.println("Timeout occurred!");
 				} else {
+					t.printStackTrace();
 					System.err.println("Another error occurred!");
 				}
 		    }
@@ -137,11 +137,28 @@ public class AsyncHttpClientService {
 		a.setTimeout(5000);
 		a.setEndpoint("http://localhost:7999");
 		
+		List<ControlOutputPort> list = new ArrayList<ControlOutputPort>();
+		
+		ControlOutputPort cout = new ControlOutputPort();
+		cout.setName("ok");
+		list.add(cout);
+		
+		a.setCtrlOutPorts(list);
+		
+		
+		List<DataOutputPort> list2 = new ArrayList<DataOutputPort>();
+		
+		DataOutputPort dout = new DataOutputPort();
+		dout.setName("dout");
+		list2.add(dout);
+		
+		a.setDataOutPorts(list2);
+		
 		Map<String,Pair<String,String>> params = new HashMap<String, Pair<String,String>>();
 				
 		String content = storageService.load("mock_requirements.txt");
 		System.out.println(content);
-		params.put("din", new Pair<String, String>("txt", content+ "c"));
+		params.put("din", new Pair<String, String>("txt", content));
 		
 		EnactmentController enac = new EnactmentController();
 		

+ 23 - 12
src/main/resources/templates/enact.html

@@ -7,20 +7,31 @@
 <main>
   <article class="panel is-primary automated-activities">
     <p class="panel-heading">Automated Activities</p>
-    <a class="panel-block automated-activity">
-      <progress class="progress is-medium is-success activity" value= "100" max="100"></progress>
-      <span>Example Completed Activity 1</span>
-    </a>
-
-    <a class="panel-block automated-activity">
-      <progress class="progress is-medium is-info activity" max="100"></progress>
-      <span>Example In Progress Activity 2</span>
-    </a>
-
-    <a class="panel-block">
-      <button class="button is-primary"><img class="refresh" width="32" height="32" th:src="@{/img/refresh.svg}" alt="Circular arrow"></button>
+    
+    <th:block th:each="aut : ${session.automated}">
+            <p th:if="${aut.automatedStatus == T(ua.be.wee.model.nodes.AutomatedStatus).COMPLETED'}">
+    	    	<a class="panel-block automated-activity">
+      			<progress class="progress is-medium is-success activity" value= "100" max="100"></progress>
+      			<span th:text="${aut.name}" >Example Completed Activity 1</span>
+    			</a>    
+            </p>
+            <p th:if="${auto.automatedStatus == T(ua.be.wee.model.nodes.AutomatedStatus).IN_PROGRESS'}">
+            	<a class="panel-block automated-activity">
+      			<progress class="progress is-medium is-info activity" max="100"></progress>
+      			<span th:text="${aut.name}">Example In Progress Activity 2</span>
+    			</a>
+            </p>
+    
+    </th:block>
+    
+   <form class="form" th:action="@{/reload}" method="post">
+    
+   <a class="panel-block">
+      <button id="reloadButton" class="button is-primary" type="submit"><img class="refresh" width="32" height="32" th:src="@{/img/refresh.svg}" alt="Circular arrow"></button>
     </a>
   </article>
+  
+  </form>
 
   <section class="pt-6 pb-6 pl-5 pr-5">
     <div class="columns">