From: Tuukka Lehtonen Date: Thu, 22 Aug 2019 06:13:57 +0000 (+0000) Subject: Merge "VariableOrResource SCL type" X-Git-Tag: v1.43.0~136^2~102 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=158d6269660a3b415504f1da5a0b8341e761a5be;hp=545538ee3a2353eee994042800e6e5393177f858 Merge "VariableOrResource SCL type" --- diff --git a/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EnumerationVariableModifier3.java b/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EnumerationVariableModifier3.java index 32bd28c17..3bd3e7b91 100644 --- a/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EnumerationVariableModifier3.java +++ b/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EnumerationVariableModifier3.java @@ -13,10 +13,12 @@ package org.simantics.browsing.ui.graph.impl; import java.util.List; +import org.simantics.browsing.ui.common.modifiers.EnumerationValue; import org.simantics.browsing.ui.content.Labeler.EnumerationModifier; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.RequestProcessor; +import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; @@ -53,6 +55,10 @@ public class EnumerationVariableModifier3 implements EnumerationModifier { return processor.syncRequest(new Read() { @Override public String perform(ReadGraph graph) throws DatabaseException { + EnumerationValue ev = graph.syncRequest(new GetEnumerationValue(variable.getParent(graph).getRepresents(graph))); + if(ev != null) { + return ev.getEnumeratedValue().getName(); + } // System.err.println(variable.getURI(graph)); return variable.getValue(graph);//variable.getPossiblePropertyValue(graph, Variables.LABEL); } diff --git a/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/GetEnumerationValue.java b/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/GetEnumerationValue.java index c246e7bd9..9e8adfebe 100644 --- a/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/GetEnumerationValue.java +++ b/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/GetEnumerationValue.java @@ -41,6 +41,14 @@ public class GetEnumerationValue extends ResourceRead public EnumerationValue perform(ReadGraph graph) throws DatabaseException { return enumerate(graph, resource); } + + public static String getEnumerationValueName(ReadGraph graph, Resource resource) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + String label = graph.getPossibleRelatedValue(resource, L0.HasLabel, Bindings.STRING); + if(label != null) + return label; + return safeName(graph, resource); + } public static EnumerationValue enumerate(ReadGraph graph, Resource resource) throws DatabaseException { Layer0 l0 = Layer0.getInstance(graph); @@ -61,7 +69,7 @@ public class GetEnumerationValue extends ResourceRead Collection values = graph.getObjects(type, l0.ConsistsOf); List> result = new ArrayList>(values.size()); for (Resource value : values) { - result.add(new EnumeratedValue(safeName(graph, value), value)); + result.add(new EnumeratedValue(getEnumerationValueName(graph, value), value)); } Enumeration enumeration = new Enumeration(result); return new EnumerationValue(enumeration, enumeration.find(resource)); diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java index 75c60d24c..ef63fabe0 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java @@ -34,6 +34,7 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import org.simantics.Simantics; +import org.simantics.browsing.ui.graph.impl.GetEnumerationValue; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.Binding; import org.simantics.databoard.binding.error.BindingException; @@ -42,6 +43,7 @@ import org.simantics.databoard.type.NumberType; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.NamedResource; +import org.simantics.db.common.request.IsEnumeratedValue; import org.simantics.db.common.request.UniqueRead; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; @@ -198,10 +200,12 @@ public class ComponentTypeViewer { for(Resource assertion : graph.getAssertedObjects(data.componentType, relation)) { try { - expression = graph.getPossibleRelatedValue(assertion, L0.SCLValue_expression, Bindings.STRING); + expression = graph.getPossibleRelatedValue(assertion, L0.SCLValue_expression, Bindings.STRING); if(expression != null) { defaultValue = "=" + expression; //$NON-NLS-1$ - } else { + } else if (graph.sync(new IsEnumeratedValue(assertion))) { + defaultValue = GetEnumerationValue.getEnumerationValueName(graph, assertion); + } else { Datatype dt = getPossibleDatatype(graph, assertion); if (dt == null) continue; diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java index ea10d6d8d..820d45f2e 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java @@ -1,8 +1,11 @@ package org.simantics.modeling.ui.componentTypeEditor; 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 java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; @@ -33,18 +36,24 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.Form; import org.eclipse.ui.forms.widgets.FormToolkit; import org.simantics.Simantics; +import org.simantics.databoard.Bindings; import org.simantics.databoard.type.NumberType; import org.simantics.databoard.units.internal.library.UnitLibrary; import org.simantics.databoard.util.Limit; import org.simantics.databoard.util.Range; import org.simantics.databoard.util.RangeException; +import org.simantics.db.ReadGraph; import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; +import org.simantics.db.Statement; import org.simantics.db.WriteGraph; import org.simantics.db.common.NamedResource; +import org.simantics.db.common.request.IndexRoot; +import org.simantics.db.common.request.ResourceRead; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.function.DbConsumer; +import org.simantics.db.layer0.QueryIndexUtils; import org.simantics.layer0.Layer0; import org.simantics.modeling.userComponent.ComponentTypeCommands; import org.simantics.scl.runtime.function.Function2; @@ -216,6 +225,26 @@ public class ComponentTypeViewerData { editor.setEditor(text, selectedItem, column); } + private static class TypeDefinitionMapRequest extends ResourceRead> { + public TypeDefinitionMapRequest(Resource resource) { + super(resource); + } + + @Override + public Map perform(ReadGraph graph) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + Map result = new HashMap<>(); + for(Resource valueType : QueryIndexUtils.searchByType(graph, resource, L0.ValueType)) { + Collection stms = graph.getAssertedStatements(valueType, L0.HasValueType); + if(stms.size() == 1) { + String sclValueType = graph.getValue(stms.iterator().next().getObject(), Bindings.STRING); + result.put(sclValueType, valueType); + } + } + return result; + } + } + public void editType(Table table, TableEditor editor, final ComponentTypeViewerPropertyInfo propertyInfo, TableItem selectedItem, int column, String range, final boolean convertDefaultValue) { int extraStyle = propertyInfo.immutable ? SWT.READ_ONLY : 0; final Combo combo = new Combo(table, SWT.NONE | extraStyle); @@ -246,12 +275,18 @@ public class ComponentTypeViewerData { if (propertyInfo.immutable) return; + Simantics.getSession().async(new WriteRequest() { @Override public void perform(WriteGraph graph) throws DatabaseException { graph.markUndoPoint(); - ComponentTypeCommands.editType(graph, componentType, propertyInfo.resource, convertDefaultValue, newValue); + + Resource root = graph.syncRequest(new IndexRoot(componentType)); + Map typeDefinitionMap = graph.syncRequest(new TypeDefinitionMapRequest(root)); + Resource possibleGraphType = typeDefinitionMap.get(newValue); + + ComponentTypeCommands.editType(graph, componentType, propertyInfo.resource, convertDefaultValue, newValue, possibleGraphType); if (range != null) ComponentTypeCommands.setRange(graph, componentType, propertyInfo.resource, range); } }); diff --git a/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl b/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl index 8dd1644e8..14a558bec 100644 --- a/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl +++ b/bundles/org.simantics.modeling/scl/Simantics/Diagram.scl @@ -220,7 +220,7 @@ deriving instance (Show res) => Show (DiagramElement res) @private transformOf element = Position (da!0) (da!1) (da!2) (da!3) (da!4) (da!5) - where da = fromDoubleArray $ relatedValue element DIA.HasTransform + where da = relatedValue element DIA.HasTransform :: Vector Double """Creates a random GUID L0.identifier property for the specified entity resource.""" @private @@ -443,7 +443,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec hasType componentType, hasTypedProperty DIA.HasTransform - (positionToDoubleArray position) + (positionToVector position) G2D.Transform, hasStatement MOD.ElementToComponent @@ -464,8 +464,8 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec ] a = newOrMappedElement aName b = newOrMappedElement bName - ca = createConnector connection a ar - cb = createConnector connection b br + ca = createConnector connection a ar DIA.HasPlainConnector + cb = createConnector connection b br DIA.HasArrowConnector connectNodes ca cb Just connection createElement (Flag t name label output external tableBinding tableRow position joins) = do @@ -476,7 +476,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec hasType t, hasTypedProperty DIA.HasTransform - (positionToDoubleArray position) + (positionToVector position) G2D.Transform, hasPossibleProperty DIA.Flag.HasIOTableBinding @@ -512,7 +512,10 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec Just connection createNode connection (Terminal elementName terminal) = do element = newOrMappedElement elementName - createConnector connection element terminal + if terminal == DIA.Flag.ConnectionPoint then + createConnector connection element terminal DIA.HasPlainConnector + else + createConnector connection element terminal DIA.HasPlainConnector createNode connection (RouteLine isHorizontal position) = do newEntity [ hasName (freshElementName ()), @@ -524,18 +527,37 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec hasStatement DIA.HasInteriorRouteNode.Inverse connection ] - createConnector connection component terminal = do + createConnector connection component terminal defaultHasConnector = do connector = newResource () claim connector L0.InstanceOf DIA.Connector claim component terminal connector - claim connection - DIA.HasPlainConnector - connector + + (connectionRelation, attachmentRelation) = resolveAttachmentRelation component terminal defaultHasConnector + + claim connection attachmentRelation connector + + execJust connectionRelation (\cr -> do + if existsStatement cr MOD.NeedsConnectionMappingSpecification then do + connectionType = singleObject cr STR.AllowsConnectionType + spec = singleObject connectionType MOD.ConnectionTypeToConnectionMappingSpecification + claim connector + MOD.HasConnectionMappingSpecification + spec + else ()) + connector connectNodes a b = claim a DIA.AreConnected b + // Returns (connectionRelation :: Maybe Resource, connector attachment relation :: Resource) + resolveAttachmentRelation element terminal defaultAttachmentRelation = + if terminal == DIA.Flag.ConnectionPoint then + (Nothing, flagTypeToAttachmentRelation element) + else + match possibleObject terminal MOD.DiagramConnectionRelationToConnectionRelation with + Just connectionRelation -> (Just connectionRelation, orElse (possibleObject connectionRelation STR.HasAttachmentRelation) defaultAttachmentRelation) + Nothing -> (Nothing, defaultAttachmentRelation) createElement (SVG document position) = Just $ newEntity [ hasName (freshElementName ()), @@ -545,7 +567,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec document, hasTypedProperty DIA.HasTransform - (positionToDoubleArray position) + (positionToVector position) G2D.Transform ] createRealizedFont (Font family size style) = do @@ -568,7 +590,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec label, hasTypedProperty DIA.HasTransform - (positionToDoubleArray position) + (positionToVector position) G2D.Transform, hasTypedProperty G2D.HasStrokeWidth @@ -599,7 +621,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec hasStatement DIA.HasMonitorComponent component, hasTypedProperty DIA.HasTransform - (positionToDoubleArray position) + (positionToVector position) G2D.Transform, hasTypedProperty G2D.HasStrokeWidth @@ -622,7 +644,7 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec text, hasTypedProperty DIA.HasTransform - (positionToDoubleArray position) + (positionToVector position) G2D.Transform, hasStatement G2D.HasHorizontalAlignment @@ -645,6 +667,9 @@ setElements (DiagramInfo diagram configuration componentMap) joinMap elementSpec Just c -> claimRelatedValue c L0.HasName name Nothing -> () // This is a typical case setConnectionName _ = () + flagTypeToAttachmentRelation flag = match possibleObject flag DIA.HasFlagType with + Just DIA.FlagType.OutputFlag -> DIA.HasArrowConnector + otherwise -> DIA.HasPlainConnector """Returns a diagram in the given model with the given model relative path.""" diagram :: Model -> [String] -> Diagram @@ -894,7 +919,7 @@ and [transformWithScale](#transformWithScale). """ transformElement :: (Position -> Position) -> Resource -> () transformElement transformer element = - claimRelatedValue element DIA.HasTransform (positionToDoubleArray (transformer (transformOf element))) + claimRelatedValue element DIA.HasTransform (positionToVector (transformer (transformOf element))) """ transformElements transformer elements diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java index 74ae599e3..c92d80c84 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java @@ -11,6 +11,7 @@ *******************************************************************************/ package org.simantics.modeling.userComponent; +import java.util.Collections; import java.util.Map; import org.simantics.databoard.Bindings; @@ -27,11 +28,13 @@ import org.simantics.db.Resource; import org.simantics.db.Statement; import org.simantics.db.WriteGraph; import org.simantics.db.common.CommentMetadata; +import org.simantics.db.common.request.EnumerationMap; +import org.simantics.db.common.request.IsEnumeratedValue; import org.simantics.db.common.request.UnaryRead; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.ServiceException; -import org.simantics.db.layer0.request.ModelInstances; +import org.simantics.db.layer0.QueryIndexUtils; import org.simantics.db.layer0.util.Layer0Utils; import org.simantics.layer0.Layer0; import org.simantics.modeling.ModelingResources; @@ -42,6 +45,7 @@ import org.simantics.scl.runtime.tuple.Tuple3; import org.simantics.selectionview.SelectionViewResources; import org.simantics.structural.stubs.StructuralResource2; import org.simantics.structural2.utils.StructuralUtils; +import org.simantics.utils.strings.AlphanumComparator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -199,6 +203,11 @@ public class ComponentTypeCommands { public static void setRequiredType(WriteGraph g, Resource componentType, Resource property, String requiredType) throws DatabaseException { + setRequiredType(g, componentType, property, requiredType, null); + } + + public static void setRequiredType(WriteGraph g, Resource componentType, Resource property, + String requiredType, Resource possibleType) throws DatabaseException { Layer0 L0 = Layer0.getInstance(g); g.claimLiteral(property, L0.RequiresValueType, requiredType); @@ -211,17 +220,34 @@ public class ComponentTypeCommands { } } + // We assert the range of the property only if we are given a dedicated graph value type + if(g.hasStatement(property, L0.HasRange)) + g.deny(property, L0.HasRange); + + if(possibleType != null) { + // We have a dedicated graph type for this SCL value type + if(g.hasStatement(possibleType, L0.Enumeration)) { + // This value type is an enumeration - let's constrain the range of this predicate to match the enumeration type only + g.claim(property, L0.HasRange, possibleType); + } + } + CommentMetadata cm = g.getMetadata(CommentMetadata.class); g.addMetadata(cm.add("Set required type "+ requiredType + " for component/annotation " + property)); } public static void editType(WriteGraph graph, Resource componentType, Resource property, boolean convertDefaultValue, String newValue) throws DatabaseException { - ComponentTypeCommands.setRequiredType(graph, componentType, property, newValue); + editType(graph, componentType, property, convertDefaultValue, newValue, null); + } + + public static void editType(WriteGraph graph, Resource componentType, Resource property, boolean convertDefaultValue, String newValue, Resource possibleType) throws DatabaseException { + ComponentTypeCommands.setRequiredType(graph, componentType, property, newValue, possibleType); if (convertDefaultValue) { - ComponentTypeCommands.convertDefaultValue(graph, componentType, property, newValue); - Map instances = graph.sync(new ModelInstances(componentType, componentType)); - for(Resource instance : instances.values()) { - ComponentTypeCommands.convertInstantiatedValue(graph, instance, property, newValue); + ComponentTypeCommands.convertDefaultValue(graph, componentType, property, newValue, possibleType); + for (Resource indexRoot : Layer0Utils.listIndexRoots(graph)) { + for(Resource instance : QueryIndexUtils.searchByTypeShallow(graph, indexRoot, componentType)) { + ComponentTypeCommands.convertInstantiatedValue(graph, instance, property, newValue, componentType); + } } } } @@ -270,11 +296,29 @@ public class ComponentTypeCommands { " in " + NameUtils.getSafeName(g, type) + "."); return; } + + Layer0 L0 = Layer0.getInstance(g); + Resource range = g.getPossibleObject(relation, L0.HasRange); + if (range != null) { + if(g.hasStatement(range, L0.Enumeration)) { + Map values = g.syncRequest(new EnumerationMap(range)); + Resource value = values.get(valueText); + if (value != null) { + for(Resource assertion : g.getObjects(type, L0.Asserts)) { + Resource p = g.getSingleObject(assertion, L0.HasPredicate); + if (p.equals(relation)) { + g.deny(assertion, L0.HasObject, object); + g.claim(assertion, L0.HasObject, value); + } + } + } + return; + } + } if(valueText.length() > 0 && valueText.charAt(0) == '=') { - String expression = valueText.substring(1); - Layer0 L0 = Layer0.getInstance(g); + String expression = valueText.substring(1); ModelingResources MOD = ModelingResources.getInstance(g); if(!g.isInstanceOf(object, MOD.SCLValue)) { Resource assertion = g.getSingleObject(object, L0.HasObjectInverse); @@ -288,7 +332,6 @@ public class ComponentTypeCommands { } else { - Layer0 L0 = Layer0.getInstance(g); ModelingResources MOD = ModelingResources.getInstance(g); if(g.isInstanceOf(object, MOD.SCLValue)) { Resource assertion = g.getSingleObject(object, L0.HasObjectInverse); @@ -421,6 +464,22 @@ public class ComponentTypeCommands { public static void convertDefaultValue(WriteGraph g, Resource type, Resource relation, String newSCLType) throws DatabaseException { + convertDefaultValue(g, type, relation, newSCLType, null); + } + + private static Resource findAssertionWithPO(ReadGraph graph, Resource possibleType, Resource predicate, Resource object) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + for(Resource assertion : graph.getObjects(possibleType, L0.Asserts)) { + Resource p = graph.getSingleObject(assertion, L0.HasPredicate); + Resource o = graph.getSingleObject(assertion, L0.HasObject); + if(predicate.equals(p) && object.equals(o)) + return assertion; + } + return null; + } + + public static void convertDefaultValue(WriteGraph g, + Resource type, Resource relation, String newSCLType, Resource possibleType) throws DatabaseException { Resource object = getAssertedObject(g, type, relation); if(object == null) { LOGGER.warn("Didn't find assertion for " + NameUtils.getSafeName(g, relation) + @@ -428,27 +487,60 @@ public class ComponentTypeCommands { return; } + Layer0 L0 = Layer0.getInstance(g); + if(possibleType != null) { + if(g.hasStatement(possibleType, L0.Enumeration)) { + if(!g.isInstanceOf(object, possibleType)) { + Map enumMap = g.syncRequest(new EnumerationMap(possibleType)); + String firstKey = Collections.min(enumMap.keySet(), AlphanumComparator.COMPARATOR); + Resource defaultValue = enumMap.get(firstKey); + + if (defaultValue != null) { + Resource assertion = findAssertionWithPO(g, type, relation, object); + if(assertion != null) { + g.deny(assertion, L0.HasObject); + g.claim(assertion, L0.HasObject, defaultValue); + return; + } else { + Layer0Utils.assert_(g, type, relation, defaultValue); + return; + } + } + } + } + } + Tuple tuple = getDatatypeValueAndBinding(g, object, newSCLType); if (tuple == null) return; - Layer0 L0 = Layer0.getInstance(g); g.claimLiteral(object, L0.HasDataType, L0.DataType, tuple.get(0), Bindings.getBindingUnchecked(Datatype.class)); g.claimLiteral(object, L0.HasValueType, g.getRelatedValue(relation, L0.RequiresValueType, Bindings.STRING), Bindings.STRING); g.claimValue(object, tuple.get(1), (Binding)tuple.get(2)); } - public static void convertInstantiatedValue(WriteGraph g, Resource instance, Resource relation, String newSCLType) + public static void convertInstantiatedValue(WriteGraph g, Resource instance, Resource relation, String newSCLType) throws DatabaseException { + convertInstantiatedValue(g, instance, relation, newSCLType, null); + } + + public static void convertInstantiatedValue(WriteGraph g, Resource instance, Resource relation, String newSCLType, Resource possibleType) throws DatabaseException { Statement stm = g.getPossibleStatement(instance, relation); if(stm != null && !stm.isAsserted(instance)) { - Resource object = stm.getObject(); + Layer0 L0 = Layer0.getInstance(g); + Resource object = stm.getObject(); + + if(g.sync(new IsEnumeratedValue(object))) { + if(!g.isInstanceOf(object, possibleType)) { + g.deny(instance, relation); + } + return; + } // We can only convert literals - Layer0 L0 = Layer0.getInstance(g); if(!g.isInstanceOf(object, L0.Literal)) return; Tuple tuple = getDatatypeValueAndBinding(g, object, newSCLType); diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/UpdateMethodFactory.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/UpdateMethodFactory.java index b20117626..e1de9f20c 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/UpdateMethodFactory.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/annotations/factories/UpdateMethodFactory.java @@ -41,7 +41,7 @@ public class UpdateMethodFactory implements IMethodRuleFactory map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" UpdateMethodFactory.updateRange"); + LOGGER.trace(" UpdateMethodFactory.updateRange"); try { return (Boolean)method.invoke(rangeElement, g, domainElement); } catch (Exception e) { diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java index 1c44ef930..c2ecdf1b1 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/impl/Mapping.java @@ -73,7 +73,7 @@ public class Mapping implements IMapping { } private void createDomain(WriteGraph g, Link link) throws MappingException { - LOGGER.info(" createDomain for " + link.rangeElement); + LOGGER.trace(" createDomain for " + link.rangeElement); ILinkType type = schema.linkTypeOfRangeElement(link.rangeElement); Domain domainElement = type.createDomainElement(g, link.rangeElement); link.type = type; @@ -264,11 +264,11 @@ public class Mapping implements IMapping { @Override public synchronized Collection updateDomain(WriteGraph g) throws MappingException { - LOGGER.info("Mapping.updateDomain"); + LOGGER.trace("Mapping.updateDomain"); RangeToDomain map = new RangeToDomain(g); ArrayList updated = new ArrayList(); while(!modifiedRangeLinks.isEmpty()) { - LOGGER.info(" modifiedRangeLinks.size() = " + modifiedRangeLinks.size()); + LOGGER.trace(" modifiedRangeLinks.size() = " + modifiedRangeLinks.size()); Link link = modifiedRangeLinks.remove(modifiedRangeLinks.size()-1); link.rangeModified = false; @@ -292,11 +292,11 @@ public class Mapping implements IMapping { @Override public synchronized Collection updateRange(ReadGraph g) throws MappingException { - LOGGER.info("Mapping.updateRange"); + LOGGER.trace("Mapping.updateRange"); DomainToRange map = new DomainToRange(g); ArrayList updated = new ArrayList(); while(!modifiedDomainLinks.isEmpty()) { - LOGGER.info(" modifiedDomainLinks.size() = " + modifiedDomainLinks.size()); + LOGGER.trace(" modifiedDomainLinks.size() = " + modifiedDomainLinks.size()); Link link = modifiedDomainLinks.remove(modifiedDomainLinks.size()-1); link.domainModified = false; @@ -359,7 +359,7 @@ public class Mapping implements IMapping { void domainModified(Link link) { if(!link.domainModified) { synchronized(modifiedDomainLinks) { - LOGGER.info(" domainModified for " + link.rangeElement); + LOGGER.trace(" domainModified for " + link.rangeElement); link.domainModified = true; modifiedDomainLinks.add(link); if(modifiedDomainLinks.size() == 1) { diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementRule.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementRule.java index 5e4eec39f..9761f5555 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementRule.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementRule.java @@ -45,7 +45,7 @@ public class MappedElementRule implements IBidirectionalMappingRu public boolean updateDomain(WriteGraph g, IBackwardMapping map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" MappedElementRule.updateDomain"); + LOGGER.trace(" MappedElementRule.updateDomain"); Range value = rangeAccessor.get(rangeElement); Domain mappedValue = value == null ? null : map.inverseMap(g, value);//map.inverseGet(value); return domainAccessor.set(g, domainElement, mappedValue); @@ -55,7 +55,7 @@ public class MappedElementRule implements IBidirectionalMappingRu public boolean updateRange(ReadGraph g, IForwardMapping map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" MappedElementRule.updateRange"); + LOGGER.trace(" MappedElementRule.updateRange"); Domain value = domainAccessor.get(g, domainElement); Range mappedValue = value == null ? null : map.map(g, value);////map.get(value); return rangeAccessor.set(rangeElement, mappedValue); diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementsRule.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementsRule.java index 43a8ff493..7f3c13a10 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementsRule.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/MappedElementsRule.java @@ -49,7 +49,7 @@ public class MappedElementsRule implements IBidirectionalMappingR public boolean updateDomain(WriteGraph g, IBackwardMapping map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" MappedElementsRule.updateDomain"); + LOGGER.trace(" MappedElementsRule.updateDomain"); // Snapshot the accessed range value for concurrency safety. // NOTE: still assumes that the accessed collection is concurrent or // synchronized for toArray to be atomic. @@ -65,7 +65,7 @@ public class MappedElementsRule implements IBidirectionalMappingR public boolean updateRange(ReadGraph g, IForwardMapping map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" MappedElementsRule.updateRange"); + LOGGER.trace(" MappedElementsRule.updateRange"); Collection value = domainAccessor.get(g, domainElement); ArrayList mappedValue = new ArrayList(value.size()); for(Domain r : value) diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/ValueRule.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/ValueRule.java index d40c44f2b..9ba9dba11 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/ValueRule.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/ValueRule.java @@ -45,7 +45,7 @@ public class ValueRule implements IBidirectionalMappingRule map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" ValueRule.updateDomain"); + LOGGER.trace(" ValueRule.updateDomain"); Object value = rangeAccessor.get(rangeElement); return domainAccessor.set(g, domainElement, value); } @@ -54,7 +54,7 @@ public class ValueRule implements IBidirectionalMappingRule map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" ValueRule.updateRange"); + LOGGER.trace(" ValueRule.updateRange"); Object value = domainAccessor.get(g, domainElement); return rangeAccessor.set(rangeElement, value); } diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/CompoundValueAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/CompoundValueAccessor.java index 53eb01168..39df524b2 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/CompoundValueAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/CompoundValueAccessor.java @@ -52,7 +52,7 @@ public class CompoundValueAccessor implements IDomainAccessor { public Object get(ReadGraph g, Resource element) throws MappingException { try { Layer0 l0 = Layer0.getInstance(g); - LOGGER.info(" CompoundValueAccessor.get"); + LOGGER.trace(" CompoundValueAccessor.get"); Collection coll = g.getStatements(element, objRelation); Map map = new HashMap(); for (Statement c : coll) { @@ -73,7 +73,7 @@ public class CompoundValueAccessor implements IDomainAccessor { throws MappingException { try { Layer0 l0 = Layer0.getInstance(g); - LOGGER.info(" CompoundValueAccessor.set"); + LOGGER.trace(" CompoundValueAccessor.set"); @SuppressWarnings("unchecked") Map values = (Map)v; diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/LinkedListAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/LinkedListAccessor.java index efdaab56c..e9104c3d9 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/LinkedListAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/LinkedListAccessor.java @@ -45,7 +45,7 @@ public class LinkedListAccessor implements IDomainAccessor get(ReadGraph g, Resource element) throws MappingException { try { - LOGGER.info(" LinkdedListAccessor.get"); + LOGGER.trace(" LinkdedListAccessor.get"); return ListUtils.toList(g, g.getPossibleObject(element, relation)); } catch (DatabaseException e) { throw new MappingException(e); @@ -56,7 +56,7 @@ public class LinkedListAccessor implements IDomainAccessor value) throws MappingException { try { - LOGGER.info(" LinkdedListAccessor.set"); + LOGGER.trace(" LinkdedListAccessor.set"); return MappingUtils.synchronizeList(g, element, relation, listType, new ArrayList(value), deleteExtraObjects); } catch (DatabaseException e) { throw new MappingException(e); diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/MappingUtils.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/MappingUtils.java index 6f7f9260f..0bb50ff57 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/MappingUtils.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/MappingUtils.java @@ -55,7 +55,7 @@ public class MappingUtils { while(true) { int cmp = currentObjects[i].compareTo(objects[j]); if(cmp < 0) { - LOGGER.info(" remove statement"); + LOGGER.trace(" remove statement"); if(deleteExtraObjects) g.deny(currentObjects[i]); else @@ -66,7 +66,7 @@ public class MappingUtils { break; } else if(cmp > 0) { - LOGGER.info(" add statement"); + LOGGER.trace(" add statement"); g.claim(subject, predicate, objects[j]); modified = true; ++j; diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectAccessor.java index 2cfc98185..28000a99e 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectAccessor.java @@ -36,7 +36,7 @@ public class RelatedObjectAccessor implements IDomainAccessor @Override public Resource get(ReadGraph g, Resource element) throws MappingException { try { - LOGGER.info(" RelatedObjectAccessor.get"); + LOGGER.trace(" RelatedObjectAccessor.get"); return g.getPossibleObject(element, relation); } catch (DatabaseException e) { throw new MappingException(e); @@ -47,7 +47,7 @@ public class RelatedObjectAccessor implements IDomainAccessor public boolean set(WriteGraph g, Resource element, Resource value) throws MappingException { try { - LOGGER.info(" RelatedObjectAccessor.set"); + LOGGER.trace(" RelatedObjectAccessor.set"); Resource resource = g.getPossibleObject(element, relation); if(resource == null) { if(value == null) diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectsAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectsAccessor.java index d8002d976..d2d1db99a 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectsAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedObjectsAccessor.java @@ -41,7 +41,7 @@ public class RelatedObjectsAccessor implements IDomainAccessor get(ReadGraph g, Resource element) throws MappingException { try { - LOGGER.info(" RelatedObjectsAccessor.get"); + LOGGER.trace(" RelatedObjectsAccessor.get"); return g.getObjects(element, relation); } catch (DatabaseException e) { throw new MappingException(e); @@ -52,7 +52,7 @@ public class RelatedObjectsAccessor implements IDomainAccessor value) throws MappingException { try { - LOGGER.info(" RelatedObjectsAccessor.set"); + LOGGER.trace(" RelatedObjectsAccessor.set"); return MappingUtils.synchronizeStatements(g, element, relation, value.toArray(new Resource[value.size()]), deleteExtraObjects); } catch (DatabaseException e) { diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedOrderedSetElementsAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedOrderedSetElementsAccessor.java index a272b4f0b..4d7895675 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedOrderedSetElementsAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedOrderedSetElementsAccessor.java @@ -40,7 +40,7 @@ public class RelatedOrderedSetElementsAccessor implements IDomainAccessor get(ReadGraph g, Resource element) throws MappingException { try { - LOGGER.info(" RelatedOrderedSetElementsAccessor.get"); + LOGGER.trace(" RelatedOrderedSetElementsAccessor.get"); return OrderedSetUtils.toList(g, element); } catch (DatabaseException e) { throw new MappingException(e); @@ -51,7 +51,7 @@ public class RelatedOrderedSetElementsAccessor implements IDomainAccessor value) throws MappingException { try { - LOGGER.info(" RelatedOrderedSetElementsAccessor.set"); + LOGGER.trace(" RelatedOrderedSetElementsAccessor.set"); return OrderedSetUtils.set(g, element, value); // FIXME Implement deleteExtraObjects } catch (DatabaseException e) { diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedValueAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedValueAccessor.java index 585b468e6..9aa96d8e8 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedValueAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/domain/RelatedValueAccessor.java @@ -49,7 +49,7 @@ public class RelatedValueAccessor implements IDomainAccessor { @Override public Object get(ReadGraph g, Resource element) throws MappingException { try { - LOGGER.info(" RelatedValueAccessor.get"); + LOGGER.trace(" RelatedValueAccessor.get"); Resource valueResource = g.getPossibleObject(element, relation); if(valueResource == null) return null; @@ -63,7 +63,7 @@ public class RelatedValueAccessor implements IDomainAccessor { public boolean set(WriteGraph g, Resource element, Object value) throws MappingException { try { - LOGGER.info(" RelatedValueAccessor.set"); + LOGGER.trace(" RelatedValueAccessor.set"); Statement valueStatement = g.getPossibleStatement(element, relation); if(valueStatement == null) { if(value == null) diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/range/FieldAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/range/FieldAccessor.java index 278c35a89..c5a35613c 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/range/FieldAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/rules/range/FieldAccessor.java @@ -38,8 +38,8 @@ public class FieldAccessor implements IRangeAccessor { @SuppressWarnings("unchecked") T result = (T)field.get(element); - if(LOGGER.isInfoEnabled()) - LOGGER.info(" FieldAccessor.get " + + if(LOGGER.isTraceEnabled()) + LOGGER.trace(" FieldAccessor.get " + field.getName() + " -> " + result ); @@ -56,8 +56,8 @@ public class FieldAccessor implements IRangeAccessor { try { Object currentValue = field.get(element); - if(LOGGER.isInfoEnabled()) - LOGGER.info(" FieldAccessor.set " + + if(LOGGER.isTraceEnabled()) + LOGGER.trace(" FieldAccessor.set " + field.getName() + " " + currentValue + " -> " + value ); diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/DynamicSimpleLinkType.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/DynamicSimpleLinkType.java index 792813bb1..4f44844db 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/DynamicSimpleLinkType.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/DynamicSimpleLinkType.java @@ -70,8 +70,8 @@ public class DynamicSimpleLinkType extends SimpleLinkType{ throws MappingException { try { String typeUri = (String)typeGetter.invoke(rangeElement, (Object[]) null); - if(LOGGER.isInfoEnabled()) - LOGGER.info("SimpleLinkType.createDomainElement " + + if(LOGGER.isTraceEnabled()) + LOGGER.trace("SimpleLinkType.createDomainElement " + rangeElement.toString() ); Resource actualDomainType = g.getResource(typeUri); @@ -95,9 +95,9 @@ public class DynamicSimpleLinkType extends SimpleLinkType{ public Range createRangeElement(ReadGraph g, Resource domainElement) throws MappingException { try { - if(LOGGER.isInfoEnabled()) + if(LOGGER.isTraceEnabled()) try { - LOGGER.info("SimpleLinkType.createRangeElement " + + LOGGER.trace("SimpleLinkType.createRangeElement " + NameUtils.getSafeName(g, domainElement) ); } catch(DatabaseException e) { diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/OrderedSetSimpleLinkType.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/OrderedSetSimpleLinkType.java index bd87c074f..748422df2 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/OrderedSetSimpleLinkType.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/OrderedSetSimpleLinkType.java @@ -20,8 +20,8 @@ public class OrderedSetSimpleLinkType extends SimpleLinkType { public Resource createDomainElement(org.simantics.db.WriteGraph g, Range rangeElement) throws org.simantics.objmap.exceptions.MappingException { try { - if(LOGGER.isInfoEnabled()) - LOGGER.info("SimpleLinkType.createDomainElement " + + if(LOGGER.isTraceEnabled()) + LOGGER.trace("SimpleLinkType.createDomainElement " + rangeElement.toString() ); Resource result = OrderedSetUtils.create(g, domainType); diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/SimpleLinkType.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/SimpleLinkType.java index 096d07cb8..9ddc43716 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/SimpleLinkType.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/graph/schema/SimpleLinkType.java @@ -64,8 +64,8 @@ public class SimpleLinkType implements ILinkType { public Resource createDomainElement(WriteGraph g, Range rangeElement) throws MappingException { try { - if(LOGGER.isInfoEnabled()) - LOGGER.info("SimpleLinkType.createDomainElement " + + if(LOGGER.isTraceEnabled()) + LOGGER.trace("SimpleLinkType.createDomainElement " + rangeElement.toString() ); Resource result = g.newResource(); @@ -80,9 +80,9 @@ public class SimpleLinkType implements ILinkType { public Range createRangeElement(ReadGraph g, Resource domainElement) throws MappingException { try { - if(LOGGER.isInfoEnabled()) + if(LOGGER.isTraceEnabled()) try { - LOGGER.info("SimpleLinkType.createRangeElement " + + LOGGER.trace("SimpleLinkType.createRangeElement " + NameUtils.getSafeName(g, domainElement) ); } catch(DatabaseException e) { @@ -105,9 +105,9 @@ public class SimpleLinkType implements ILinkType { }; public boolean updateDomain(WriteGraph g, IBackwardMapping map, Resource domainElement, Range rangeElement) throws MappingException { - if(LOGGER.isInfoEnabled()) + if(LOGGER.isTraceEnabled()) try { - LOGGER.info("SimpleLinkType.updateDomain " + + LOGGER.trace("SimpleLinkType.updateDomain " + NameUtils.getSafeName(g, domainElement) + " " + rangeElement.toString() ); @@ -123,9 +123,9 @@ public class SimpleLinkType implements ILinkType { public boolean updateRange(ReadGraph g, IForwardMapping map, Resource domainElement, Range rangeElement) throws MappingException { - if(LOGGER.isInfoEnabled()) + if(LOGGER.isTraceEnabled()) try { - LOGGER.info("SimpleLinkType.updateRange " + + LOGGER.trace("SimpleLinkType.updateRange " + NameUtils.getSafeName(g, domainElement) + " " + (rangeElement.getClass().getName() + "@" + Integer.toHexString(rangeElement.hashCode())) ); diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/annotations/factories/UpdateMethodFactory.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/annotations/factories/UpdateMethodFactory.java index 1ce1ef1c6..a2be5fa42 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/annotations/factories/UpdateMethodFactory.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/annotations/factories/UpdateMethodFactory.java @@ -41,7 +41,7 @@ public class UpdateMethodFactory implements IMethodRuleFactory map, Domain domainElement, Range rangeElement) throws MappingException { - LOGGER.info(" UpdateMethodFactory.updateRange"); + LOGGER.trace(" UpdateMethodFactory.updateRange"); try { return (Boolean)method.invoke(rangeElement, g, domainElement); } catch (Exception e) { diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedObjectAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedObjectAccessor.java index 736f86b39..de80a9a95 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedObjectAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedObjectAccessor.java @@ -51,7 +51,7 @@ public class RelatedObjectAccessor implements IDomainAccessor get(ReadGraph g, StructuralResource element) throws MappingException { try { - LOGGER.info(" RelatedObjectsAccessor.get"); + LOGGER.trace(" RelatedObjectsAccessor.get"); Resource res = getServiceResource(g, element); @@ -87,7 +87,7 @@ public class RelatedObjectsAccessor implements IDomainAccessor value) throws MappingException { try { - LOGGER.info(" RelatedObjectsAccessor.set"); + LOGGER.trace(" RelatedObjectsAccessor.set"); Resource res = getServiceResource(g, element); if (res == null) return false; diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedOrderedSetElementsAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedOrderedSetElementsAccessor.java index 97fde226f..35f98994d 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedOrderedSetElementsAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedOrderedSetElementsAccessor.java @@ -43,7 +43,7 @@ public class RelatedOrderedSetElementsAccessor implements IDomainAccessor get(ReadGraph g, StructuralResource element) throws MappingException { try { - LOGGER.info(" RelatedOrderedSetElementsAccessor.get"); + LOGGER.trace(" RelatedOrderedSetElementsAccessor.get"); Resource res = getServiceResource(g, element); if (res == null) return Collections.emptyList(); @@ -62,7 +62,7 @@ public class RelatedOrderedSetElementsAccessor implements IDomainAccessor value) throws MappingException { try { - LOGGER.info(" RelatedOrderedSetElementsAccessor.set"); + LOGGER.trace(" RelatedOrderedSetElementsAccessor.set"); Resource res = getServiceResource(g, element); if (res == null) return false; diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedValueAccessor.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedValueAccessor.java index 41279d1ab..21a6733a4 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedValueAccessor.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/rules/domain/RelatedValueAccessor.java @@ -58,7 +58,7 @@ public class RelatedValueAccessor implements IDomainAccessor get(ReadGraph g, StructuralResource element) throws MappingException { try { - LOGGER.info(" RelatedObjectsAccessor.get"); + LOGGER.trace(" RelatedObjectsAccessor.get"); if (!element.isStructural()) return Collections.emptyList(); @@ -79,7 +79,7 @@ public class StructuralRelatedObjectsAccessor implements IDomainAccessor value) throws MappingException { try { - LOGGER.info(" RelatedObjectsAccessor.set"); + LOGGER.trace(" RelatedObjectsAccessor.set"); if (!element.isStructural()) return false; diff --git a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/schema/SimpleLinkType.java b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/schema/SimpleLinkType.java index ded0f40db..77b2ab094 100644 --- a/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/schema/SimpleLinkType.java +++ b/bundles/org.simantics.objmap2/src/org/simantics/objmap/structural/schema/SimpleLinkType.java @@ -64,8 +64,8 @@ public class SimpleLinkType implements ILinkType map, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException { - if(LOGGER.isInfoEnabled()) + if(LOGGER.isTraceEnabled()) try { - LOGGER.info("SimpleLinkType.updateDomain " + + LOGGER.trace("SimpleLinkType.updateDomain " + NameUtils.getSafeName(g, domainElement.getResource()) + " " + rangeElement.toString() ); @@ -173,9 +173,9 @@ public class SimpleLinkType implements ILinkType map, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException { - if(LOGGER.isInfoEnabled()) + if(LOGGER.isTraceEnabled()) try { - LOGGER.info("SimpleLinkType.updateRange " + + LOGGER.trace("SimpleLinkType.updateRange " + NameUtils.getSafeName(g, domainElement.getResource()) + " " + rangeElement.toString() ); diff --git a/bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl b/bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl index e8d37789b..3925450bd 100644 --- a/bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl +++ b/bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl @@ -1,6 +1,7 @@ module { export = [possibleUnsafeSclValueByName, unsafeSclValueByName, sclModuleNames, moduleByName, - documentationOfSCLValue, sclValueRef, possibleModuleSourceText] + documentationOfSCLValue, sclValueRef, possibleModuleSourceText, flushModuleRepository, + flushDefaultModuleRepository] } include "./CurrentModuleRepository" @@ -30,6 +31,9 @@ importJava "org.simantics.scl.compiler.module.repository.ModuleRepository" where @JavaName getModule moduleByName_ :: ModuleRepository -> String -> Failable Module + @JavaName flush + flushModuleRepository :: ModuleRepository -> () + importJava "org.simantics.scl.compiler.source.repository.ModuleSourceRepository" where data ModuleSourceRepository @@ -50,6 +54,9 @@ unsafeSclValueByName = unsafeSclValueByName_ MODULE_REPOSITORY sclValueRef name = sclValueRef_ MODULE_REPOSITORY name +flushDefaultModuleRepository :: () +flushDefaultModuleRepository = flushModuleRepository MODULE_REPOSITORY + possibleUnsafeSclValueByName :: String -> Maybe a possibleUnsafeSclValueByName name = Just (unsafeSclValueByName name) `catch` \(_ :: Exception) -> Nothing diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepository.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepository.java index 8a86c5ccc..a6650e9a4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepository.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepository.java @@ -505,7 +505,7 @@ public class ModuleRepository { if (moduleCache != null) for (ModuleEntry entry : moduleCache.values()) entry.dispose(); - moduleCache = null; + moduleCache = new ConcurrentHashMap(); } /** diff --git a/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java b/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java index 79541b061..233a1e5a1 100644 --- a/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java +++ b/bundles/org.simantics.selectionview/src/org/simantics/selectionview/function/All.java @@ -2,6 +2,7 @@ package org.simantics.selectionview.function; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.Map; import java.util.function.Consumer; @@ -12,7 +13,9 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.FontDialog; import org.simantics.Simantics; import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.common.modifiers.EnumerationValue; import org.simantics.browsing.ui.content.Labeler.DialogModifier; +import org.simantics.browsing.ui.graph.impl.GetEnumerationValue; import org.simantics.common.format.Formatter; import org.simantics.databoard.Bindings; import org.simantics.databoard.Datatypes; @@ -62,6 +65,7 @@ import org.simantics.ui.fonts.Fonts; import org.simantics.ui.selection.WorkbenchSelectionElement; import org.simantics.ui.selection.WorkbenchSelectionUtils; import org.simantics.utils.datastructures.collections.CollectionUtils; +import org.simantics.utils.strings.AlphanumComparator; import org.simantics.utils.ui.AdaptionUtils; import org.simantics.utils.ui.ErrorLogger; import org.simantics.utils.ui.ISelectionUtils; @@ -198,7 +202,9 @@ public class All { Resource parameterResource = parameter.getRepresents(graph); if(graph.sync(new IsEnumeratedValue(parameterResource))) { Map map = graph.sync(new InstanceEnumerationMap(parameterResource)); - return new ArrayList(map.keySet()); + ArrayList values = new ArrayList<>(map.keySet()); + Collections.sort(values, AlphanumComparator.COMPARATOR); + return values; } else if(graph.isInstanceOf(parameterResource, L0.Boolean)) { return CollectionUtils.toList("true", "false"); } @@ -463,6 +469,14 @@ public class All { value = formatterFunction.apply(property.getValue(graph)); } } + + Resource possibleValue = context.getParent(graph).getPossibleRepresents(graph); + if(possibleValue != null) { + if(graph.syncRequest(new IsEnumeratedValue(possibleValue))) { + return GetEnumerationValue.getEnumerationValueName(graph, possibleValue); + } + } + if(value == null) { Variant variant = property.getVariantValue(graph); @@ -518,8 +532,14 @@ public class All { String parsedLabel = (String)_value; Object value = parsedLabel; + boolean isEnumeration = false; + Resource possibleValue = context.getParent(graph).getPossibleRepresents(graph); + if(possibleValue != null) { + isEnumeration = graph.syncRequest(new IsEnumeratedValue(possibleValue)); + } + Datatype type = context.getParent(graph).getPossibleDatatype(graph); - if (type != null) { + if (type != null && !isEnumeration) { Binding binding = Bindings.getBinding(type); diff --git a/bundles/org.simantics.structural.ontology/graph/Structural.pgraph b/bundles/org.simantics.structural.ontology/graph/Structural.pgraph index cf6f05ab2..5f7068162 100644 --- a/bundles/org.simantics.structural.ontology/graph/Structural.pgraph +++ b/bundles/org.simantics.structural.ontology/graph/Structural.pgraph @@ -309,16 +309,16 @@ STR.Property > { public int getModuleId() { return component.getModuleId(); } - + + public ModuleUpdaterBase getUpdater() { + return updater; + } + public SynchronizationEventHandlerBase getHandler() { return handler; } + @SuppressWarnings("unchecked") + public > E getConcreteHandler() { + return (E) handler; + } + public void setModuleId(int moduleId) { component.setModuleId(moduleId); } diff --git a/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java index a6efeefb2..67b120b64 100644 --- a/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java @@ -248,7 +248,7 @@ public abstract class SynchronizationEventHandlerBase if(oldChildMap != null) for(T component : oldChildMap.values()) { component.clearParent(); - mapping.addPendingRemoval(component); + addPendingRemoval(component); } } // Alternative implementation when uids are not available. @@ -275,7 +275,7 @@ public abstract class SynchronizationEventHandlerBase if(oldChildMap != null) for(T component : oldChildMap.values()) { component.clearParent(); - mapping.addPendingRemoval(component); + addPendingRemoval(component); } } @@ -334,6 +334,12 @@ public abstract class SynchronizationEventHandlerBase } } + protected void addPendingRemoval(T component) { + if (TRACE_EVENTS) + System.out.println("addPendingRemoval(" + component.componentId + " : " + component.solverComponentName + ")"); + mapping.addPendingRemoval(component); + } + private String getSubprocessName(String name, Collection properties) { for(SerializedVariable property : properties) diff --git a/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java index 3c96a3fef..423e5a125 100644 --- a/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java @@ -1,12 +1,13 @@ package org.simantics.structural.synchronization.utils; -import java.io.PrintWriter; - import gnu.trove.map.hash.THashMap; import gnu.trove.procedure.TObjectObjectProcedure; import gnu.trove.procedure.TObjectProcedure; import gnu.trove.set.hash.THashSet; +import java.io.PrintWriter; +import java.util.function.Consumer; + /** * The entry point to the mapping structure between Simantics database and a * designated solver. It is used to synchronize changes from Simantics to the @@ -219,4 +220,11 @@ abstract public class MappingBase> { return !pendingRemoval.isEmpty(); } + public void forEachPendingRemoval(Consumer consumer) { + pendingRemoval.forEach(c -> { + consumer.accept(c); + return true; + }); + } + } diff --git a/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java b/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java index 970e6f9e8..e43007637 100644 --- a/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java +++ b/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java @@ -749,7 +749,7 @@ public class Functions { for(Resource req : requiredConnections) { if(!connections.contains(req)) { - result.add(new StandardIssue(sr.ConnectionConstraint_ErrorIssue, component, req)); + result.add(new StandardIssue(sr.ConnectionValidationConstraint_ErrorIssue, component, req)); } }