Browse Source

Fixing the relation between different versions of the same artifact.

Lucas Albertins 2 years ago
parent
commit
32c8ceb21a

+ 0 - 1
src/main/java/ua/be/wee/controller/EnactmentControllerMVC.java

@@ -246,7 +246,6 @@ public class EnactmentControllerMVC {
 				if (part.getName().equals(artifact.getName())) {
 					TraceArtifact tArt = new TraceArtifact();
 					tArt.setLocation(part.getSubmittedFileName());
-					tArt.setGUID(part.getSubmittedFileName()+"-" +tArt.getTag());
 					tArt.setRelatesTo(artifact);
 					traceArts.add(tArt);
 					storageService.save(part);

+ 5 - 0
src/main/java/ua/be/wee/model/pt/TraceArtifact.java

@@ -114,4 +114,9 @@ public class TraceArtifact {
 		}
 		return null;
 	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		return iri.equals(((TraceArtifact)obj).getIri());
+	}
 }

+ 40 - 21
src/main/java/ua/be/wee/model/repository/PTRepository.java

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