-package org.simantics.spreadsheet.graph.adapter;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.binding.mutable.Variant;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.variable.ConstantChildVariable;\r
-import org.simantics.db.layer0.variable.ExtendedGraphChildVariable;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.layer0.variable.VariableSpaceManipulator;\r
-import org.simantics.db.layer0.variable.Variables;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.spreadsheet.Range;\r
-import org.simantics.spreadsheet.SheetVariables;\r
-import org.simantics.spreadsheet.common.matrix.VariantMatrix;\r
-import org.simantics.spreadsheet.util.SpreadsheetUtils;\r
-\r
-public class SpreadsheetVariable extends ExtendedGraphChildVariable {\r
-\r
-// final private Collection<Pair<StringCellParser, GraphCellCreator>> creators = new ArrayList<Pair<StringCellParser, GraphCellCreator>>(); \r
- \r
- public SpreadsheetVariable(Variable parent, Resource resource) throws DatabaseException {\r
- \r
- super(parent, resource);\r
- \r
-// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.MATRIX_PARSER, new MatrixCellCreator(resource)));\r
-// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.EXPRESSION_PARSER, new ExpressionCellCreator(resource)));\r
-// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.COMMAND_PARSER, new CommandCellCreator(resource)));\r
-// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.RESOURCE_ARRAY_PARSER, new ResourceArrayCellCreator(resource)));\r
-// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.TEXT_PARSER, new TextCellCreator(resource)));\r
- \r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- protected <T> T tryAdapt(ReadGraph graph, Class<T> clazz) throws DatabaseException {\r
- if(VariableSpaceManipulator.class == clazz) {\r
- \r
- return (T)new VariableSpaceManipulator() {\r
-\r
- @Override\r
- public void apply(WriteGraph graph, Modification modification) throws DatabaseException {\r
- \r
- Layer0 L0 = Layer0.getInstance(graph);\r
- for(String name : modification.removedChildren) {\r
- Variable child = getChild(graph, name);\r
- Resource represents = child.getRepresents(graph);\r
- graph.deny(represents, L0.PartOf);\r
- }\r
- \r
- for(ChildCreationData data : modification.newChildren) {\r
- Resource container = getRepresents(graph);\r
- Resource cell = graph.newResource();\r
- Resource type = graph.getResource(data.type);\r
- graph.claim(cell, L0.InstanceOf, null, type);\r
- graph.addLiteral(cell, L0.HasName, L0.NameOf, L0.String, data.name, Bindings.STRING);\r
- for(PropertyCreationData p : data.properties) {\r
- Resource property = graph.getResource(p.name);\r
- graph.claimLiteral(cell, property, p.value.getValue());\r
- }\r
- graph.claim(cell, L0.PartOf, container);\r
- \r
- }\r
- \r
- }\r
- \r
- };\r
- \r
- }\r
- return null;\r
- }\r
-\r
- @Override\r
- public <T> T adapt(ReadGraph graph, Class<T> clazz) throws DatabaseException {\r
- T t = tryAdapt(graph, clazz);\r
- return t != null ? t : super.adapt(graph, clazz);\r
- }\r
-\r
- @Override\r
- public <T> T adaptPossible(ReadGraph graph, Class<T> clazz) throws DatabaseException {\r
- T t = tryAdapt(graph, clazz);\r
- return t != null ? t : super.adaptPossible(graph, clazz);\r
- }\r
-\r
- final String[] propertyNames = { SheetVariables.CONTENT, Variables.LABEL, "immutable" }; \r
- final Binding[] bindings = { Bindings.VARIANT, Bindings.STRING, Bindings.BOOLEAN};\r
- \r
- @Override\r
- public Variable getPossibleSpecialChild(ReadGraph graph, String name) throws DatabaseException {\r
- if(name.contains(":")) {\r
- Range range = SpreadsheetUtils.decodeRange(name, 0, 0);\r
- \r
- VariantMatrix matrix = new VariantMatrix(range.height(),range.width());\r
- \r
- for(int x=range.startColumn;x<=range.endColumn;x++) {\r
- for(int y=range.startRow;y<=range.endRow;y++) {\r
- String location = SpreadsheetUtils.cellName(y,x);\r
- Variable child = getPossibleChild(graph, location);\r
- Variant value = null;\r
- if(child != null)\r
- value = child.getPossiblePropertyValue(graph, SheetVariables.CONTENT, Bindings.VARIANT);\r
- matrix.set(y-range.startRow, x-range.startColumn, value);\r
- }\r
- }\r
- \r
- return new ConstantChildVariable(this, name, propertyNames, bindings, new Object[] {\r
- Variant.ofInstance(matrix), null, name, false\r
- });\r
- \r
- } else {\r
- return super.getPossibleSpecialChild(graph, name);\r
- }\r
- }\r
- \r
-}\r
+package org.simantics.spreadsheet.graph.adapter;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.mutable.Variant;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.ConstantChildVariable;
+import org.simantics.db.layer0.variable.ExtendedGraphChildVariable;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.layer0.variable.VariableSpaceManipulator;
+import org.simantics.db.layer0.variable.Variables;
+import org.simantics.layer0.Layer0;
+import org.simantics.spreadsheet.Range;
+import org.simantics.spreadsheet.SheetVariables;
+import org.simantics.spreadsheet.common.matrix.VariantMatrix;
+import org.simantics.spreadsheet.util.SpreadsheetUtils;
+
+public class SpreadsheetVariable extends ExtendedGraphChildVariable {
+
+// final private Collection<Pair<StringCellParser, GraphCellCreator>> creators = new ArrayList<Pair<StringCellParser, GraphCellCreator>>();
+
+ public SpreadsheetVariable(Variable parent, Resource resource) throws DatabaseException {
+
+ super(parent, resource);
+
+// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.MATRIX_PARSER, new MatrixCellCreator(resource)));
+// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.EXPRESSION_PARSER, new ExpressionCellCreator(resource)));
+// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.COMMAND_PARSER, new CommandCellCreator(resource)));
+// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.RESOURCE_ARRAY_PARSER, new ResourceArrayCellCreator(resource)));
+// creators.add(new Pair<StringCellParser, GraphCellCreator>(Parsers.TEXT_PARSER, new TextCellCreator(resource)));
+
+ }
+
+ @SuppressWarnings("unchecked")
+ protected <T> T tryAdapt(ReadGraph graph, Class<T> clazz) throws DatabaseException {
+ if(VariableSpaceManipulator.class == clazz) {
+
+ return (T)new VariableSpaceManipulator() {
+
+ @Override
+ public void apply(WriteGraph graph, Modification modification) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+ for(String name : modification.removedChildren) {
+ Variable child = getChild(graph, name);
+ Resource represents = child.getRepresents(graph);
+ graph.deny(represents, L0.PartOf);
+ }
+
+ for(ChildCreationData data : modification.newChildren) {
+ Resource container = getRepresents(graph);
+ Resource cell = graph.newResource();
+ Resource type = graph.getResource(data.type);
+ graph.claim(cell, L0.InstanceOf, null, type);
+ graph.addLiteral(cell, L0.HasName, L0.NameOf, L0.String, data.name, Bindings.STRING);
+ for(PropertyCreationData p : data.properties) {
+ Resource property = graph.getResource(p.name);
+ graph.claimLiteral(cell, property, p.value.getValue());
+ }
+ graph.claim(cell, L0.PartOf, container);
+
+ }
+
+ }
+
+ };
+
+ }
+ return null;
+ }
+
+ @Override
+ public <T> T adapt(ReadGraph graph, Class<T> clazz) throws DatabaseException {
+ T t = tryAdapt(graph, clazz);
+ return t != null ? t : super.adapt(graph, clazz);
+ }
+
+ @Override
+ public <T> T adaptPossible(ReadGraph graph, Class<T> clazz) throws DatabaseException {
+ T t = tryAdapt(graph, clazz);
+ return t != null ? t : super.adaptPossible(graph, clazz);
+ }
+
+ final String[] propertyNames = { SheetVariables.CONTENT, Variables.LABEL, "immutable" };
+ final Binding[] bindings = { Bindings.VARIANT, Bindings.STRING, Bindings.BOOLEAN};
+
+ @Override
+ public Variable getPossibleSpecialChild(ReadGraph graph, String name) throws DatabaseException {
+ if(name.contains(":")) {
+ Range range = SpreadsheetUtils.decodeRange(name, 0, 0);
+
+ VariantMatrix matrix = new VariantMatrix(range.height(),range.width());
+
+ for(int x=range.startColumn;x<=range.endColumn;x++) {
+ for(int y=range.startRow;y<=range.endRow;y++) {
+ String location = SpreadsheetUtils.cellName(y,x);
+ Variable child = getPossibleChild(graph, location);
+ Variant value = null;
+ if(child != null)
+ value = child.getPossiblePropertyValue(graph, SheetVariables.CONTENT, Bindings.VARIANT);
+ matrix.set(y-range.startRow, x-range.startColumn, value);
+ }
+ }
+
+ return new ConstantChildVariable(this, name, propertyNames, bindings, new Object[] {
+ Variant.ofInstance(matrix), null, name, false
+ });
+
+ } else {
+ return super.getPossibleSpecialChild(graph, name);
+ }
+ }
+
+}