1 package org.simantics.issues.ui.handler;
3 import java.util.ArrayList;
6 import org.simantics.Simantics;
7 import org.simantics.db.Resource;
8 import org.simantics.db.Session;
9 import org.simantics.db.VirtualGraph;
10 import org.simantics.db.WriteGraph;
11 import org.simantics.db.common.request.WriteRequest;
12 import org.simantics.db.common.utils.Logger;
13 import org.simantics.db.exception.DatabaseException;
14 import org.simantics.db.layer0.variable.Variable;
15 import org.simantics.db.service.VirtualGraphSupport;
16 import org.simantics.scl.runtime.SCLContext;
17 import org.simantics.scl.runtime.function.Function;
20 * @author Tuukka Lehtonen
23 class FunctionHandler extends PreferenceHandler {
25 private String functionPropertyName;
26 private Object argument;
28 public FunctionHandler(String virtualGraphId, String functionPropertyName, Object argument) {
29 super(virtualGraphId, null, false);
30 this.functionPropertyName = functionPropertyName;
31 this.argument = argument;
34 public void execute(List<Variable> vars, List<Resource> resources) {
37 Session session = Simantics.peekSession();
41 VirtualGraph vg = virtualGraphId == null ? null :
42 session.getService(VirtualGraphSupport.class).getWorkspacePersistent(virtualGraphId);
44 session.asyncRequest(new WriteRequest(vg) {
46 public void perform(WriteGraph graph) throws DatabaseException {
47 graph.markUndoPoint();
48 execute(graph, vars, functionPropertyName);
52 Logger.defaultLogError(e);
56 @SuppressWarnings({ "rawtypes", "unchecked" })
57 protected void execute(WriteGraph graph, List<Variable> vars, String functionPropertyName) throws DatabaseException {
58 List<Function> hiders = new ArrayList<>(vars.size());
59 for (Variable v : vars) {
60 Function f = v.getPossiblePropertyValue(graph, functionPropertyName);
64 if (!hiders.isEmpty()) {
65 SCLContext ctx = SCLContext.getCurrent();
66 Object oldGraph = ctx.put("graph", graph); //$NON-NLS-1$
68 for (Function f : hiders)
70 } catch (Throwable t) {
71 throw new DatabaseException(t);
73 ctx.put("graph", oldGraph); //$NON-NLS-1$