]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/EnumerationVariableModifier.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.graph.impl / src / org / simantics / browsing / ui / graph / impl / EnumerationVariableModifier.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.db.ReadGraph;\r
18 import org.simantics.db.RequestProcessor;\r
19 import org.simantics.db.Session;\r
20 import org.simantics.db.UndoContext;\r
21 import org.simantics.db.common.request.ReadRequest;\r
22 import org.simantics.db.exception.DatabaseException;\r
23 import org.simantics.db.layer0.variable.Variable;\r
24 import org.simantics.db.layer0.variable.VariableWrite;\r
25 import org.simantics.utils.datastructures.Callback;\r
26 import org.simantics.utils.ui.ErrorLogger;\r
27 \r
28 /**\r
29  * @author Tuukka Lehtonen\r
30  */\r
31 public class EnumerationVariableModifier implements EnumerationModifier {\r
32 \r
33     protected final Session      session;\r
34     protected final UndoContext  undoContext;\r
35     protected final Variable     variable;\r
36     protected final List<String> allowedValues;\r
37     protected final String       defaultValue;\r
38 \r
39     private String             initialValue;\r
40     protected Throwable        modifierFailed;\r
41 \r
42     public EnumerationVariableModifier(RequestProcessor processor, UndoContext undoContext, Variable variable,\r
43             List<String> allowedValues, String defaultValue) {\r
44         this.session = processor.getSession();\r
45         this.undoContext = undoContext;\r
46         this.variable = variable;\r
47         this.allowedValues = allowedValues;\r
48         this.defaultValue = defaultValue;\r
49 \r
50         initializeModifier(processor);\r
51     }\r
52 \r
53     protected void initializeModifier(RequestProcessor processor) {\r
54         try {\r
55             processor.syncRequest(new ReadRequest() {\r
56                 @Override\r
57                 public void run(ReadGraph graph) throws DatabaseException {\r
58                     initialValue = getInitialValue(graph);\r
59                 }\r
60             });\r
61         } catch (DatabaseException e) {\r
62             modifierFailed = e;\r
63         }\r
64     }\r
65 \r
66     protected void doModify(final String label) {\r
67         session.asyncRequest(new VariableWrite(variable, label, null, null),\r
68                 new Callback<DatabaseException>() {\r
69             @Override\r
70             public void run(DatabaseException parameter) {\r
71                 if (parameter != null)\r
72                     ErrorLogger.defaultLogError(parameter);\r
73             }\r
74         });\r
75     }\r
76 \r
77     protected String getInitialValue(ReadGraph graph) throws DatabaseException {\r
78         Object value = variable.getValue(graph);\r
79         return value == null ? defaultValue : value.toString();\r
80     }\r
81 \r
82     @Override\r
83     public String getValue() {\r
84         return initialValue;\r
85     }\r
86 \r
87     @Override\r
88     public String isValid(String label) {\r
89         if (modifierFailed != null)\r
90             return "Could not resolve validator for this value, modification denied. Reason: "\r
91             + modifierFailed.getMessage();\r
92         // Validity should already be enforced by the editing UI for\r
93         // enumerations.\r
94         return null;\r
95     }\r
96 \r
97     @Override\r
98     public final void modify(String label) {\r
99         if (modifierFailed != null)\r
100             // Should never end up here, isValid should prevent it.\r
101             throw new Error("modifier failed: " + modifierFailed.getMessage());\r
102         doModify(label);\r
103     }\r
104 \r
105     @Override\r
106     public List<String> getValues() {\r
107         return allowedValues;\r
108     }\r
109 \r
110 };\r