X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.server%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fserver%2FDocumentServerUtils.java;h=d8294c5e09e0c202e6a96bf2ade19932281d6fae;hb=68ce0966a57f5153b133c6283fdbae10f683b745;hp=8e0a0e99138ff728e8a37fa733cb8f1df21c9276;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.server/src/org/simantics/document/server/DocumentServerUtils.java b/bundles/org.simantics.document.server/src/org/simantics/document/server/DocumentServerUtils.java index 8e0a0e991..d8294c5e0 100644 --- a/bundles/org.simantics.document.server/src/org/simantics/document/server/DocumentServerUtils.java +++ b/bundles/org.simantics.document.server/src/org/simantics/document/server/DocumentServerUtils.java @@ -3,6 +3,8 @@ package org.simantics.document.server; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -10,7 +12,7 @@ import java.util.TreeMap; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; -import org.simantics.db.common.request.UnaryRead; +import org.simantics.db.common.request.BinaryRead; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.VariableRead; import org.simantics.db.layer0.variable.ProxyChildVariable; @@ -18,9 +20,10 @@ import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.document.base.ontology.DocumentationResource; import org.simantics.document.server.Functions.RootVariable; +import org.simantics.document.server.request.NodeRequest; +import org.simantics.document.server.request.NodeRequestUtils; import org.simantics.structural2.variables.Connection; import org.simantics.structural2.variables.VariableConnectionPointDescriptor; -import org.simantics.utils.datastructures.Pair; import org.simantics.utils.strings.AlphanumComparator; public class DocumentServerUtils { @@ -70,32 +73,29 @@ public class DocumentServerUtils { SortedMap childMap = new TreeMap(AlphanumComparator.COMPARATOR); - for(Variable property : variable.getProperties(graph)) { - Collection classifications = property.getPossiblePropertyValue(graph, Variables.CLASSIFICATIONS); - if(classifications != null) { - if(classifications.contains(DocumentationResource.URIs.Document_ChildRelation)) { - Resource cp = property.getPossiblePredicateResource(graph); - String i = graph.getRelatedValue(cp, DOC.Document_ChildRelation_ordinal, Bindings.STRING); - - Connection conn = property.getValue(graph); - Variable childConnectionPoint = DocumentServerUtils.getPossibleOtherConnectionPoint(graph, property, conn); - if(childConnectionPoint != null) { - childMap.put(i, childConnectionPoint.getParent(graph)); - } - } else if (DOC.Relations_partN.equals(property.getPossiblePredicateResource(graph))) { - Connection conn = property.getValue(graph); - - for (Variable childConnectionPoint : DocumentServerUtils.getOtherConnectionPoints(graph, property, conn)) { - Variable child = childConnectionPoint.getParent(graph); - String i = findManualOrdinal(graph, child); - if (i == null) { - i = "0"; - } - childMap.put(i, child); - } + for(Variable property : variable.getProperties(graph, DocumentationResource.URIs.Document_ChildRelation)) { + Resource cp = property.getPossiblePredicateResource(graph); + String i = graph.getRelatedValue(cp, DOC.Document_ChildRelation_ordinal, Bindings.STRING); + Connection conn = property.getValue(graph); + Variable childConnectionPoint = DocumentServerUtils.getPossibleOtherConnectionPoint(graph, property, conn); + if(childConnectionPoint != null) { + childMap.put(i, childConnectionPoint.getParent(graph)); + } + } + + Variable property = variable.getPossibleProperty(graph, "partN"); + if(property != null) { + Connection conn = property.getValue(graph); + for (Variable childConnectionPoint : DocumentServerUtils.getOtherConnectionPoints(graph, property, conn)) { + Variable child = childConnectionPoint.getParent(graph); + String i = findManualOrdinal(graph, child); + if (i == null) { + i = "0"; } + childMap.put(i, child); } } + return childMap.values(); } @@ -126,7 +126,7 @@ public class DocumentServerUtils { public static Variable getPossibleOtherConnectionPoint(ReadGraph graph, Variable connectionPoint, Connection conn) throws DatabaseException { - Collection descs = conn.getConnectionPointDescriptors(graph, null); + Collection descs = conn.getConnectionPointDescriptors(graph, connectionPoint.getParent(graph), null); if(descs.size() != 2) return null; for(VariableConnectionPointDescriptor desc : descs) { @@ -137,12 +137,30 @@ public class DocumentServerUtils { return null; } + + public static Variable getPossibleChildConnectionPoint(ReadGraph graph, Variable connectionPoint, Connection conn) throws DatabaseException { + + Collection descs = conn.getConnectionPointDescriptors(graph, connectionPoint.getParent(graph), null); + if(descs.size() != 2) return null; + + DocumentationResource DOC = DocumentationResource.getInstance(graph); + + for(VariableConnectionPointDescriptor desc : descs) { + Resource res = desc.getConnectionPointResource(graph); + if(graph.isInstanceOf(res, DOC.Relations_parentRelation)) continue; + //if(desc.isFlattenedFrom(graph, connectionPoint)) continue; + return desc.getVariable(graph); + } + + return null; + + } public static Collection getOtherConnectionPoints(ReadGraph graph, Variable connectionPoint, Connection conn) throws DatabaseException { ArrayList connectionPoints = new ArrayList(); - Collection descs = conn.getConnectionPointDescriptors(graph, null); + Collection descs = conn.getConnectionPointDescriptors(graph, connectionPoint.getParent(graph), null); for(VariableConnectionPointDescriptor desc : descs) { if(desc.isFlattenedFrom(graph, connectionPoint)) continue; @@ -155,7 +173,7 @@ public class DocumentServerUtils { public static Variable getPossibleCommandTriggerConnectionPoint(ReadGraph graph, Variable connectionPoint, Connection conn) throws DatabaseException { - Collection cpts = conn.getConnectionPoints(graph, null); + Collection cpts = conn.getConnectionPoints(graph, connectionPoint.getParent(graph), null); Variable result = null; @@ -173,7 +191,7 @@ public class DocumentServerUtils { public static Collection getPossibleOtherConnectionPoints(ReadGraph graph, Variable connectionPoint, Connection conn) throws DatabaseException { - Collection cpts = conn.getConnectionPoints(graph, null); + Collection cpts = conn.getConnectionPoints(graph, connectionPoint.getParent(graph), null); if(cpts.size() < 2) return Collections.emptyList(); @@ -196,24 +214,6 @@ public class DocumentServerUtils { } - public static class DocumentValue extends VariableRead { - - public DocumentValue(Variable variable) { - super(variable); - } - - @Override - public Object perform(ReadGraph graph) throws DatabaseException { - return variable.getValue(graph); - } - - @Override - public String toString() { - return "DocumentValue[" + variable + "]"; - } - - } - public static Object getValue(ReadGraph graph, Variable attrib) throws DatabaseException { return graph.syncRequest(new DocumentValue(attrib)); } @@ -236,11 +236,11 @@ public class DocumentServerUtils { if (otherCp != null) { return otherCp; } else { - Variable parentCp = graph.sync(new UnaryRead(conn) { + Variable parentCp = graph.sync(new BinaryRead(connectionPoint.getParent(graph), conn) { @Override public Variable perform(ReadGraph graph) throws DatabaseException { DocumentationResource DOC = DocumentationResource.getInstance(graph); - Collection descs = parameter.getConnectionPointDescriptors(graph, null); + Collection descs = parameter2.getConnectionPointDescriptors(graph, parameter, null); for(VariableConnectionPointDescriptor desc : descs) { if (DOC.Relations_partN.equals(desc.getConnectionPointResource(graph))) { @@ -293,43 +293,68 @@ public class DocumentServerUtils { return variable.getProperties(graph, DOC.Document_AttributeRelation); } - static class AttributesRequest extends VariableRead, Collection>> { + public static class AttributesRequest extends VariableRead { public AttributesRequest(Variable variable) { super(variable); } @Override - public Pair,Collection> perform(ReadGraph graph) throws DatabaseException { - ArrayList statics = new ArrayList(); - ArrayList dynamics = new ArrayList(); - DocumentationResource DOC = DocumentationResource.getInstance(graph); - for(Variable property : getAttributes(graph, DOC, variable)) { - Boolean defaultProperty = property.getPossiblePropertyValue(graph, "default"); - if(defaultProperty != null && defaultProperty) { -// System.err.println("" + property.getURI(graph) + " is default"); - continue; - } -// else { -// System.err.println("" + property.getURI(graph) + " is not default"); -// } - Boolean dynamicProperty = property.getPossiblePropertyValue(graph, DOC.Document_AttributeRelation_dynamic); - if(dynamicProperty != null && dynamicProperty) dynamics.add(property); - else statics.add(property); - } - return new Pair, Collection>(statics, dynamics); + public JSONObject perform(ReadGraph graph) throws DatabaseException { + + DocumentationResource DOC = DocumentationResource.getInstance(graph); + + DocumentProperties properties = variable.getPropertyValue(graph, DOC.Properties_primitiveProperties); + + return computeStatic(graph, variable, properties); + + } + + JSONObject computeStatic(ReadGraph graph, Variable variable, DocumentProperties statics) throws DatabaseException { + + JSONObject base = graph.syncRequest(new org.simantics.document.server.request.DefaultFields(variable)); + JSONObject object = base.clone(); + + for(String name : statics.getKeys(graph, variable)) { + try { + if (name.equals(NodeRequest.PROPERTY_VALUE_EXCEPTIONS)) { + @SuppressWarnings("unchecked") + Map exceptions = (Map)statics.getValue(graph, variable, name);//(Map)DocumentServerUtils.getValue(graph, attrib); + + List errorList = object.getJSONField(NodeRequest.ERRORS); + if(errorList == null) + errorList = new ArrayList(); + + for (Map.Entry entry : exceptions.entrySet()) { + String errorMessage = NodeRequestUtils.formatErrorMessage(entry.getKey(), entry.getValue()); + errorList.add(errorMessage); + } + object.addJSONField(NodeRequest.ERRORS, errorList); + + } else { + object.addJSONField(name, statics.getValue(graph, variable, name)); + } + } catch (Throwable t) { + List errorList = object.getJSONField(NodeRequest.ERRORS); + if(errorList == null) + errorList = new ArrayList(); + + String errorMessage = NodeRequestUtils.formatErrorMessage(name, t); + + errorList.add(errorMessage); + object.addJSONField(NodeRequest.ERRORS, errorList); + } + + } + + return object; + } } - - public static Collection getStaticAttributes(ReadGraph graph, DocumentationResource DOC, Variable variable) throws DatabaseException { - Pair, Collection> attribs = graph.syncRequest(new AttributesRequest(variable)); - return attribs.first; - } public static Collection getDynamicAttributes(ReadGraph graph, final DocumentationResource DOC, Variable variable) throws DatabaseException { - Pair, Collection> attribs = graph.syncRequest(new AttributesRequest(variable)); - return attribs.second; + return Collections.emptyList(); } public static Variable getPossibleDocumentRootVariable(ReadGraph graph, Variable documentPart) throws DatabaseException {