]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/scl/SCL.java
Fixed multiple issues causing dangling references to discarded queries
[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;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
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;
29
30 public class SCL {
31     
32     public static final String SCL_VALUE_PROPERTY = "sclValueProperty";
33     
34     public static EventHandler eventHandler(final Function1<Object, Object> fn) {
35         return new EventHandler() {
36                         
37                         @Override
38                         protected ServerResponse handle(ReadGraph graph, CommandContext parameters) throws DatabaseException {
39
40                             final SCLReportingHandler printer = (SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER); 
41                                 graph.async(new WriteRequest() {
42                                         
43                                         @Override
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);
48                                                 try {
49                                                         fn.apply(Tuple0.INSTANCE);
50                                                 } finally {
51                                                         sclContext.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter);
52                                                         sclContext.put("graph", oldGraph);
53                                                 }
54                                         }
55                                         
56                                 });
57                                 
58                                 return null;
59                                 
60                         }
61                         
62                 };
63     }
64     
65     public static String getURI(ReadGraph graph, Variable variable) throws DatabaseException {
66         return variable.getURI(graph);
67     }
68     
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);
73     }
74     
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);
78     }
79     
80     public static String propertyGetter(ReadGraph graph, Variable variable) throws DatabaseException {
81         String value = variable.getPossiblePropertyValue(graph, SCL_VALUE_PROPERTY);
82         return value;
83     }
84     
85     static class ValueSetter extends WriteEventHandler {
86         
87         private String varUri;
88         private String property;
89         
90         public ValueSetter(String varUri, String property) {
91             this.varUri = varUri;
92             this.property = property;
93         }
94         
95         @Override
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);
101             return null;
102         }
103     };
104
105     @SuppressWarnings("unchecked")
106     public static List<WorkbenchSelectionElement> decodeWSES(String key) {
107         return (List<WorkbenchSelectionElement>)SWTViews.decode(key);
108     }
109     
110     public static Resource wseResource(ReadGraph graph, WorkbenchSelectionElement wse) throws DatabaseException {
111         return WorkbenchSelectionUtils.getPossibleResource(wse);
112     }
113
114     public static ColumnsBean columnsBean(ReadGraph graph, Resource value) throws DatabaseException {
115         return graph.getValue(value, ColumnsBean.BINDING);
116     }
117
118     public static List<ColumnBean> columnBeans(ColumnsBean bean) {
119         ArrayList<ColumnBean> result = new ArrayList<>();
120         for(ColumnBean b : bean.columns) result.add(b);
121         return result;
122     }
123
124     public static String columnBeanKey(ColumnBean bean) {
125         return bean.key;
126     }
127
128     public static String columnBeanLabel(ColumnBean bean) {
129         return bean.label;
130     }
131
132 }