1 package org.simantics.document.swt.core.scl;
3 import java.util.ArrayList;
6 import org.simantics.databoard.Bindings;
7 import org.simantics.db.ReadGraph;
8 import org.simantics.db.Resource;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.common.request.WriteRequest;
11 import org.simantics.db.exception.DatabaseException;
12 import org.simantics.db.layer0.variable.Variable;
13 import org.simantics.db.layer0.variable.Variables;
14 import org.simantics.document.server.handler.AbstractEventHandler;
15 import org.simantics.document.server.handler.EventHandler;
16 import org.simantics.document.server.handler.WriteEventHandler;
17 import org.simantics.document.server.io.CommandContext;
18 import org.simantics.document.server.io.CommandResult;
19 import org.simantics.document.server.serverResponse.ServerResponse;
20 import org.simantics.document.swt.core.SWTViews;
21 import org.simantics.document.swt.core.bean.ColumnBean;
22 import org.simantics.document.swt.core.bean.ColumnsBean;
23 import org.simantics.scl.runtime.SCLContext;
24 import org.simantics.scl.runtime.function.Function1;
25 import org.simantics.scl.runtime.reporting.SCLReportingHandler;
26 import org.simantics.scl.runtime.tuple.Tuple0;
27 import org.simantics.ui.selection.WorkbenchSelectionElement;
28 import org.simantics.ui.selection.WorkbenchSelectionUtils;
32 public static final String SCL_VALUE_PROPERTY = "sclValueProperty";
34 public static EventHandler eventHandler(final Function1<Object, Object> fn) {
35 return new EventHandler() {
38 protected ServerResponse handle(ReadGraph graph, CommandContext parameters) throws DatabaseException {
40 final SCLReportingHandler printer = (SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER);
41 graph.async(new WriteRequest() {
44 public void perform(WriteGraph graph) throws DatabaseException {
45 SCLContext sclContext = SCLContext.getCurrent();
46 Object oldPrinter = sclContext.put(SCLReportingHandler.REPORTING_HANDLER, printer);
47 Object oldGraph = sclContext.put("graph", graph);
49 fn.apply(Tuple0.INSTANCE);
51 sclContext.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter);
52 sclContext.put("graph", oldGraph);
65 public static String getURI(ReadGraph graph, Variable variable) throws DatabaseException {
66 return variable.getURI(graph);
69 public static String propertyDisplayValue(ReadGraph graph, Variable variable, String property) throws DatabaseException {
70 Variable var = variable.getProperty(graph, property);
71 Variable var2 = var.getProperty(graph, Variables.DISPLAY_VALUE);
72 return var2.getValue(graph);
75 public static AbstractEventHandler propertyValueSetter(ReadGraph graph, Variable variable, String property) throws DatabaseException {
76 String uri = variable.getURI(graph);
77 return new ValueSetter(uri, property);
80 public static String propertyGetter(ReadGraph graph, Variable variable) throws DatabaseException {
81 String value = variable.getPossiblePropertyValue(graph, SCL_VALUE_PROPERTY);
85 static class ValueSetter extends WriteEventHandler {
87 private String varUri;
88 private String property;
90 public ValueSetter(String varUri, String property) {
92 this.property = property;
96 protected CommandResult handle(WriteGraph graph, CommandContext parameters) throws DatabaseException {
97 Variable variable = Variables.getVariable(graph, varUri);
98 Variable var = variable.getPossibleProperty(graph, property);
99 Variable var2 = var.getPossibleProperty(graph, Variables.DISPLAY_VALUE);
100 var2.setValue(graph, parameters.getString("text"), Bindings.STRING);
105 @SuppressWarnings("unchecked")
106 public static List<WorkbenchSelectionElement> decodeWSES(String key) {
107 return (List<WorkbenchSelectionElement>)SWTViews.decode(key);
110 public static Resource wseResource(ReadGraph graph, WorkbenchSelectionElement wse) throws DatabaseException {
111 return WorkbenchSelectionUtils.getPossibleResource(wse);
114 public static ColumnsBean columnsBean(ReadGraph graph, Resource value) throws DatabaseException {
115 return graph.getValue(value, ColumnsBean.BINDING);
118 public static List<ColumnBean> columnBeans(ColumnsBean bean) {
119 ArrayList<ColumnBean> result = new ArrayList<>();
120 for(ColumnBean b : bean.columns) result.add(b);
124 public static String columnBeanKey(ColumnBean bean) {
128 public static String columnBeanLabel(ColumnBean bean) {