]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/utils/VersionInfoRequest.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / utils / VersionInfoRequest.java
1 package org.simantics.db.common.utils;
2
3 import java.util.Collections;
4
5 import org.simantics.databoard.Bindings;
6 import org.simantics.db.ReadGraph;
7 import org.simantics.db.Resource;
8 import org.simantics.db.common.NamedResource;
9 import org.simantics.db.common.request.ResourceRead;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.layer0.Layer0;
12 import org.simantics.utils.datastructures.MapList;
13
14 public class VersionInfoRequest extends ResourceRead<VersionInfo> {
15
16         public VersionInfoRequest(Resource resource) {
17                 super(resource);
18         }
19     
20         @Override
21         public VersionInfo perform(ReadGraph graph) throws DatabaseException {
22                 
23         Layer0 L0 = Layer0.getInstance(graph);
24
25         String baseName = graph.getPossibleRelatedValue(resource, L0.HasName, Bindings.STRING);
26         String version = "";
27         
28         if(baseName != null) {
29                 int pos = baseName.lastIndexOf('@');
30                 if(pos != -1) {
31                         version = baseName.substring(pos+1);
32                         baseName = baseName.substring(0, pos);
33                 }
34         }
35         
36                 Resource parent = graph.getPossibleObject(resource, L0.PartOf);
37                 if(parent != null) {
38                         MapList<String,NamedResource> versionMap = graph.syncRequest(new VersionMapRequest(parent));
39                         return new VersionInfo(baseName, version, versionMap.getValues(baseName));
40                 }
41
42                 return new VersionInfo(baseName, version, Collections.singleton(new NamedResource(version, resource)));
43                 
44         }
45
46 }