X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FOntologyCombinator.java;fp=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FOntologyCombinator.java;h=733d027103d964ac31fa5ea982462de6ef0c1a1e;hb=8c7637425667bd9710be0fe6afe437050fea59b7;hp=0d084161dc4839b421a58ad2bd6585cddebaffeb;hpb=3474f080188aca472256339b9c3458bac3dd6b82;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/OntologyCombinator.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/OntologyCombinator.java index 0d08416..733d027 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/OntologyCombinator.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/OntologyCombinator.java @@ -1,181 +1,184 @@ -package org.simantics.xml.sax; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class OntologyCombinator { - - - public static void combine(File[] inputFiles, File outputFile) throws IOException{ - Set resources = new HashSet<>(); - List ontologyUris = new ArrayList<>(); - List classNames = new ArrayList<>(); - String packageLine = null; - - - String packageLineStart = "package"; - String resourceLineStart = "public final Resource "; - String uriLineStart = "public static final String "; - - - - for (File inputFile : inputFiles) { - BufferedReader reader = new BufferedReader(new FileReader(inputFile)); - try { - String line; - String uri = null; - String filename = inputFile.getName(); - String classname = filename.substring(0,filename.length()-5); - classNames.add(classname); - while ((line = reader.readLine()) != null) { - line = line.trim(); - if (line.startsWith(resourceLineStart)) { - String res = line.substring(resourceLineStart.length(), line.length()-1); - resources.add(res); - } else if (line.startsWith(uriLineStart)) { - String euri = line.substring(line.indexOf('"')+1, line.length()-2); - if (uri == null) { - uri = euri; - } else { - int max = Math.min(euri.length(), uri.length()); - for (int i = 0; i < max; i++) { - if (euri.charAt(i) != uri.charAt(i)) { - uri = uri.substring(0,i); - break; - } - } - } - } else if (line.startsWith(packageLineStart)) { - packageLine = line; - } - } - if (uri != null && uri.length() > 6) { - if (uri.endsWith("/")) { - uri = uri.substring(0, uri.length()-1); - } - ontologyUris.add(uri); - } - else - throw new IOException("Could not resolve ontology uri for file " + inputFile.getName()); - } finally { - reader.close(); - } - } - List sortedResourcses = new ArrayList<>(); - sortedResourcses.addAll(resources); - Collections.sort(sortedResourcses); - - PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(outputFile))); - String className = outputFile.getName(); - int dp = className.indexOf("."); - if (dp > 0) - className = className.substring(0,dp); - - try { - writer.println(packageLine); - writer.println(); - writer.println("import java.lang.reflect.Field;"); - writer.println("import java.util.Collection;"); - writer.println("import java.util.HashMap;"); - writer.println("import java.util.Map;"); - writer.println("import org.simantics.Simantics;"); - writer.println("import org.simantics.db.ReadGraph;"); - writer.println("import org.simantics.db.Resource;"); - writer.println("import org.simantics.db.exception.DatabaseException;"); - writer.println("import org.simantics.db.request.Read;"); - writer.println("import org.simantics.layer0.Layer0;"); - writer.println(); - writer.println(); - writer.println("public class " + className + " {"); - writer.println(" private static boolean init = false;"); - writer.println(" private static Map resourceObjects = new HashMap<>();"); - writer.println(" private static Map loaderObjects = new HashMap<>();"); - writer.println(); - writer.println(" private Resource ontologyResource;"); - writer.println(" private Object resourceObject;"); - writer.println(); - writer.println(" static void init(ReadGraph graph) throws DatabaseException{"); - writer.println(" if (init)"); - writer.println(" return;"); - writer.println(" "); - for (int i = 0; i < inputFiles.length; i++) { - writer.println(" add(graph.getResource(\"" +ontologyUris.get(i) +"\"), " + classNames.get(i) +".getInstance(graph));"); - } - writer.println(" "); - writer.println(" init = true;"); - writer.println(" }"); - writer.println(" "); - writer.println(" public static void add(Resource resource, Object object) {"); - writer.println(" if (resource == null || object == null)"); - writer.println(" throw new IllegalArgumentException();"); - writer.println(" resourceObjects.put(resource, object);"); - writer.println(" loaderObjects.put(resource, new "+className+"(resource, object));"); - writer.println(" }"); - writer.println(" "); - writer.println(" public static "+className+" getOntology(final Resource res) throws DatabaseException {"); - writer.println(" return Simantics.getSession().syncRequest(new Read<"+className+">() {"); - writer.println(" @Override"); - writer.println(" public "+className+" perform(ReadGraph graph) throws DatabaseException {"); - writer.println(" return getOntology(graph, res);"); - writer.println(" }"); - writer.println(" });"); - writer.println(" }"); - writer.println(" "); - writer.println(" public static "+className+" getOntology(ReadGraph graph, Resource res) throws DatabaseException{"); - writer.println(" init(graph);"); - writer.println(" Layer0 L0 = Layer0.getInstance(graph);"); - writer.println(" Collection types = graph.getTypes(res);"); - writer.println(" for (Resource type : types) {"); - writer.println(" Resource part = graph.getPossibleObject(type, L0.PartOf);"); - writer.println(" while (part != null) {"); - writer.println(" if (loaderObjects.containsKey(part))"); - writer.println(" return loaderObjects.get(part);"); - writer.println(" part = graph.getPossibleObject(part, L0.PartOf);"); - writer.println(" }"); - writer.println(" }"); - writer.println(" return null;"); - writer.println(" }"); - writer.println(" "); - writer.println(" private "+className+"(Resource ontologyRes, Object resourceObject) {"); - writer.println(" this.ontologyResource = ontologyRes;"); - writer.println(" this.resourceObject = resourceObject;"); - writer.println(" init();"); - writer.println(" }"); - writer.println(" "); - writer.println(" private Resource get(String name) {"); - writer.println(" try {"); - writer.println(" Field field = resourceObject.getClass().getDeclaredField(name);"); - writer.println(" return (Resource)field.get(resourceObject);"); - writer.println(" } catch (Exception e){"); - writer.println(" return null;"); - writer.println(" }"); - writer.println(" }"); - writer.println(" "); - for (String s : sortedResourcses) { - writer.println(" public Resource "+s+";"); - } - writer.println(" "); - writer.println(" private void init() {"); - for (String s : sortedResourcses) { - writer.println(" "+s+" = get(\""+s+"\");"); - } - writer.println(" }"); - writer.println("}"); - - - } finally { - writer.close(); - } - - } -} +package org.simantics.xml.sax; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class OntologyCombinator { + + String packageLineStart = new String("package"); + String resourceLineStart = "public final Resource "; + String uriLineStart = "public static final String "; + + Set resources = new HashSet<>(); + List ontologyUris = new ArrayList<>(); + List classNames = new ArrayList<>(); + String packageLine = null; + List sortedResourcses; + + protected void process(File[] inputFiles) throws IOException { + for (File inputFile : inputFiles) { + BufferedReader reader = new BufferedReader(new FileReader(inputFile)); + try { + String line; + String uri = null; + String filename = inputFile.getName(); + String classname = filename.substring(0,filename.length()-5); + classNames.add(classname); + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.startsWith(resourceLineStart)) { + String res = line.substring(resourceLineStart.length(), line.length()-1); + resources.add(res); + } else if (line.startsWith(uriLineStart)) { + String euri = line.substring(line.indexOf('"')+1, line.length()-2); + if (uri == null) { + uri = euri; + } else { + int max = Math.min(euri.length(), uri.length()); + for (int i = 0; i < max; i++) { + if (euri.charAt(i) != uri.charAt(i)) { + uri = uri.substring(0,i); + break; + } + } + } + } else if (line.startsWith(packageLineStart)) { + packageLine = line; + } + } + if (uri != null && uri.length() > 6) { + if (uri.endsWith("/")) { + uri = uri.substring(0, uri.length()-1); + } + ontologyUris.add(uri); + } + else + throw new IOException("Could not resolve ontology uri for file " + inputFile.getName()); + } finally { + reader.close(); + } + } + + sortedResourcses = new ArrayList<>(); + sortedResourcses.addAll(resources); + Collections.sort(sortedResourcses); + + } + + public void combine(File[] inputFiles, File outputFile) throws IOException{ + process(inputFiles); + + PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(outputFile))); + String className = outputFile.getName(); + int dp = className.indexOf("."); + if (dp > 0) + className = className.substring(0,dp); + + try { + writer.println(packageLine); + writer.println(); + writer.println("import java.lang.reflect.Field;"); + writer.println("import java.util.Collection;"); + writer.println("import java.util.HashMap;"); + writer.println("import java.util.Map;"); + writer.println("import org.simantics.Simantics;"); + writer.println("import org.simantics.db.ReadGraph;"); + writer.println("import org.simantics.db.Resource;"); + writer.println("import org.simantics.db.exception.DatabaseException;"); + writer.println("import org.simantics.db.request.Read;"); + writer.println("import org.simantics.layer0.Layer0;"); + writer.println(); + writer.println(); + writer.println("public class " + className + " {"); + writer.println(" private static boolean init = false;"); + writer.println(" private static Map resourceObjects = new HashMap<>();"); + writer.println(" private static Map loaderObjects = new HashMap<>();"); + writer.println(); + writer.println(" private Resource ontologyResource;"); + writer.println(" private Object resourceObject;"); + writer.println(); + writer.println(" static void init(ReadGraph graph) throws DatabaseException{"); + writer.println(" if (init)"); + writer.println(" return;"); + writer.println(" "); + for (int i = 0; i < inputFiles.length; i++) { + writer.println(" add(graph.getResource(\"" +ontologyUris.get(i) +"\"), " + classNames.get(i) +".getInstance(graph));"); + } + writer.println(" "); + writer.println(" init = true;"); + writer.println(" }"); + writer.println(" "); + writer.println(" public static void add(Resource resource, Object object) {"); + writer.println(" if (resource == null || object == null)"); + writer.println(" throw new IllegalArgumentException();"); + writer.println(" resourceObjects.put(resource, object);"); + writer.println(" loaderObjects.put(resource, new "+className+"(resource, object));"); + writer.println(" }"); + writer.println(" "); + writer.println(" public static "+className+" getOntology(final Resource res) throws DatabaseException {"); + writer.println(" return Simantics.getSession().syncRequest(new Read<"+className+">() {"); + writer.println(" @Override"); + writer.println(" public "+className+" perform(ReadGraph graph) throws DatabaseException {"); + writer.println(" return getOntology(graph, res);"); + writer.println(" }"); + writer.println(" });"); + writer.println(" }"); + writer.println(" "); + writer.println(" public static "+className+" getOntology(ReadGraph graph, Resource res) throws DatabaseException{"); + writer.println(" init(graph);"); + writer.println(" Layer0 L0 = Layer0.getInstance(graph);"); + writer.println(" Collection types = graph.getTypes(res);"); + writer.println(" for (Resource type : types) {"); + writer.println(" Resource part = graph.getPossibleObject(type, L0.PartOf);"); + writer.println(" while (part != null) {"); + writer.println(" if (loaderObjects.containsKey(part))"); + writer.println(" return loaderObjects.get(part);"); + writer.println(" part = graph.getPossibleObject(part, L0.PartOf);"); + writer.println(" }"); + writer.println(" }"); + writer.println(" return null;"); + writer.println(" }"); + writer.println(" "); + writer.println(" private "+className+"(Resource ontologyRes, Object resourceObject) {"); + writer.println(" this.ontologyResource = ontologyRes;"); + writer.println(" this.resourceObject = resourceObject;"); + writer.println(" init();"); + writer.println(" }"); + writer.println(" "); + writer.println(" private Resource get(String name) {"); + writer.println(" try {"); + writer.println(" Field field = resourceObject.getClass().getDeclaredField(name);"); + writer.println(" return (Resource)field.get(resourceObject);"); + writer.println(" } catch (Exception e){"); + writer.println(" return null;"); + writer.println(" }"); + writer.println(" }"); + writer.println(" "); + for (String s : sortedResourcses) { + writer.println(" public Resource "+s+";"); + } + writer.println(" "); + writer.println(" private void init() {"); + for (String s : sortedResourcses) { + writer.println(" "+s+" = get(\""+s+"\");"); + } + writer.println(" }"); + writer.println("}"); + + + } finally { + writer.close(); + } + + } +}