-package org.simantics.db.layer0.variable;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.procedure.single.SingleSetSyncListener;\r
-import org.simantics.db.common.request.ParametrizedPrimitiveRead;\r
-import org.simantics.db.common.request.ResourceRead;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.request.VariableFactoryRequest;\r
-import org.simantics.db.procedure.Listener;\r
-import org.simantics.db.service.QueryControl;\r
-import org.simantics.operation.Layer0X;\r
-\r
-public class ExtendedGraphChildVariable extends StandardGraphChildVariable {\r
-\r
- private Map<String, Variable> extension;\r
- private List<Listener<Map<String, Variable>>> listeners = new ArrayList<Listener<Map<String, Variable>>>();\r
- \r
- public ExtendedGraphChildVariable(Variable parent, Resource resource) throws DatabaseException {\r
- super(parent, null, resource);\r
- }\r
-\r
- Map<String, Variable> getExtension(ReadGraph graph) throws DatabaseException {\r
-\r
- if(extension == null) {\r
-\r
- extension = new HashMap<String, Variable>();\r
-\r
- QueryControl qc = graph.getService(QueryControl.class);\r
- \r
- qc.getIndependentGraph(graph).syncRequest(new ResourceRead<Collection<VariableFactory>>(resource) {\r
-\r
- @Override\r
- public Collection<VariableFactory> perform(ReadGraph graph) throws DatabaseException {\r
- Layer0X L0X = Layer0X.getInstance(graph);\r
- ArrayList<VariableFactory> result = new ArrayList<VariableFactory>();\r
- for(Resource r : graph.getObjects(resource, L0X.HasChildVariables)) {\r
- VariableFactory factory = graph.adapt(r, VariableFactory.class);\r
- assert(factory != null);\r
- result.add(factory);\r
- }\r
- return result;\r
- }\r
- \r
- }, new SingleSetSyncListener<VariableFactory>() {\r
-\r
- @Override\r
- public void add(ReadGraph graph, final VariableFactory factory) throws DatabaseException {\r
- \r
- graph.syncRequest(new VariableFactoryRequest(ExtendedGraphChildVariable.this, factory), new SingleSetSyncListener<Variable>() {\r
-\r
- @Override\r
- public void add(ReadGraph graph, final Variable child) throws DatabaseException {\r
- String name = child.getPropertyValue(graph, Variables.NAME);\r
- extension.put(name, child);\r
- }\r
- \r
- @Override\r
- public void remove(ReadGraph graph, Variable child) throws DatabaseException {\r
- String name = child.getPropertyValue(graph, Variables.NAME);\r
- Variable exist = extension.get(name);\r
- if(exist == child) extension.remove(name);\r
- }\r
- \r
- public void finished(ReadGraph graph) throws DatabaseException {\r
- Map<String, Variable> clone = getClone();\r
- for(Listener<Map<String, Variable>> listener : listeners) listener.execute(clone);\r
- }\r
-\r
- @Override\r
- public boolean isDisposed() {\r
- return false;\r
- }\r
-\r
- });\r
- \r
- }\r
- \r
- @Override\r
- public boolean isDisposed() {\r
- return false;\r
- }\r
- \r
- });\r
- \r
- }\r
- \r
- return graph.syncRequest(new ParametrizedPrimitiveRead<Variable, Map<String, Variable>>(this) {\r
- \r
- @Override\r
- public void register(ReadGraph graph, Listener<Map<String, Variable>> procedure) {\r
-\r
- listeners.add(procedure);\r
- procedure.execute(getClone());\r
- \r
- }\r
- \r
- });\r
- \r
- }\r
- \r
- private Map<String, Variable> getClone() {\r
- Map<String, Variable> clone = new HashMap<String, Variable>();\r
- clone.putAll(extension);\r
- return clone;\r
- }\r
- \r
- public Variable getPossibleSpecialChild(ReadGraph graph, String name) throws DatabaseException {\r
- return getExtension(graph).get(name);\r
- }\r
-\r
- public void collectSpecialChildren(ReadGraph graph, Collection<Variable> children) throws DatabaseException {\r
- children.addAll(getExtension(graph).values());\r
- }\r
- \r
-}\r
+package org.simantics.db.layer0.variable;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.procedure.single.SingleSetSyncListener;
+import org.simantics.db.common.request.ParametrizedPrimitiveRead;
+import org.simantics.db.common.request.ResourceRead;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.request.VariableFactoryRequest;
+import org.simantics.db.procedure.Listener;
+import org.simantics.db.service.QueryControl;
+import org.simantics.operation.Layer0X;
+
+public class ExtendedGraphChildVariable extends StandardGraphChildVariable {
+
+ private Map<String, Variable> extension;
+ private List<Listener<Map<String, Variable>>> listeners = new ArrayList<Listener<Map<String, Variable>>>();
+
+ public ExtendedGraphChildVariable(Variable parent, Resource resource) throws DatabaseException {
+ super(parent, null, resource);
+ }
+
+ Map<String, Variable> getExtension(ReadGraph graph) throws DatabaseException {
+
+ if(extension == null) {
+
+ extension = new HashMap<String, Variable>();
+
+ QueryControl qc = graph.getService(QueryControl.class);
+
+ qc.getIndependentGraph(graph).syncRequest(new ResourceRead<Collection<VariableFactory>>(resource) {
+
+ @Override
+ public Collection<VariableFactory> perform(ReadGraph graph) throws DatabaseException {
+ Layer0X L0X = Layer0X.getInstance(graph);
+ ArrayList<VariableFactory> result = new ArrayList<VariableFactory>();
+ for(Resource r : graph.getObjects(resource, L0X.HasChildVariables)) {
+ VariableFactory factory = graph.adapt(r, VariableFactory.class);
+ assert(factory != null);
+ result.add(factory);
+ }
+ return result;
+ }
+
+ }, new SingleSetSyncListener<VariableFactory>() {
+
+ @Override
+ public void add(ReadGraph graph, final VariableFactory factory) throws DatabaseException {
+
+ graph.syncRequest(new VariableFactoryRequest(ExtendedGraphChildVariable.this, factory), new SingleSetSyncListener<Variable>() {
+
+ @Override
+ public void add(ReadGraph graph, final Variable child) throws DatabaseException {
+ String name = child.getPropertyValue(graph, Variables.NAME);
+ extension.put(name, child);
+ }
+
+ @Override
+ public void remove(ReadGraph graph, Variable child) throws DatabaseException {
+ String name = child.getPropertyValue(graph, Variables.NAME);
+ Variable exist = extension.get(name);
+ if(exist == child) extension.remove(name);
+ }
+
+ public void finished(ReadGraph graph) throws DatabaseException {
+ Map<String, Variable> clone = getClone();
+ for(Listener<Map<String, Variable>> listener : listeners) listener.execute(clone);
+ }
+
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+
+ });
+
+ }
+
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+
+ });
+
+ }
+
+ return graph.syncRequest(new ParametrizedPrimitiveRead<Variable, Map<String, Variable>>(this) {
+
+ @Override
+ public void register(ReadGraph graph, Listener<Map<String, Variable>> procedure) {
+
+ listeners.add(procedure);
+ procedure.execute(getClone());
+
+ }
+
+ });
+
+ }
+
+ private Map<String, Variable> getClone() {
+ Map<String, Variable> clone = new HashMap<String, Variable>();
+ clone.putAll(extension);
+ return clone;
+ }
+
+ public Variable getPossibleSpecialChild(ReadGraph graph, String name) throws DatabaseException {
+ return getExtension(graph).get(name);
+ }
+
+ public void collectSpecialChildren(ReadGraph graph, Collection<Variable> children) throws DatabaseException {
+ children.addAll(getExtension(graph).values());
+ }
+
+}