]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.reflection/src/org/simantics/scl/reflection/OntologyVersions.java
Revert "Prime SCL BindingRegistry to shave ~0.5s from startup"
[simantics/platform.git] / bundles / org.simantics.scl.reflection / src / org / simantics / scl / reflection / OntologyVersions.java
index 77fb9e65a9dab434c8c6119cd12326404633e576..cfc1f6c401b8849c2c9eef1cbd53243852dfe527 100644 (file)
-package org.simantics.scl.reflection;\r
-\r
-import java.net.URL;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-import org.eclipse.core.internal.runtime.PlatformActivator;\r
-import org.osgi.framework.Bundle;\r
-import org.osgi.framework.Version;\r
-\r
-public class OntologyVersions {\r
-\r
-       private static final boolean PRINT = false;\r
-       \r
-       private static OntologyVersions INSTANCE;\r
-       \r
-       private final Pattern versionExtractPattern = Pattern.compile("^.*-(\\d+\\.\\d+)");\r
-\r
-       private Map<String, String> unversionedToCurrent = new HashMap<String, String>();\r
-       private Map<String, String> currentToUnversioned = new HashMap<String, String>();\r
-       final private Pattern unversionedPattern;\r
-       final private Pattern currentPattern;\r
-       \r
-       private OntologyVersions() {\r
-\r
-               Map<String, Version> versions = new HashMap<String, Version>(); \r
-               \r
-               if(PRINT) System.err.println("== Ontology report ==");\r
-       for(Bundle bundle : PlatformActivator.getContext().getBundles()) {\r
-               \r
-               URL url = bundle.getEntry("graph.tg");\r
-               if (url==null) continue;\r
-               try {\r
-                       String name = (String) bundle.getHeaders().get("Bundle-Name");\r
-                       Version osgiVersion = bundle.getVersion();\r
-                       Version previous = versions.get(name);\r
-                       if(previous == null || osgiVersion.compareTo(previous) > 0) versions.put(name, osgiVersion);\r
-                       if(PRINT) System.err.println("found: " + name + ":" + osgiVersion);\r
-               } finally {\r
-               }\r
-               \r
-       }\r
-       \r
-       for(Map.Entry<String, Version> entry : versions.entrySet()) {\r
-                       int minor = entry.getValue().getMinor();\r
-                       int major = entry.getValue().getMajor();\r
-                       String unversioned = entry.getKey() + "-0.0";\r
-                       String versioned = entry.getKey() + "-" + major + "." + minor;\r
-                       unversionedToCurrent.put(unversioned, versioned);\r
-                       currentToUnversioned.put(versioned, unversioned);\r
-                       if(PRINT) System.err.println("latest: " + versioned);\r
-       }\r
-       \r
-               if(PRINT) System.err.println("== Ontology report ends ==");\r
-       \r
-       unversionedPattern = Pattern.compile("(" + joinKeys(unversionedToCurrent) + ")");\r
-       currentPattern = Pattern.compile("(" + joinKeys(currentToUnversioned) + ")");\r
-               \r
-       }\r
-       \r
-       public static OntologyVersions getInstance() {\r
-               if(INSTANCE == null) {\r
-                       INSTANCE = new OntologyVersions();\r
-               }\r
-               return INSTANCE;\r
-       }\r
-\r
-    private String joinKeys(Map<String,String> tokens) {\r
-       Collection<String> keys = tokens.keySet();\r
-       StringBuilder b = new StringBuilder();\r
-       boolean first = true;\r
-       for(String key : keys) {\r
-               if(!first) b.append("|");\r
-               first = false;\r
-               b.append(key);\r
-       }\r
-       return b.toString();\r
-    }\r
-    \r
-    /*\r
-     * Replaces all references to URIs with unversioned ontologies with current versions\r
-     * e.g. http://www.simantics.org/Layer0-0.0 => http://www.simantics.org/Layer0-1.0\r
-     * \r
-     * @param text Any string\r
-     */\r
-    public String currentVersion(String text) {\r
-       \r
-       Matcher matcher = unversionedPattern.matcher(text);\r
-\r
-       StringBuffer sb = new StringBuffer(text.length());\r
-       while(matcher.find()) {\r
-           matcher.appendReplacement(sb, unversionedToCurrent.get(matcher.group(1)));\r
-       }\r
-       matcher.appendTail(sb);\r
-       return sb.toString();\r
-\r
-    }\r
-    \r
-    /*\r
-     * Replaces all references to URIs from current ontologies with unversioned ones\r
-     * e.g. http://www.simantics.org/Layer0-1.0 => http://www.simantics.org/Layer0-0.0\r
-     * \r
-     * @param text Any string\r
-     */\r
-    public String unversioned(String text) {\r
-       \r
-       Matcher matcher = currentPattern.matcher(text);\r
-\r
-       StringBuffer sb = new StringBuffer(text.length());\r
-       while(matcher.find()) {\r
-           matcher.appendReplacement(sb, currentToUnversioned.get(matcher.group(1)));\r
-       }\r
-       matcher.appendTail(sb);\r
-       return sb.toString();\r
-\r
-    }\r
-\r
-    /**\r
-     * Calculates the current version of the specified version-agnostic URI and\r
-     * returns only the version part.\r
-     * e.g. http://www.simantics.org/Layer0-0.0 => 1.1\r
-     * \r
-     * @param text Any string\r
-     */\r
-    public String currentOntologyVersion(String ontologyURI) {\r
-        String versionedURI = currentVersion(ontologyURI);\r
-        Matcher m = versionExtractPattern.matcher(versionedURI);\r
-        if (!m.matches())\r
-            throw new IllegalArgumentException("Cannot extract version from ontology URI '" + ontologyURI + "' with pattern " + versionExtractPattern.pattern());\r
-        return m.group(1);\r
-    }\r
-    \r
-}\r
+package org.simantics.scl.reflection;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.internal.runtime.PlatformActivator;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+public class OntologyVersions {
+
+       private static final boolean PRINT = false;
+       
+       private static OntologyVersions INSTANCE;
+       
+       private final Pattern versionExtractPattern = Pattern.compile("^.*-(\\d+\\.\\d+)");
+
+       private Map<String, String> unversionedToCurrent = new HashMap<String, String>();
+       private Map<String, String> currentToUnversioned = new HashMap<String, String>();
+       final private Pattern unversionedPattern;
+       final private Pattern currentPattern;
+       
+       private OntologyVersions() {
+
+               Map<String, Version> versions = new HashMap<String, Version>(); 
+               
+               if(PRINT) System.err.println("== Ontology report ==");
+       for(Bundle bundle : PlatformActivator.getContext().getBundles()) {
+               
+               URL url = bundle.getEntry("graph.tg");
+               if (url==null) continue;
+               try {
+                       String name = (String) bundle.getHeaders().get("Bundle-Name");
+                       Version osgiVersion = bundle.getVersion();
+                       Version previous = versions.get(name);
+                       if(previous == null || osgiVersion.compareTo(previous) > 0) versions.put(name, osgiVersion);
+                       if(PRINT) System.err.println("found: " + name + ":" + osgiVersion);
+               } finally {
+               }
+               
+       }
+       
+       for(Map.Entry<String, Version> entry : versions.entrySet()) {
+                       int minor = entry.getValue().getMinor();
+                       int major = entry.getValue().getMajor();
+                       String unversioned = entry.getKey() + "-0.0";
+                       String versioned = entry.getKey() + "-" + major + "." + minor;
+                       unversionedToCurrent.put(unversioned, versioned);
+                       currentToUnversioned.put(versioned, unversioned);
+                       if(PRINT) System.err.println("latest: " + versioned);
+       }
+       
+               if(PRINT) System.err.println("== Ontology report ends ==");
+       
+       unversionedPattern = Pattern.compile("(" + joinKeys(unversionedToCurrent) + ")");
+       currentPattern = Pattern.compile("(" + joinKeys(currentToUnversioned) + ")");
+               
+       }
+       
+       public static OntologyVersions getInstance() {
+               if(INSTANCE == null) {
+                       INSTANCE = new OntologyVersions();
+               }
+               return INSTANCE;
+       }
+
+    private String joinKeys(Map<String,String> tokens) {
+       Collection<String> keys = tokens.keySet();
+       StringBuilder b = new StringBuilder();
+       boolean first = true;
+       for(String key : keys) {
+               if(!first) b.append("|");
+               first = false;
+               b.append(key);
+       }
+       return b.toString();
+    }
+    
+    /*
+     * Replaces all references to URIs with unversioned ontologies with current versions
+     * e.g. http://www.simantics.org/Layer0-0.0 => http://www.simantics.org/Layer0-1.0
+     * 
+     * @param text Any string
+     */
+    public String currentVersion(String text) {
+       
+       Matcher matcher = unversionedPattern.matcher(text);
+
+       StringBuffer sb = new StringBuffer(text.length());
+       while(matcher.find()) {
+           matcher.appendReplacement(sb, unversionedToCurrent.get(matcher.group(1)));
+       }
+       matcher.appendTail(sb);
+       return sb.toString();
+
+    }
+    
+    /*
+     * Replaces all references to URIs from current ontologies with unversioned ones
+     * e.g. http://www.simantics.org/Layer0-1.0 => http://www.simantics.org/Layer0-0.0
+     * 
+     * @param text Any string
+     */
+    public String unversioned(String text) {
+       
+       Matcher matcher = currentPattern.matcher(text);
+
+       StringBuffer sb = new StringBuffer(text.length());
+       while(matcher.find()) {
+           matcher.appendReplacement(sb, currentToUnversioned.get(matcher.group(1)));
+       }
+       matcher.appendTail(sb);
+       return sb.toString();
+
+    }
+
+    /**
+     * Calculates the current version of the specified version-agnostic URI and
+     * returns only the version part.
+     * e.g. http://www.simantics.org/Layer0-0.0 => 1.1
+     * 
+     * @param text Any string
+     */
+    public String currentOntologyVersion(String ontologyURI) {
+        String versionedURI = currentVersion(ontologyURI);
+        Matcher m = versionExtractPattern.matcher(versionedURI);
+        if (!m.matches())
+            throw new IllegalArgumentException("Cannot extract version from ontology URI '" + ontologyURI + "' with pattern " + versionExtractPattern.pattern());
+        return m.group(1);
+    }
+    
+}