X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.linking.ui%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Flinking%2Freport%2Fevaluator%2FDBUtil.java;h=d41a0616601392bfa676c313b25eaad1d9d71cb9;hb=e88be95edf1f80781646cfdf717ec1b663264179;hp=da7ac7328535fa9209df91b0ef62517721d8540e;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/DBUtil.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/DBUtil.java index da7ac7328..d41a06166 100644 --- a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/DBUtil.java +++ b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/evaluator/DBUtil.java @@ -1,214 +1,214 @@ -package org.simantics.document.linking.report.evaluator; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.simantics.Simantics; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.NamedResource; -import org.simantics.db.common.request.ObjectsWithType; -import org.simantics.db.common.request.WriteRequest; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.request.Read; -import org.simantics.document.linking.ontology.DocumentLink; -import org.simantics.document.linking.report.templates.CustomizableContentProvider; -import org.simantics.document.linking.report.templates.custom.CustomizableContent; -import org.simantics.document.linking.report.templates.custom.EvaluatorCustomizableContent; -import org.simantics.layer0.Layer0; -import org.simantics.objmap.graph.IMapping; -import org.simantics.objmap.graph.Mappings; -import org.simantics.objmap.graph.schema.IMappingSchema; -import org.simantics.objmap.graph.schema.MappingSchemas; -import org.simantics.objmap.graph.schema.SimpleSchema; - -public class DBUtil { - - /** - * Loads single evaluator tree from graph. - * @param graph - * @param res - * @return - * @throws DatabaseException - */ - public static EvaluatorItem load(ReadGraph graph, Resource res) throws DatabaseException{ - IMappingSchema schema = getSchema(graph); - IMapping mapping = Mappings.createWithoutListening(schema); - EvaluatorItem item = (EvaluatorItem)mapping.map(graph, res); - return item; - } - - /** - * Saves a single evaluator tree to graph. - * @param graph - * @param item - * @return - * @throws DatabaseException - */ - public static Resource save(WriteGraph graph, EvaluatorItem item) throws DatabaseException{ - IMappingSchema schema = getSchema(graph); - IMapping mapping = Mappings.createWithoutListening(schema); - Resource resource = mapping.inverseMap(graph, item); - return resource; - } - - /** - * Creates mapping schema for Evaluator tree. - * @param g - * @return - * @throws DatabaseException - */ - public static IMappingSchema getSchema(ReadGraph g) throws DatabaseException{ - try { - SimpleSchema schema = new SimpleSchema(); - schema.addLinkType(MappingSchemas.fromAnnotations(g, AlignmentHint.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, And.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, Constant.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, Date.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, EvaluatorRoot.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, If.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, Lines.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, Or.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, TextSizeHint.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, Variable.class)); - schema.addLinkType(MappingSchemas.fromAnnotations(g, Path.class)); - - return schema; - } catch (IllegalAccessException e) { - throw new DatabaseException(e); - } catch (InstantiationException e) { - throw new DatabaseException(e); - } - } - - /** - * Saves evaluator tree configurations of content provider. - * @param graph - * @param provider - * @param template - * @throws DatabaseException - */ - public static void save(WriteGraph graph, CustomizableContentProvider provider, Resource template) throws DatabaseException{ - Layer0 l0 = Layer0.getInstance(graph); - DocumentLink sl = DocumentLink.getInstance(graph); - - Map existingEvaluatorTemplates = new HashMap(); - for (Resource r : graph.getObjects(template, l0.ConsistsOf)) { - if (graph.isInstanceOf(r, sl.EvaluatorTree_Template)) { - String id = graph.getRelatedValue(r, l0.HasName); - existingEvaluatorTemplates.put(id, r); - } - } - - for (String id : provider.getContentIds()) { - CustomizableContent content = provider.getContent(id); - if (content instanceof EvaluatorCustomizableContent) { - EvaluatorCustomizableContent ecc = (EvaluatorCustomizableContent)content; - Resource item = save(graph, ecc.getItem()); - - Resource treeTemplate = existingEvaluatorTemplates.get(id); - if (treeTemplate == null) { - treeTemplate = graph.newResource(); - graph.claim(treeTemplate, l0.InstanceOf, sl.EvaluatorTree_Template); - graph.claimLiteral(treeTemplate, l0.HasName, id); - graph.claim(template, l0.ConsistsOf, treeTemplate); - } else { - graph.deny(treeTemplate,l0.ConsistsOf); - } - graph.claim(treeTemplate, l0.ConsistsOf, item); - } - } - } - - /** - * Loads evaluator tree configurations from a graph and applies them to content provider. - * @param graph - * @param template - * @param provider - * @throws DatabaseException - */ - public static void load(ReadGraph graph, Resource template, CustomizableContentProvider provider) throws DatabaseException { - Layer0 l0 = Layer0.getInstance(graph); - DocumentLink sl = DocumentLink.getInstance(graph); - - Map existingEvaluatorTemplates = new HashMap(); - for (Resource r : graph.getObjects(template, l0.ConsistsOf)) { - if (graph.isInstanceOf(r, sl.EvaluatorTree_Template)) { - String id = graph.getRelatedValue(r, l0.HasName); - existingEvaluatorTemplates.put(id, r); - } - } - - for (String id : provider.getContentIds()) { - Resource treeTemplate = existingEvaluatorTemplates.get(id); - if (treeTemplate == null) - continue; - - Resource itemRes = graph.getSingleObject(treeTemplate, l0.ConsistsOf); - EvaluatorItem item = load(graph, itemRes); - EvaluatorCustomizableContent ecc = new EvaluatorCustomizableContent(provider.getContent(id).getCustomizationDescription()); - ecc.setItem(item); - provider.setContent(id, ecc); - - } - - } - - public static List getTemplates(final Resource library) throws DatabaseException{ - if (library == null) - throw new IllegalArgumentException("Library cannot be null"); - List templates = Simantics.getSession().syncRequest(new Read>() { - @Override - public List perform(ReadGraph graph) throws DatabaseException{ - return getTemplates(graph, library); - } - }); - return templates; - } - - public static List getTemplates(ReadGraph graph, final Resource library) throws DatabaseException{ - Layer0 l0 = Layer0.getInstance(graph); - DocumentLink sl = DocumentLink.getInstance(graph); - Collection templates = graph.syncRequest(new ObjectsWithType(library, l0.ConsistsOf, sl.ReportTemplate)); - List result = new ArrayList(templates.size()); - for (Resource template : templates) { - String name = graph.getRelatedValue(template, l0.HasName); - result.add(new NamedResource(name, template)); - } - - Collections.sort(result); - return result; - } - - public static void save(final Resource library, final String name,final CustomizableContentProvider provider) throws DatabaseException{ - Simantics.getSession().syncRequest(new WriteRequest() { - - @Override - public void perform(WriteGraph graph) throws DatabaseException { - final List templates = DBUtil.getTemplates(graph,library); - Resource template = null; - for (NamedResource nr : templates) { - if (name.equals(nr.getName())) { - template = nr.getResource(); - break; - } - } - if (template == null) { - Layer0 l0 = Layer0.getInstance(graph); - DocumentLink sl = DocumentLink.getInstance(graph); - template = graph.newResource(); - graph.claim(template, l0.InstanceOf, sl.ReportTemplate); - graph.claim(library, l0.ConsistsOf, template); - graph.claimLiteral(template, l0.HasName, name); - } - DBUtil.save(graph, provider, template); - } - }); - } - -} +package org.simantics.document.linking.report.evaluator; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.simantics.Simantics; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.NamedResource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.request.Read; +import org.simantics.document.linking.ontology.DocumentLink; +import org.simantics.document.linking.report.templates.CustomizableContentProvider; +import org.simantics.document.linking.report.templates.custom.CustomizableContent; +import org.simantics.document.linking.report.templates.custom.EvaluatorCustomizableContent; +import org.simantics.layer0.Layer0; +import org.simantics.objmap.graph.IMapping; +import org.simantics.objmap.graph.Mappings; +import org.simantics.objmap.graph.schema.IMappingSchema; +import org.simantics.objmap.graph.schema.MappingSchemas; +import org.simantics.objmap.graph.schema.SimpleSchema; + +public class DBUtil { + + /** + * Loads single evaluator tree from graph. + * @param graph + * @param res + * @return + * @throws DatabaseException + */ + public static EvaluatorItem load(ReadGraph graph, Resource res) throws DatabaseException{ + IMappingSchema schema = getSchema(graph); + IMapping mapping = Mappings.createWithoutListening(schema); + EvaluatorItem item = (EvaluatorItem)mapping.map(graph, res); + return item; + } + + /** + * Saves a single evaluator tree to graph. + * @param graph + * @param item + * @return + * @throws DatabaseException + */ + public static Resource save(WriteGraph graph, EvaluatorItem item) throws DatabaseException{ + IMappingSchema schema = getSchema(graph); + IMapping mapping = Mappings.createWithoutListening(schema); + Resource resource = mapping.inverseMap(graph, item); + return resource; + } + + /** + * Creates mapping schema for Evaluator tree. + * @param g + * @return + * @throws DatabaseException + */ + public static IMappingSchema getSchema(ReadGraph g) throws DatabaseException{ + try { + SimpleSchema schema = new SimpleSchema(); + schema.addLinkType(MappingSchemas.fromAnnotations(g, AlignmentHint.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, And.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, Constant.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, Date.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, EvaluatorRoot.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, If.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, Lines.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, Or.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, TextSizeHint.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, Variable.class)); + schema.addLinkType(MappingSchemas.fromAnnotations(g, Path.class)); + + return schema; + } catch (IllegalAccessException e) { + throw new DatabaseException(e); + } catch (InstantiationException e) { + throw new DatabaseException(e); + } + } + + /** + * Saves evaluator tree configurations of content provider. + * @param graph + * @param provider + * @param template + * @throws DatabaseException + */ + public static void save(WriteGraph graph, CustomizableContentProvider provider, Resource template) throws DatabaseException{ + Layer0 l0 = Layer0.getInstance(graph); + DocumentLink sl = DocumentLink.getInstance(graph); + + Map existingEvaluatorTemplates = new HashMap(); + for (Resource r : graph.getObjects(template, l0.ConsistsOf)) { + if (graph.isInstanceOf(r, sl.EvaluatorTree_Template)) { + String id = graph.getRelatedValue(r, l0.HasName); + existingEvaluatorTemplates.put(id, r); + } + } + + for (String id : provider.getContentIds()) { + CustomizableContent content = provider.getContent(id); + if (content instanceof EvaluatorCustomizableContent) { + EvaluatorCustomizableContent ecc = (EvaluatorCustomizableContent)content; + Resource item = save(graph, ecc.getItem()); + + Resource treeTemplate = existingEvaluatorTemplates.get(id); + if (treeTemplate == null) { + treeTemplate = graph.newResource(); + graph.claim(treeTemplate, l0.InstanceOf, sl.EvaluatorTree_Template); + graph.claimLiteral(treeTemplate, l0.HasName, id); + graph.claim(template, l0.ConsistsOf, treeTemplate); + } else { + graph.deny(treeTemplate,l0.ConsistsOf); + } + graph.claim(treeTemplate, l0.ConsistsOf, item); + } + } + } + + /** + * Loads evaluator tree configurations from a graph and applies them to content provider. + * @param graph + * @param template + * @param provider + * @throws DatabaseException + */ + public static void load(ReadGraph graph, Resource template, CustomizableContentProvider provider) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + DocumentLink sl = DocumentLink.getInstance(graph); + + Map existingEvaluatorTemplates = new HashMap(); + for (Resource r : graph.getObjects(template, l0.ConsistsOf)) { + if (graph.isInstanceOf(r, sl.EvaluatorTree_Template)) { + String id = graph.getRelatedValue(r, l0.HasName); + existingEvaluatorTemplates.put(id, r); + } + } + + for (String id : provider.getContentIds()) { + Resource treeTemplate = existingEvaluatorTemplates.get(id); + if (treeTemplate == null) + continue; + + Resource itemRes = graph.getSingleObject(treeTemplate, l0.ConsistsOf); + EvaluatorItem item = load(graph, itemRes); + EvaluatorCustomizableContent ecc = new EvaluatorCustomizableContent(provider.getContent(id).getCustomizationDescription()); + ecc.setItem(item); + provider.setContent(id, ecc); + + } + + } + + public static List getTemplates(final Resource library) throws DatabaseException{ + if (library == null) + throw new IllegalArgumentException("Library cannot be null"); + List templates = Simantics.getSession().syncRequest(new Read>() { + @Override + public List perform(ReadGraph graph) throws DatabaseException{ + return getTemplates(graph, library); + } + }); + return templates; + } + + public static List getTemplates(ReadGraph graph, final Resource library) throws DatabaseException{ + Layer0 l0 = Layer0.getInstance(graph); + DocumentLink sl = DocumentLink.getInstance(graph); + Collection templates = graph.syncRequest(new ObjectsWithType(library, l0.ConsistsOf, sl.ReportTemplate)); + List result = new ArrayList(templates.size()); + for (Resource template : templates) { + String name = graph.getRelatedValue(template, l0.HasName); + result.add(new NamedResource(name, template)); + } + + Collections.sort(result); + return result; + } + + public static void save(final Resource library, final String name,final CustomizableContentProvider provider) throws DatabaseException{ + Simantics.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + final List templates = DBUtil.getTemplates(graph,library); + Resource template = null; + for (NamedResource nr : templates) { + if (name.equals(nr.getName())) { + template = nr.getResource(); + break; + } + } + if (template == null) { + Layer0 l0 = Layer0.getInstance(graph); + DocumentLink sl = DocumentLink.getInstance(graph); + template = graph.newResource(); + graph.claim(template, l0.InstanceOf, sl.ReportTemplate); + graph.claim(library, l0.ConsistsOf, template); + graph.claimLiteral(template, l0.HasName, name); + } + DBUtil.save(graph, provider, template); + } + }); + } + +}