]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.common/src/org/simantics/db/common/utils/Versions.java
Always show version label for non-initial versions.
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / utils / Versions.java
index 8670896b990e426246581700de9cef15d463f1a3..58894674506013b2b9835dd4450b9a63e7001737 100644 (file)
-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;
+       
+    }
+
+}