Procházet zdrojové kódy

- Standardization of rest calls for the trace urls
- adding rest operation to return all finished traces of a PM.

Lucas Albertins před 2 roky
rodič
revize
2df0303138

+ 7 - 2
src/main/java/ua/be/wee/controller/rest/PTController.java

@@ -23,17 +23,22 @@ public class PTController {
 	}
 	
 	
-	@GetMapping("/events/{traceiri}")
+	@GetMapping("/traces/events/{traceiri}")
 	List<Event> getEvents(@PathVariable String traceiri) throws Exception {
 		return ptRepository.getEvents(traceiri);
 	}
 	
 	
-	@GetMapping("/activetraces/{pmiri}")
+	@GetMapping("/traces/active/{pmiri}")
 	List<StartTraceEvent> getActiveTraces(@PathVariable String pmiri) throws Exception {
 		return ptRepository.getActiveTraces(pmiri);
 	}
 	
+	@GetMapping("/traces/finished/{pmiri}")
+	List<StartTraceEvent> getConcludedTraces(@PathVariable String pmiri) throws Exception {
+		return ptRepository.getConcludedTraces(pmiri);
+	}
+	
 
 
 	

+ 47 - 9
src/main/java/ua/be/wee/model/repository/PTRepository.java

@@ -494,10 +494,12 @@ public class PTRepository {
 				+ "SELECT ?trace ?pm ?ts ?next ?nexttype WHERE {\n"
 				+ "	?trace owl:sameAs <" + startEventIRI + "> ;\n"
 				+ "    	tr:relatesTo ?pm ;\n"
-				+ "	 	tr:hasTimestamp ?ts ;\n"
-				+ "   	tr:isFollowedBy ?next .\n"
+				+ "	 	tr:hasTimestamp ?ts .\n"
+				+ "   	OPTIONAL {\n"
+				+ "    	?trace tr:isFollowedBy ?next .\n"
 				+ "		?next a ?nexttype .\n"
-				+ "     FILTER (?nexttype IN (tr:StartActivityEvent, tr:EndActivityEvent, tr:EndTraceEvent)) ."
+				+ "     	FILTER (?nexttype IN (tr:StartActivityEvent, tr:EndActivityEvent, tr:EndTraceEvent)) .\n"
+				+ "  	}\n"
 				+ "}";
 		ResultSet rs = FusekiWrapper.getInstance().execQuery(query);
 		if (rs.hasNext()) {
@@ -715,14 +717,50 @@ public class PTRepository {
 		List<StartTraceEvent> list = new ArrayList<StartTraceEvent>();
 		String query = "PREFIX tr: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
 				+ "SELECT ?trace ?ts ?next WHERE {\n"
-				+ "  ?trace a tr:StartTraceEvent ;\n"
-				+ "	   	tr:isFollowedBy+ ?next .\n"
-				+ "	 ?trace tr:relatesTo <" + pm + "> ."	
+				+ "  ?trace tr:hasTimestamp ?ts .\n"
+				+ "  ?trace tr:relatesTo <" + pm + "> .\n"
+				+ "  {  \n"
+				+ "    ?trace a tr:StartTraceEvent .\n"
+				+ "	?trace tr:isFollowedBy+ ?next .\n"
+				+ "    ?next a ?nexttype .\n"
+				+ "	FILTER (?trace != ?next)\n"
+				+ "	FILTER NOT EXISTS {?next tr:isFollowedBy ?other  } .\n"
+				+ "    FILTER (?nexttype IN (tr:StartActivityEvent, tr:EndActivityEvent)) .\n"
+				+ "  }\n"
+				+ "  UNION \n"
+				+ "  {\n"
+				+ "    ?trace a tr:StartTraceEvent .\n"
+				+ "    FILTER NOT EXISTS {?trace tr:isFollowedBy ?next} .\n"
+				+ "  }\n"
+				+ "}";
+		ResultSet rs = FusekiWrapper.getInstance().execQuery(query);
+		while (rs.hasNext()) {
+			QuerySolution next = rs.next();
+			RDFNode trace = next.get("?trace");
+			RDFNode ts = next.get("?ts");
+			StartTraceEvent ev = new StartTraceEvent();
+			ev.setIri(trace.toString());
+			ev.setTimestamp(DateTimeConverter.convertSPARQLDateTimeToTimestamp(ts.toString()));
+			PM pmo = new PM();
+			pmo.setIri(pm);
+			ev.setPmEnacted(pmo);
+			list.add(ev);
+		}
+		return list;		
+	}
+
+	public List<StartTraceEvent> getConcludedTraces(String pmiri) {
+		List<StartTraceEvent> list = new ArrayList<StartTraceEvent>();
+		String query = "PREFIX tr: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
+				+ "SELECT ?trace ?ts ?next WHERE {\n"
+				+ "  ?trace a tr:StartTraceEvent .\n"
+				+ "  ?trace tr:hasTimestamp ?ts .\n"
+				+ "  ?trace tr:relatesTo <" + pmiri + "> .\n"
+				+ "  ?trace tr:isFollowedBy+ ?next .\n"
 				+ "  ?next a ?nexttype .\n"
-				+ "  ?trace tr:hasTimestamp ?ts ."
 				+ "  FILTER (?trace != ?next)\n"
 				+ "  FILTER NOT EXISTS {?next tr:isFollowedBy ?other  } .\n"
-				+ "  FILTER (?nexttype IN (tr:StartActivityEvent, tr:EndActivityEvent)) . \n"
+				+ "  FILTER (?nexttype IN (tr:EndTraceEvent)) .\n"
 				+ "}";
 		ResultSet rs = FusekiWrapper.getInstance().execQuery(query);
 		while (rs.hasNext()) {
@@ -733,7 +771,7 @@ public class PTRepository {
 			ev.setIri(trace.toString());
 			ev.setTimestamp(DateTimeConverter.convertSPARQLDateTimeToTimestamp(ts.toString()));
 			PM pmo = new PM();
-			pmo.setIri(pm);
+			pmo.setIri(pmiri);
 			ev.setPmEnacted(pmo);
 			list.add(ev);
 		}