|
@@ -244,10 +244,7 @@ public class PTRepository {
|
|
|
|
|
|
List<String> artifactsIRI = new ArrayList<String>();
|
|
|
for (TraceArtifact art : arts) {
|
|
|
- String artifactIRI = pt.getIri().replace('#', '/') + "#" + art.getGUID();
|
|
|
- art.setIri(artifactIRI);
|
|
|
- artifactsIRI.add(artifactIRI);
|
|
|
- createTraceArtifact(endiri,preiri, art, pt);
|
|
|
+ artifactsIRI.add(createTraceArtifact(endiri,preiri, art, pt));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -306,10 +303,19 @@ public class PTRepository {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void createTraceArtifact(String endEvIRI, String startEvIRI, TraceArtifact art, PT pt)
|
|
|
+ private String createTraceArtifact(String endEvIRI, String startEvIRI, TraceArtifact art, PT pt)
|
|
|
throws Exception {
|
|
|
|
|
|
TraceArtifact latest = getLastestVersion(startEvIRI,art);
|
|
|
+ if (latest != null) {
|
|
|
+ String newTag = (Integer.parseInt(latest.getTag().substring(1))+1)+"";
|
|
|
+ art.setTag("v"+newTag);
|
|
|
+ } else {
|
|
|
+ art.setTag("v1");
|
|
|
+ }
|
|
|
+ art.setGUID(art.getRelatesTo().getName()+"-"+art.getTag());
|
|
|
+ art.setIri(pt.getIri().replace('#', '/') + "#" + art.getGUID());
|
|
|
+
|
|
|
|
|
|
String query = "PREFIX pt: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
|
|
|
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
@@ -324,16 +330,11 @@ public class PTRepository {
|
|
|
+ " pt:addedAt ?now ; \n "
|
|
|
+ " owl:sameAs <" + art.getIri() + "> ;\n";
|
|
|
if (latest != null) {
|
|
|
- String newTag = (Integer.parseInt(latest.getTag().substring(1))+1)+"";
|
|
|
- art.setTag(newTag);
|
|
|
- art.setGUID(art.getRelatesTo().getName()+"-"+art.getTag());
|
|
|
- query += " base:nextVersionOf \"" + latest.getIri() + "\" ;\n"
|
|
|
+ query += " base:nextVersionOf <" + latest.getIri() + "> ;\n"
|
|
|
+ " base:hasGUID \"" + art.getGUID() + "\" ;\n"
|
|
|
+ " base:hasTag \"" + art.getTag() + "\" .\n"
|
|
|
+ " <" +latest.getIri() + "> base:previousVersionOf <" + art.getIri() + "> .\n";
|
|
|
} else {
|
|
|
- art.setTag("v1");
|
|
|
- art.setGUID(art.getRelatesTo().getName()+"-"+art.getTag());
|
|
|
query += " base:hasGUID \"" + art.getGUID() + "\" ;\n"
|
|
|
+ " base:hasTag \"" + art.getTag() + "\" .\n";
|
|
|
}
|
|
@@ -388,10 +389,13 @@ public class PTRepository {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+ return art.getIri();
|
|
|
} else {
|
|
|
throw new Exception("Error inserting data.");
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private TraceArtifact getLastestVersion(String startEvIRI, TraceArtifact art) {
|
|
@@ -421,7 +425,7 @@ public class PTRepository {
|
|
|
RDFNode latestVersion = next.get("?version");
|
|
|
if (lastestIRI != null) {
|
|
|
TraceArtifact result = new TraceArtifact();
|
|
|
- result.setIri(latestVersion.toString());
|
|
|
+ result.setIri(lastestIRI.toString());
|
|
|
result.setTag(latestVersion.toString());
|
|
|
return result;
|
|
|
}
|
|
@@ -538,13 +542,15 @@ public class PTRepository {
|
|
|
String next = nextQ != null ? nextQ.toString() : null;
|
|
|
String nexttype = nexttypeQ != null ? nexttypeQ.toString() : null;
|
|
|
|
|
|
+ List<TraceArtifact> artifacts = new ArrayList<TraceArtifact>();
|
|
|
+
|
|
|
while (next!= null && !next.toString().equals("")) {
|
|
|
if (nexttype.toString().equals(Event.START_ACTIVITY_IRI)) {
|
|
|
- Pair<String,String> p = getStartActivityEvent(next.toString(), pm2, list);
|
|
|
+ Pair<String,String> p = getStartActivityEvent(next.toString(), pm2, list, artifacts);
|
|
|
next = p != null ? p.getFst() : null;
|
|
|
nexttype = p != null ? p.getSnd() : null;
|
|
|
} else if (nexttype.toString().equals(Event.END_ACTIVITY_IRI)) {
|
|
|
- Pair<String,String> p = getEndActivityEvent(next.toString(), pm2, list);
|
|
|
+ Pair<String,String> p = getEndActivityEvent(next.toString(), pm2, list, artifacts);
|
|
|
next = p != null ? p.getFst() : null;
|
|
|
nexttype = p != null ? p.getSnd() : null;
|
|
|
} else if (nexttype.toString().equals(Event.END_TRACE_IRI)) {
|
|
@@ -583,7 +589,7 @@ public class PTRepository {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private Pair<String, String> getStartActivityEvent(String iri, PM pm, List<Event> list) throws Exception {
|
|
|
+ private Pair<String, String> getStartActivityEvent(String iri, PM pm, List<Event> list, List<TraceArtifact> artifacts) throws Exception {
|
|
|
String query = "PREFIX tr: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
|
|
|
+ "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
@@ -621,7 +627,7 @@ public class PTRepository {
|
|
|
stev.setTimestamp(DateTimeConverter.convertSPARQLDateTimeToTimestamp(ts.toString()));
|
|
|
stev.setRelatesTo(ctrlPort);
|
|
|
|
|
|
- stev.setConsumedArtifacts(getArtifacts(stev,pm));
|
|
|
+ stev.setConsumedArtifacts(getArtifacts(stev,pm, artifacts));
|
|
|
|
|
|
|
|
|
list.add(stev);
|
|
@@ -638,12 +644,12 @@ public class PTRepository {
|
|
|
|
|
|
}
|
|
|
|
|
|
- private List<TraceArtifact> getArtifacts(Event ev, PM pm) {
|
|
|
+ private List<TraceArtifact> getArtifacts(Event ev, PM pm, List<TraceArtifact> artifacts) {
|
|
|
List<TraceArtifact> arts = new ArrayList<TraceArtifact>();
|
|
|
String query = "PREFIX tr: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
|
|
|
+ "PREFIX base: <http://ua.be/sdo2l/vocabulary/base/base#>\n"
|
|
|
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
|
- + "SELECT ?art ?ts ?guid ?location ?tag ?pmArt WHERE {\n"
|
|
|
+ + "SELECT ?art ?ts ?guid ?location ?tag ?pmArt ?next WHERE {\n"
|
|
|
+ " ?art a tr:Artifact .\n"
|
|
|
+ (ev instanceof StartActivityEvent ?
|
|
|
" <" + ev.getIri() + "> tr:consumes ?art .\n" :
|
|
@@ -653,6 +659,9 @@ public class PTRepository {
|
|
|
+ " ?art tr:hasLocation ?location .\n"
|
|
|
+ " ?art base:hasTag ?tag .\n"
|
|
|
+ " ?art tr:relatesTo ?pmArt .\n"
|
|
|
+ + " OPTIONAL {\n"
|
|
|
+ + " ?art base:nextVersionOf ?next \n"
|
|
|
+ + " }"
|
|
|
+ "}";
|
|
|
ResultSet rs = FusekiWrapper.getInstance().execQuery(query);
|
|
|
while (rs.hasNext()) {
|
|
@@ -663,6 +672,7 @@ public class PTRepository {
|
|
|
RDFNode location = next.get("?location");
|
|
|
RDFNode tag = next.get("?tag");
|
|
|
RDFNode pmArt = next.get("?pmArt");
|
|
|
+ RDFNode nextArt = next.get("?next");
|
|
|
TraceArtifact tArt = new TraceArtifact();
|
|
|
tArt.setIri(art.toString());
|
|
|
tArt.setTimestamp(DateTimeConverter.convertSPARQLDateTimeToTimestamp(ts.toString()));
|
|
@@ -670,13 +680,22 @@ public class PTRepository {
|
|
|
tArt.setGUID(guid.toString());
|
|
|
tArt.setLocation(location.toString());
|
|
|
tArt.setTag(tag.toString());
|
|
|
-
|
|
|
arts.add(tArt);
|
|
|
+
|
|
|
+ if (nextArt != null && !nextArt.toString().equals("")) {
|
|
|
+ for (TraceArtifact traceArtifact : artifacts) {
|
|
|
+ if (traceArtifact.getIri().equals(nextArt.toString())) {
|
|
|
+ traceArtifact.setNextVersion(tArt);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ artifacts.add(tArt);
|
|
|
}
|
|
|
return arts;
|
|
|
}
|
|
|
|
|
|
- private Pair<String, String> getEndActivityEvent(String iri, PM pm, List<Event> list) throws Exception {
|
|
|
+ private Pair<String, String> getEndActivityEvent(String iri, PM pm, List<Event> list, List<TraceArtifact> artifacts) throws Exception {
|
|
|
String query = "PREFIX tr: <http://ua.be/sdo2l/vocabulary/formalisms/processtraces#>\n"
|
|
|
+ "PREFIX pm: <http://ua.be/sdo2l/vocabulary/formalisms/pm#>\n"
|
|
|
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"
|
|
@@ -714,7 +733,7 @@ public class PTRepository {
|
|
|
ev.setTimestamp(DateTimeConverter.convertSPARQLDateTimeToTimestamp(ts.toString()));
|
|
|
ev.setRelatesTo(ctrlPort);
|
|
|
|
|
|
- ev.setProducedArtifacts(getArtifacts(ev,pm));
|
|
|
+ ev.setProducedArtifacts(getArtifacts(ev,pm,artifacts));
|
|
|
|
|
|
list.add(ev);
|
|
|
|