1 package org.simantics.document.swt.core.scl;
\r
3 import java.util.List;
\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
29 public static final String SCL_VALUE_PROPERTY = "sclValueProperty";
\r
31 public static EventHandler eventHandler(final Function1<Object, Object> fn) {
\r
32 return new EventHandler() {
\r
35 protected ServerResponse handle(ReadGraph graph, CommandContext parameters) throws DatabaseException {
\r
37 final SCLReportingHandler printer = (SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER);
\r
38 graph.async(new WriteRequest() {
\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
59 public static String getURI(ReadGraph graph, Variable variable) throws DatabaseException {
\r
60 return variable.getURI(graph);
\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
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
74 public static String propertyGetter(ReadGraph graph, Variable variable) throws DatabaseException {
\r
75 String value = variable.getPossiblePropertyValue(graph, SCL_VALUE_PROPERTY);
\r
79 static class ValueSetter extends WriteEventHandler {
\r
81 private String varUri;
\r
82 private String property;
\r
84 public ValueSetter(String varUri, String property) {
\r
85 this.varUri = varUri;
\r
86 this.property = property;
\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
99 @SuppressWarnings("unchecked")
\r
100 public static List<WorkbenchSelectionElement> decodeWSES(String key) {
\r
101 return (List<WorkbenchSelectionElement>)SWTViews.decode(key);
\r
104 public static Resource wseResource(ReadGraph graph, WorkbenchSelectionElement wse) throws DatabaseException {
\r
105 return WorkbenchSelectionUtils.getPossibleResource(wse);
\r