|
@@ -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);
|
|
|
}
|