]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/scl/SCL.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.swt.core / src / org / simantics / document / swt / core / scl / SCL.java
1 package org.simantics.document.swt.core.scl;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.simantics.databoard.Bindings;\r
6 import org.simantics.db.ReadGraph;\r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.WriteGraph;\r
9 import org.simantics.db.common.request.WriteRequest;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.variable.Variable;\r
12 import org.simantics.db.layer0.variable.Variables;\r
13 import org.simantics.document.server.handler.AbstractEventHandler;\r
14 import org.simantics.document.server.handler.EventHandler;\r
15 import org.simantics.document.server.handler.WriteEventHandler;\r
16 import org.simantics.document.server.io.CommandContext;\r
17 import org.simantics.document.server.io.CommandResult;\r
18 import org.simantics.document.server.serverResponse.ServerResponse;\r
19 import org.simantics.document.swt.core.SWTViews;\r
20 import org.simantics.scl.runtime.SCLContext;\r
21 import org.simantics.scl.runtime.function.Function1;\r
22 import org.simantics.scl.runtime.reporting.SCLReportingHandler;\r
23 import org.simantics.scl.runtime.tuple.Tuple0;\r
24 import org.simantics.ui.selection.WorkbenchSelectionElement;\r
25 import org.simantics.ui.selection.WorkbenchSelectionUtils;\r
26 \r
27 public class SCL {\r
28     \r
29     public static final String SCL_VALUE_PROPERTY = "sclValueProperty";\r
30     \r
31     public static EventHandler eventHandler(final Function1<Object, Object> fn) {\r
32         return new EventHandler() {\r
33                         \r
34                         @Override\r
35                         protected ServerResponse handle(ReadGraph graph, CommandContext parameters) throws DatabaseException {\r
36 \r
37                             final SCLReportingHandler printer = (SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER); \r
38                                 graph.async(new WriteRequest() {\r
39                                         \r
40                                         @Override\r
41                                         public void perform(WriteGraph graph) throws DatabaseException {\r
42                                             SCLContext sclContext = SCLContext.getCurrent();\r
43                                             Object oldPrinter = sclContext.put(SCLReportingHandler.REPORTING_HANDLER, printer);\r
44                                                 Object oldGraph = sclContext.put("graph", graph);\r
45                                                 fn.apply(Tuple0.INSTANCE);\r
46                                                 sclContext.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter);\r
47                                                 sclContext.put("graph", oldGraph);\r
48                                         }\r
49                                         \r
50                                 });\r
51                                 \r
52                                 return null;\r
53                                 \r
54                         }\r
55                         \r
56                 };\r
57     }\r
58     \r
59     public static String getURI(ReadGraph graph, Variable variable) throws DatabaseException {\r
60         return variable.getURI(graph);\r
61     }\r
62     \r
63     public static String propertyDisplayValue(ReadGraph graph, Variable variable, String property) throws DatabaseException {\r
64         Variable var = variable.getProperty(graph, property);\r
65         Variable var2 = var.getProperty(graph, Variables.DISPLAY_VALUE);\r
66         return var2.getValue(graph);\r
67     }\r
68     \r
69     public static AbstractEventHandler propertyValueSetter(ReadGraph graph, Variable variable, String property) throws DatabaseException {\r
70         String uri = variable.getURI(graph);\r
71         return new ValueSetter(uri, property);\r
72     }\r
73     \r
74     public static String propertyGetter(ReadGraph graph, Variable variable) throws DatabaseException {\r
75         String value = variable.getPossiblePropertyValue(graph, SCL_VALUE_PROPERTY);\r
76         return value;\r
77     }\r
78     \r
79     static class ValueSetter extends WriteEventHandler {\r
80         \r
81         private String varUri;\r
82         private String property;\r
83         \r
84         public ValueSetter(String varUri, String property) {\r
85             this.varUri = varUri;\r
86             this.property = property;\r
87         }\r
88         \r
89         @Override\r
90         protected CommandResult handle(WriteGraph graph, CommandContext parameters) throws DatabaseException {\r
91             Variable variable = Variables.getVariable(graph, varUri);\r
92             Variable var = variable.getPossibleProperty(graph, property);\r
93             Variable var2 = var.getPossibleProperty(graph, Variables.DISPLAY_VALUE);\r
94             var2.setValue(graph, parameters.getString("text"), Bindings.STRING);\r
95             return null;\r
96         }\r
97     };\r
98 \r
99     @SuppressWarnings("unchecked")\r
100     public static List<WorkbenchSelectionElement> decodeWSES(String key) {\r
101         return (List<WorkbenchSelectionElement>)SWTViews.decode(key);\r
102     }\r
103     \r
104     public static Resource wseResource(ReadGraph graph, WorkbenchSelectionElement wse) throws DatabaseException {\r
105         return WorkbenchSelectionUtils.getPossibleResource(wse);\r
106     }\r
107 \r
108 }\r