]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / synchronization / StyleUpdater.java
diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java
new file mode 100644 (file)
index 0000000..c536ff6
--- /dev/null
@@ -0,0 +1,232 @@
+package org.simantics.spreadsheet.graph.synchronization;\r
+\r
+import java.util.Collection;\r
+import java.util.Map;\r
+\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.datatypes.literal.Font;\r
+import org.simantics.datatypes.literal.RGB;\r
+import org.simantics.spreadsheet.graph.SpreadsheetBook;\r
+import org.simantics.spreadsheet.graph.SpreadsheetStyle;\r
+import org.simantics.structural.synchronization.base.CommandBuilder;\r
+import org.simantics.structural.synchronization.base.ModuleUpdateContext;\r
+import org.simantics.structural.synchronization.base.ModuleUpdaterBase;\r
+import org.simantics.structural.synchronization.base.PropertyUpdateRule;\r
+import org.simantics.structural.synchronization.base.Solver;\r
+\r
+public class StyleUpdater extends ModuleUpdaterBase<SheetLineComponent> {\r
+\r
+    private static class ForegroundUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "foreground";\r
+        }\r
+        \r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            RGB.Integer color = (RGB.Integer) value.getValue();\r
+            builder.foreground = color;\r
+        }\r
+    }\r
+    \r
+    private static class BackgroundUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "background";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            RGB.Integer color = (RGB.Integer) value.getValue();\r
+            builder.background = color;\r
+        }\r
+    }\r
+    \r
+    private static class FontUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "font";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            Font font = (Font) value.getValue();\r
+            builder.font = font;\r
+        }\r
+    }\r
+\r
+    private static class AlignUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "align";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            int align = (int) value.getValue();\r
+            builder.align = align;\r
+        }\r
+    }\r
+    \r
+    private static class FormatStringUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "formatString";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            String formatString = (String) value.getValue();\r
+            builder.formatString = formatString;\r
+        }\r
+    }\r
+\r
+    private static class FormatIndexUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "formatIndex";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            int index = (int) value.getValue();\r
+            builder.formatIndex = index;\r
+        }\r
+    }\r
+\r
+    private static class BorderUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "border";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            int border = (int) value.getValue();\r
+            builder.border = border;\r
+        }\r
+    }\r
+    \r
+    private static class LockedUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "locked";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            boolean locked = (boolean) value.getValue();\r
+            builder.locked = locked;\r
+        }\r
+    }\r
+    \r
+    private static class ColumnSpanUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "columnSpan";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            int columnSpan = (int) value.getValue();\r
+            builder.columnSpan = columnSpan;\r
+        }\r
+    }\r
+    \r
+    private static class RowSpanUpdateRule implements PropertyUpdateRule<SheetLineComponent> {\r
+        @Override\r
+        public String getPropertyName() {\r
+            return "rowSpan";\r
+        }\r
+\r
+        @Override\r
+        public void apply(ModuleUpdateContext<SheetLineComponent> context, boolean isCreating, Map<String, Variant> propertyMap, Map<String, Collection<String>> connectionMap, Variant value) {\r
+            StyleCommandBuilder builder = context.getConcreteCommand();\r
+            int rowSpan = (int) value.getValue();\r
+            builder.rowSpan = rowSpan;\r
+        }\r
+    }\r
+\r
+    \r
+    public StyleUpdater(String moduleType) {\r
+        super(moduleType);\r
+        \r
+        addPropertyUpdateRule(new ForegroundUpdateRule());\r
+        addPropertyUpdateRule(new BackgroundUpdateRule());\r
+        addPropertyUpdateRule(new FontUpdateRule());\r
+        addPropertyUpdateRule(new AlignUpdateRule());\r
+        addPropertyUpdateRule(new FormatStringUpdateRule());\r
+        addPropertyUpdateRule(new FormatIndexUpdateRule());\r
+        addPropertyUpdateRule(new BorderUpdateRule());\r
+        addPropertyUpdateRule(new LockedUpdateRule());\r
+        addPropertyUpdateRule(new ColumnSpanUpdateRule());\r
+        addPropertyUpdateRule(new RowSpanUpdateRule());\r
+    }\r
+\r
+    @Override\r
+    public CommandBuilder createAddCommandBuilder(final String name) {\r
+        return new StyleCommandBuilder(name, false);\r
+    }\r
+\r
+    @Override\r
+    public CommandBuilder createUpdateCommandBuilder(String name) {\r
+        return new StyleCommandBuilder(name, true);\r
+    }\r
+    \r
+    private static class StyleCommandBuilder implements CommandBuilder {\r
+\r
+        protected int rowSpan;\r
+        protected int columnSpan;\r
+        protected int border;\r
+        protected boolean locked;\r
+        protected int formatIndex;\r
+        protected String formatString;\r
+        protected org.simantics.datatypes.literal.RGB.Integer background;\r
+        protected org.simantics.datatypes.literal.RGB.Integer foreground;\r
+        protected Font font;\r
+        protected int align;\r
+        \r
+        private boolean update;\r
+        private String name;\r
+        \r
+        public StyleCommandBuilder(String name, boolean update) {\r
+            this.name = name.split("/")[1];\r
+            this.update = update;\r
+        }\r
+        \r
+        @Override\r
+        public void apply(Solver solver) {\r
+            SpreadsheetBook book = solver.getConcreteSolver();\r
+            SpreadsheetStyle style = SpreadsheetStyle.newInstace().name(name).align(align).font(font)\r
+                    .background(background).foreground(foreground).border(border).locked(locked).rowSpan(rowSpan)\r
+                    .columnSpan(columnSpan).formatIndex((short) formatIndex).formatString(formatString).build();\r
+            if (book.getStyle(style.getStyleId()) == null)\r
+                book.addStyle(style);\r
+            \r
+        }\r
+\r
+        @SuppressWarnings("unchecked")\r
+        @Override\r
+        public <T> T getConcrete() {\r
+            return (T) this;\r
+        }\r
+        \r
+        @Override\r
+        public String toString() {\r
+            StringBuilder sb = new StringBuilder();\r
+            sb.append("StyleCommandBuilder for ").append(name).append(" [background=").append(background).append(", foregroung=").append(foreground).append(", font=").append(font).append(", align=").append(align).append("]");\r
+            return sb.toString();\r
+        }\r
+        \r
+    }\r
+    \r
+}\r