]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/utils/Versions.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / utils / Versions.java
1 package org.simantics.db.common.utils;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.HashSet;\r
5 import java.util.Set;\r
6 \r
7 import org.simantics.databoard.Bindings;\r
8 import org.simantics.databoard.util.URIStringUtils;\r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.common.NamedResource;\r
12 import org.simantics.db.common.request.PossibleIndexRoot;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 import org.simantics.layer0.Layer0;\r
15 \r
16 public class Versions {\r
17 \r
18         public static String make(String baseName, String version) {\r
19                 return baseName + "@" + version;\r
20         }\r
21         \r
22         public static String getBaseVersion(String version) {\r
23                 try {\r
24                         Integer.parseInt(version);\r
25                         return "1";\r
26                 } catch (NumberFormatException e) {\r
27                 }\r
28                 return "A";\r
29         }\r
30         \r
31         public static String getBaseName(String name) {\r
32                 int pos = name.lastIndexOf('@');\r
33                 if(pos == -1) return name;\r
34                 return name.substring(0, pos);\r
35         }\r
36 \r
37         public static String getVersion(String name) {\r
38         if(name == null) return null;\r
39         if(!name.contains("@")) return null;\r
40                 int pos = name.lastIndexOf('@');\r
41                 return name.substring(pos+1);\r
42         }\r
43 \r
44         public static String getBaseName(ReadGraph graph, Resource artifact) throws DatabaseException {\r
45         Layer0 L0 = Layer0.getInstance(graph);\r
46         String name = graph.getPossibleRelatedValue(artifact, L0.HasName, Bindings.STRING);\r
47         if(name == null) return "";\r
48         if(!name.contains("@")) return name;\r
49                 int pos = name.lastIndexOf('@');\r
50                 return name.substring(0, pos);\r
51         }\r
52 \r
53         public static String getVersion(ReadGraph graph, Resource artifact) throws DatabaseException {\r
54         Layer0 L0 = Layer0.getInstance(graph);\r
55         String name = graph.getPossibleRelatedValue(artifact, L0.HasName, Bindings.STRING);\r
56         return getVersion(name);\r
57         }\r
58 \r
59         public static Collection<NamedResource> getOlderVersions(ReadGraph graph, Resource artifact) throws DatabaseException {\r
60 \r
61                 Set<NamedResource> result = new HashSet<NamedResource>();\r
62                 \r
63                 VersionInfo info = graph.syncRequest(new VersionInfoRequest(artifact));\r
64                 result.addAll(info.getOlderVersions());\r
65                 \r
66                 Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(artifact));\r
67                 if(indexRoot == null || indexRoot.equals(artifact)) return result;\r
68 \r
69                 VersionInfo versions = graph.syncRequest(new VersionInfoRequest(indexRoot));\r
70                 for(NamedResource ontology : versions.getOlderVersions()) {\r
71                         VersionMap map = match(graph, artifact, ontology.getResource());\r
72                         result.addAll(map.getOlderOrEqualVersions(graph, artifact));\r
73                 }\r
74                 \r
75                 return result;\r
76                 \r
77         }\r
78         \r
79         public static Collection<NamedResource> getNewerVersions(ReadGraph graph, Resource artifact) throws DatabaseException {\r
80 \r
81                 Set<NamedResource> result = new HashSet<NamedResource>();\r
82                 \r
83                 VersionInfo info = graph.syncRequest(new VersionInfoRequest(artifact));\r
84                 result.addAll(info.getNewerVersions());\r
85                 \r
86                 Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(artifact));\r
87                 if(indexRoot == null || indexRoot.equals(artifact)) return result;\r
88                 \r
89                 VersionInfo versions = graph.syncRequest(new VersionInfoRequest(indexRoot));\r
90                 for(NamedResource ontology : versions.getNewerVersions()) {\r
91                         VersionMap map = match(graph, artifact, ontology.getResource());\r
92                         result.addAll(map.getNewerOrEqualVersions(graph, artifact));\r
93                 }\r
94 \r
95                 return result;\r
96                 \r
97         }\r
98 \r
99         public static VersionMap match(ReadGraph graph, Resource type, Resource newOntology) throws DatabaseException {\r
100         Resource originalOntology = graph.syncRequest(new PossibleIndexRoot(type));\r
101         String originalURI = graph.getURI(originalOntology);\r
102         String newOntologyURI = graph.getURI(newOntology);\r
103         String typeURI = graph.getURI(type);\r
104         String typeURIInNewOntology = newOntologyURI + typeURI.substring(originalURI.length());\r
105         String[] parts = URIStringUtils.splitURI(typeURIInNewOntology); \r
106         Resource newLibrary = graph.getPossibleResource(parts[0]);\r
107         if(newLibrary == null) return null;\r
108         return graph.syncRequest(new VersionMapRequest(newLibrary));\r
109     }\r
110 \r
111     public static String getStandardNameString(ReadGraph graph, Resource r) throws DatabaseException {\r
112         \r
113         Layer0 L0 = Layer0.getInstance(graph);\r
114         String name = graph.getPossibleRelatedValue(r, L0.HasName, Bindings.STRING);\r
115         if(name != null) {\r
116                 VersionInfo versions = graph.syncRequest(new VersionInfoRequest(r));\r
117                 if(versions.versions.size() != 1) {\r
118                         int pos = name.lastIndexOf('@');\r
119                         if(pos == -1) return name + " [No version]";\r
120                         String base = name.substring(0, pos);\r
121                         String version = name.substring(pos+1);\r
122                         return base + " [Version " + version + "]";\r
123                 } else {\r
124                         return versions.baseName;\r
125                 }\r
126         }\r
127         // Fallback logic\r
128         return NameUtils.getSafeName(graph, r);\r
129         \r
130     }\r
131     \r
132     public static String getStandardPathNameString(ReadGraph graph, Resource r) throws DatabaseException {\r
133         \r
134         Layer0 L0 = Layer0.getInstance(graph);\r
135 \r
136         String standardName = getStandardNameString(graph, r); \r
137         \r
138         Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(r));\r
139         if(indexRoot.equals(r)) return standardName;\r
140         \r
141         Resource indexRootParent = graph.getPossibleObject(indexRoot, L0.PartOf);\r
142         \r
143         String indexRootName = getStandardNameString(graph, indexRoot);\r
144         String indexRootParentURI = graph.getPossibleURI(indexRootParent);\r
145         \r
146         Resource parent = graph.getPossibleObject(r, L0.PartOf);\r
147         String parentURI = graph.getURI(parent);\r
148         String indexRootURI = graph.getPossibleURI(indexRoot);\r
149         String path = (parent.equals(indexRoot)) ? "" : parentURI.substring(indexRootURI.length()+1) + "/"; \r
150         \r
151         return path + standardName + "  in  " + indexRootParentURI + indexRootName;\r
152         \r
153     }\r
154 \r
155 }\r