--- /dev/null
+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