-package org.simantics.db.common.utils;\r
-\r
-import java.util.Collection;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.util.URIStringUtils;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.NamedResource;\r
-import org.simantics.db.common.request.PossibleIndexRoot;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.layer0.Layer0;\r
-\r
-public class Versions {\r
-\r
- public static String make(String baseName, String version) {\r
- return baseName + "@" + version;\r
- }\r
- \r
- public static String getBaseVersion(String version) {\r
- try {\r
- Integer.parseInt(version);\r
- return "1";\r
- } catch (NumberFormatException e) {\r
- }\r
- return "A";\r
- }\r
- \r
- public static String getBaseName(String name) {\r
- int pos = name.lastIndexOf('@');\r
- if(pos == -1) return name;\r
- return name.substring(0, pos);\r
- }\r
-\r
- public static String getVersion(String name) {\r
- if(name == null) return null;\r
- if(!name.contains("@")) return null;\r
- int pos = name.lastIndexOf('@');\r
- return name.substring(pos+1);\r
- }\r
-\r
- public static String getBaseName(ReadGraph graph, Resource artifact) throws DatabaseException {\r
- Layer0 L0 = Layer0.getInstance(graph);\r
- String name = graph.getPossibleRelatedValue(artifact, L0.HasName, Bindings.STRING);\r
- if(name == null) return "";\r
- if(!name.contains("@")) return name;\r
- int pos = name.lastIndexOf('@');\r
- return name.substring(0, pos);\r
- }\r
-\r
- public static String getVersion(ReadGraph graph, Resource artifact) throws DatabaseException {\r
- Layer0 L0 = Layer0.getInstance(graph);\r
- String name = graph.getPossibleRelatedValue(artifact, L0.HasName, Bindings.STRING);\r
- return getVersion(name);\r
- }\r
-\r
- public static Collection<NamedResource> getOlderVersions(ReadGraph graph, Resource artifact) throws DatabaseException {\r
-\r
- Set<NamedResource> result = new HashSet<NamedResource>();\r
- \r
- VersionInfo info = graph.syncRequest(new VersionInfoRequest(artifact));\r
- result.addAll(info.getOlderVersions());\r
- \r
- Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(artifact));\r
- if(indexRoot == null || indexRoot.equals(artifact)) return result;\r
-\r
- VersionInfo versions = graph.syncRequest(new VersionInfoRequest(indexRoot));\r
- for(NamedResource ontology : versions.getOlderVersions()) {\r
- VersionMap map = match(graph, artifact, ontology.getResource());\r
- result.addAll(map.getOlderOrEqualVersions(graph, artifact));\r
- }\r
- \r
- return result;\r
- \r
- }\r
- \r
- public static Collection<NamedResource> getNewerVersions(ReadGraph graph, Resource artifact) throws DatabaseException {\r
-\r
- Set<NamedResource> result = new HashSet<NamedResource>();\r
- \r
- VersionInfo info = graph.syncRequest(new VersionInfoRequest(artifact));\r
- result.addAll(info.getNewerVersions());\r
- \r
- Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(artifact));\r
- if(indexRoot == null || indexRoot.equals(artifact)) return result;\r
- \r
- VersionInfo versions = graph.syncRequest(new VersionInfoRequest(indexRoot));\r
- for(NamedResource ontology : versions.getNewerVersions()) {\r
- VersionMap map = match(graph, artifact, ontology.getResource());\r
- result.addAll(map.getNewerOrEqualVersions(graph, artifact));\r
- }\r
-\r
- return result;\r
- \r
- }\r
-\r
- public static VersionMap match(ReadGraph graph, Resource type, Resource newOntology) throws DatabaseException {\r
- Resource originalOntology = graph.syncRequest(new PossibleIndexRoot(type));\r
- String originalURI = graph.getURI(originalOntology);\r
- String newOntologyURI = graph.getURI(newOntology);\r
- String typeURI = graph.getURI(type);\r
- String typeURIInNewOntology = newOntologyURI + typeURI.substring(originalURI.length());\r
- String[] parts = URIStringUtils.splitURI(typeURIInNewOntology); \r
- Resource newLibrary = graph.getPossibleResource(parts[0]);\r
- if(newLibrary == null) return null;\r
- return graph.syncRequest(new VersionMapRequest(newLibrary));\r
- }\r
-\r
- public static String getStandardNameString(ReadGraph graph, Resource r) throws DatabaseException {\r
- \r
- Layer0 L0 = Layer0.getInstance(graph);\r
- String name = graph.getPossibleRelatedValue(r, L0.HasName, Bindings.STRING);\r
- if(name != null) {\r
- VersionInfo versions = graph.syncRequest(new VersionInfoRequest(r));\r
- if(versions.versions.size() != 1) {\r
- int pos = name.lastIndexOf('@');\r
- if(pos == -1) return name + " [No version]";\r
- String base = name.substring(0, pos);\r
- String version = name.substring(pos+1);\r
- return base + " [Version " + version + "]";\r
- } else {\r
- return versions.baseName;\r
- }\r
- }\r
- // Fallback logic\r
- return NameUtils.getSafeName(graph, r);\r
- \r
- }\r
- \r
- public static String getStandardPathNameString(ReadGraph graph, Resource r) throws DatabaseException {\r
- \r
- Layer0 L0 = Layer0.getInstance(graph);\r
-\r
- String standardName = getStandardNameString(graph, r); \r
- \r
- Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(r));\r
- if(indexRoot.equals(r)) return standardName;\r
- \r
- Resource indexRootParent = graph.getPossibleObject(indexRoot, L0.PartOf);\r
- \r
- String indexRootName = getStandardNameString(graph, indexRoot);\r
- String indexRootParentURI = graph.getPossibleURI(indexRootParent);\r
- \r
- Resource parent = graph.getPossibleObject(r, L0.PartOf);\r
- String parentURI = graph.getURI(parent);\r
- String indexRootURI = graph.getPossibleURI(indexRoot);\r
- String path = (parent.equals(indexRoot)) ? "" : parentURI.substring(indexRootURI.length()+1) + "/"; \r
- \r
- return path + standardName + " in " + indexRootParentURI + indexRootName;\r
- \r
- }\r
-\r
-}\r
+package org.simantics.db.common.utils;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.util.URIStringUtils;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.NamedResource;
+import org.simantics.db.common.request.PossibleIndexRoot;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.layer0.Layer0;
+
+public class Versions {
+
+ public static String make(String baseName, String version) {
+ return baseName + "@" + version;
+ }
+
+ public static String getBaseVersion(String version) {
+ try {
+ Integer.parseInt(version);
+ return "1";
+ } catch (NumberFormatException e) {
+ }
+ return "A";
+ }
+
+ public static String getBaseName(String name) {
+ int pos = name.lastIndexOf('@');
+ if(pos == -1) return name;
+ return name.substring(0, pos);
+ }
+
+ public static String getVersion(String name) {
+ if(name == null) return null;
+ if(!name.contains("@")) return null;
+ int pos = name.lastIndexOf('@');
+ return name.substring(pos+1);
+ }
+
+ public static String getBaseName(ReadGraph graph, Resource artifact) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ String name = graph.getPossibleRelatedValue(artifact, L0.HasName, Bindings.STRING);
+ if(name == null) return "";
+ if(!name.contains("@")) return name;
+ int pos = name.lastIndexOf('@');
+ return name.substring(0, pos);
+ }
+
+ public static String getVersion(ReadGraph graph, Resource artifact) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ String name = graph.getPossibleRelatedValue(artifact, L0.HasName, Bindings.STRING);
+ return getVersion(name);
+ }
+
+ public static Collection<NamedResource> getOlderVersions(ReadGraph graph, Resource artifact) throws DatabaseException {
+
+ Set<NamedResource> result = new HashSet<NamedResource>();
+
+ VersionInfo info = graph.syncRequest(new VersionInfoRequest(artifact));
+ result.addAll(info.getOlderVersions());
+
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(artifact));
+ if(indexRoot == null || indexRoot.equals(artifact)) return result;
+
+ VersionInfo versions = graph.syncRequest(new VersionInfoRequest(indexRoot));
+ for(NamedResource ontology : versions.getOlderVersions()) {
+ VersionMap map = match(graph, artifact, ontology.getResource());
+ result.addAll(map.getOlderOrEqualVersions(graph, artifact));
+ }
+
+ return result;
+
+ }
+
+ public static Collection<NamedResource> getNewerVersions(ReadGraph graph, Resource artifact) throws DatabaseException {
+
+ Set<NamedResource> result = new HashSet<NamedResource>();
+
+ VersionInfo info = graph.syncRequest(new VersionInfoRequest(artifact));
+ result.addAll(info.getNewerVersions());
+
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(artifact));
+ if(indexRoot == null || indexRoot.equals(artifact)) return result;
+
+ VersionInfo versions = graph.syncRequest(new VersionInfoRequest(indexRoot));
+ for(NamedResource ontology : versions.getNewerVersions()) {
+ VersionMap map = match(graph, artifact, ontology.getResource());
+ result.addAll(map.getNewerOrEqualVersions(graph, artifact));
+ }
+
+ return result;
+
+ }
+
+ public static VersionMap match(ReadGraph graph, Resource type, Resource newOntology) throws DatabaseException {
+ Resource originalOntology = graph.syncRequest(new PossibleIndexRoot(type));
+ String originalURI = graph.getURI(originalOntology);
+ String newOntologyURI = graph.getURI(newOntology);
+ String typeURI = graph.getURI(type);
+ String typeURIInNewOntology = newOntologyURI + typeURI.substring(originalURI.length());
+ String[] parts = URIStringUtils.splitURI(typeURIInNewOntology);
+ Resource newLibrary = graph.getPossibleResource(parts[0]);
+ if(newLibrary == null) return null;
+ return graph.syncRequest(new VersionMapRequest(newLibrary));
+ }
+
+ public static String getStandardNameString(ReadGraph graph, Resource r) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+ String name = graph.getPossibleRelatedValue(r, L0.HasName, Bindings.STRING);
+ if(name != null) {
+ VersionInfo versions = graph.syncRequest(new VersionInfoRequest(r));
+ int nVersions = versions.versions.size();
+ // No version display, if "A", "1" or "" is the only version present
+ if ("".equals(versions.version))
+ return nVersions == 1 ? name : name + " [No version]";
+ String base = versions.baseName;
+ String version = versions.version;
+ if (("A".equals(version) || "1".equals(version)) && nVersions == 1)
+ return base;
+ else
+ return base + " [Version " + version + "]";
+ }
+ // Fallback logic
+ return NameUtils.getSafeName(graph, r);
+
+ }
+
+ public static String getStandardPathNameString(ReadGraph graph, Resource r) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+
+ String standardName = getStandardNameString(graph, r);
+
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(r));
+ if(indexRoot.equals(r)) return standardName;
+
+ Resource indexRootParent = graph.getPossibleObject(indexRoot, L0.PartOf);
+
+ String indexRootName = getStandardNameString(graph, indexRoot);
+ String indexRootParentURI = graph.getPossibleURI(indexRootParent);
+
+ Resource parent = graph.getPossibleObject(r, L0.PartOf);
+ String parentURI = graph.getURI(parent);
+ String indexRootURI = graph.getPossibleURI(indexRoot);
+ String path = (parent.equals(indexRoot)) ? "" : parentURI.substring(indexRootURI.length()+1) + "/";
+
+ return path + standardName + " in " + indexRootParentURI + indexRootName;
+
+ }
+
+}