-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);
+ }
+
+}