]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EnumerationVariableModifier3.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.graph.impl / src / org / simantics / browsing / ui / graph / impl / EnumerationVariableModifier3.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.graph.impl;\r
13 \r
14 import java.util.List;\r
15 \r
16 import org.simantics.browsing.ui.content.Labeler.EnumerationModifier;\r
17 import org.simantics.databoard.Bindings;\r
18 import org.simantics.db.ReadGraph;\r
19 import org.simantics.db.RequestProcessor;\r
20 import org.simantics.db.Session;\r
21 import org.simantics.db.VirtualGraph;\r
22 import org.simantics.db.WriteGraph;\r
23 import org.simantics.db.common.request.WriteRequest;\r
24 import org.simantics.db.exception.DatabaseException;\r
25 import org.simantics.db.layer0.variable.Variable;\r
26 import org.simantics.db.layer0.variable.Variables;\r
27 import org.simantics.db.request.Read;\r
28 import org.simantics.utils.datastructures.Callback;\r
29 import org.simantics.utils.ui.ErrorLogger;\r
30 \r
31 /**\r
32  * @author Tuukka Lehtonen\r
33  */\r
34 public class EnumerationVariableModifier3 implements EnumerationModifier {\r
35 \r
36     protected final Session      session;\r
37     protected final Variable     variable;\r
38     protected final List<String> allowedValues;\r
39     protected final String       defaultValue;\r
40 \r
41     protected Throwable        modifierFailed;\r
42 \r
43     public EnumerationVariableModifier3(RequestProcessor processor, Variable variable, List<String> allowedValues) {\r
44 \r
45         this.session = processor.getSession();\r
46         this.variable = variable;\r
47         this.allowedValues = allowedValues;\r
48         this.defaultValue = computeDefaultValue(processor, variable);\r
49         //System.err.println(this.defaultValue);\r
50         \r
51     }\r
52 \r
53     protected String computeDefaultValue(RequestProcessor processor, final Variable variable) {\r
54         try {\r
55            return processor.syncRequest(new Read<String>() {\r
56                 @Override\r
57                 public String perform(ReadGraph graph) throws DatabaseException {\r
58           //            System.err.println(variable.getURI(graph));\r
59                         return variable.getValue(graph);//variable.getPossiblePropertyValue(graph, Variables.LABEL);\r
60                 }\r
61             });\r
62         } catch (DatabaseException e) {\r
63             return "";\r
64         }\r
65     }\r
66 \r
67     public class Write extends WriteRequest {\r
68 \r
69         final private Variable variable;\r
70         final private String label;\r
71 \r
72         public Write(Variable variable, String label) {\r
73             super((VirtualGraph)null);\r
74             this.variable = variable;\r
75             this.label = label;\r
76         }\r
77 \r
78         @Override\r
79         public void perform(WriteGraph graph) throws DatabaseException {\r
80                 variable.setValue(graph, label, Bindings.STRING);\r
81         }\r
82 \r
83     }\r
84     \r
85     protected void doModify(final String label) {\r
86         session.asyncRequest(new Write(variable, label),\r
87                 new Callback<DatabaseException>() {\r
88             @Override\r
89             public void run(DatabaseException parameter) {\r
90                 if (parameter != null)\r
91                     ErrorLogger.defaultLogError(parameter);\r
92             }\r
93         });\r
94     }\r
95 \r
96     @Override\r
97     public String getValue() {\r
98         return defaultValue;\r
99     }\r
100 \r
101     @Override\r
102     public String isValid(String label) {\r
103         if (modifierFailed != null)\r
104             return "Could not resolve validator for this value, modification denied. Reason: "\r
105             + modifierFailed.getMessage();\r
106         // Validity should already be enforced by the editing UI for\r
107         // enumerations.\r
108         return null;\r
109     }\r
110 \r
111     @Override\r
112     public final void modify(String label) {\r
113         if (modifierFailed != null)\r
114             // Should never end up here, isValid should prevent it.\r
115             throw new Error("modifier failed: " + modifierFailed.getMessage());\r
116         doModify(label);\r
117     }\r
118 \r
119     @Override\r
120     public List<String> getValues() {\r
121         return allowedValues;\r
122     }\r
123 \r
124 };\r