]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/CommandEventWidget.java
Improvements to modelled SWT documents (fixed)
[simantics/platform.git] / bundles / org.simantics.document.swt.core / src / org / simantics / document / swt / core / widget / CommandEventWidget.java
index fcdc3028d08473264226975bb121eb818a3f100a..ca6c31ddffdf8e5a565bf3d71f49d41edb7a267f 100644 (file)
@@ -1,59 +1,75 @@
-package org.simantics.document.swt.core.widget;\r
-\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.TreeMap;\r
-\r
-import org.simantics.document.server.IEventCommand;\r
-import org.simantics.document.server.JSONObject;\r
-import org.simantics.document.server.bean.DataDefinition;\r
-import org.simantics.document.server.client.WidgetData;\r
-import org.simantics.document.server.client.WidgetManager;\r
-import org.simantics.document.server.handler.AbstractEventHandler;\r
-import org.simantics.document.swt.core.SWTDocument;\r
-import org.simantics.document.swt.core.base.PostEventCommand;\r
-import org.simantics.document.swt.core.base.PropertyWidgetManager;\r
-\r
-public class CommandEventWidget  extends PropertyWidgetManager<Object> {\r
-\r
-    @Override\r
-    public Object createWidget(JSONObject object) {\r
-        return null;\r
-    }\r
-\r
-    @Override\r
-    public void updateProperties(SWTDocument document, JSONObject object, Object widget) {\r
-        // No properties\r
-    }\r
-\r
-    @Override\r
-    public void updateChildren(SWTDocument document, JSONObject object, Object widget,\r
-            TreeMap<String, WidgetData> childMap) {\r
-        // No children\r
-    }\r
-\r
-    @Override\r
-    public IEventCommand eventCommand(SWTDocument document, JSONObject object, Object component, String command) {\r
-        if("event".equals(command)) {\r
-            List<DataDefinition> dataDefinitions = object.getJSONField("dataDefinitions");\r
-            HashMap<String, String> data = new HashMap<String, String>();\r
-            for(DataDefinition dd : dataDefinitions) {\r
-                WidgetData wd = document.getWidgetData().get(dd.getElementId());\r
-                if(wd != null && wd.object != null) {\r
-                    @SuppressWarnings("rawtypes")\r
-                    WidgetManager manager = document.getManager(wd.object);\r
-                    if(manager != null) {\r
-                        @SuppressWarnings("unchecked")\r
-                        String result = manager.getProperty(document, wd.object, wd.widget, dd.getProperty());\r
-                        data.put(dd.getTarget(), result);\r
-                    }\r
-                }\r
-            }\r
-            AbstractEventHandler handler = object.getJSONField("SCLFunction");\r
-            return new PostEventCommand(document, handler, data);\r
-        } else {\r
-            return null;\r
-        }\r
-    }\r
-    \r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2019 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Semantum Oy - initial API and implementation
+ *******************************************************************************/
+package org.simantics.document.swt.core.widget;
+
+import java.util.List;
+import java.util.TreeMap;
+
+import org.simantics.document.server.IEventCommand;
+import org.simantics.document.server.JSONObject;
+import org.simantics.document.server.bean.DataDefinition;
+import org.simantics.document.server.client.WidgetData;
+import org.simantics.document.server.client.WidgetManager;
+import org.simantics.document.server.handler.AbstractEventHandler;
+import org.simantics.document.server.io.CommandContext;
+import org.simantics.document.server.io.CommandContextImpl;
+import org.simantics.document.server.io.CommandContextMutable;
+import org.simantics.document.server.io.ICommand;
+import org.simantics.document.swt.core.SWTDocument;
+import org.simantics.document.swt.core.base.PostEventCommand;
+import org.simantics.document.swt.core.base.PropertyWidgetManager;
+
+public class CommandEventWidget  extends PropertyWidgetManager<Object> {
+
+    @Override
+    public Object createWidget(JSONObject object) {
+        return null;
+    }
+
+    @Override
+    public void updateProperties(SWTDocument document, JSONObject object, Object widget) {
+        // No properties
+    }
+
+    @Override
+    public void updateChildren(SWTDocument document, JSONObject object, Object widget,
+            TreeMap<String, WidgetData> childMap) {
+        // No children
+    }
+
+    @Override
+    public IEventCommand eventCommand(SWTDocument document, JSONObject object, Object component, ICommand command, CommandContext p) {
+        if("event".equals(command.getCommand())) {
+            List<DataDefinition> dataDefinitions = object.getJSONField("dataDefinitions");
+            CommandContextMutable context = new CommandContextImpl();
+            context.merge(p);
+            context.merge(command.getConstants());
+            for(DataDefinition dd : dataDefinitions) {
+                WidgetData wd = document.getWidgetData().get(dd.getElementId());
+                if(wd != null && wd.object != null) {
+                    @SuppressWarnings("rawtypes")
+                    WidgetManager manager = document.getManager(wd.object);
+                    if(manager != null) {
+                        @SuppressWarnings("unchecked")
+                        String result = manager.getProperty(document, wd.object, wd.widget, dd.getProperty());
+                        context.putValue(dd.getTarget(), result);
+                    }
+                }
+            }
+            AbstractEventHandler handler = object.getJSONField("SCLFunction");
+            return new PostEventCommand(document, handler, context);
+        } else {
+            return null;
+        }
+    }
+    
+}