]> gerrit.simantics Code Review - simantics/sysdyn.git/blob
32abe9e6748d04e8c7bb20509d7a5e21e9d902cc
[simantics/sysdyn.git] /
1 package org.simantics.jfreechart.chart.properties;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 \r
6 import org.eclipse.jface.dialogs.IInputValidator;\r
7 import org.simantics.browsing.ui.swt.widgets.TrackedText;\r
8 import org.simantics.browsing.ui.swt.widgets.impl.Widget;\r
9 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.exception.DatabaseException;\r
12 import org.simantics.db.management.ISessionContext;\r
13 import org.simantics.db.procedure.Listener;\r
14 import org.simantics.ui.SimanticsUI;\r
15 import org.simantics.utils.ui.AdaptionUtils;\r
16 \r
17 /**\r
18  * Variable exists validator for tracked text widgets. \r
19  * \r
20  * @author Teemu Lempinen\r
21  *\r
22  */\r
23 public class VariableExistsValidator implements IInputValidator, Widget {\r
24 \r
25         protected Collection<ChartVariable> variables;\r
26     protected TrackedText text;\r
27     private boolean allowEmpty;\r
28     @SuppressWarnings("unused")\r
29     private boolean useLabels = false;\r
30     \r
31     /**\r
32      * Validate against all variables\r
33      * \r
34      * Do not allow empty input\r
35      * @param support WidgetSupport\r
36      * @param text Text widget\r
37      */\r
38     public VariableExistsValidator(WidgetSupport support, TrackedText text) {\r
39         this(support, text, false);\r
40     }\r
41     \r
42    \r
43     \r
44     /**\r
45      * Validate against all variables\r
46      * \r
47      * @param support WidgetSupport\r
48      * @param text Text widget\r
49      * @param allowEmpty Allow empty input text\r
50      */\r
51     public VariableExistsValidator(WidgetSupport support, TrackedText text, boolean allowEmpty) {\r
52         support.register(this);\r
53         this.variables = new ArrayList<ChartVariable>();\r
54         this.text = text;\r
55         this.allowEmpty = allowEmpty;\r
56     }\r
57     \r
58     public VariableExistsValidator(WidgetSupport support, TrackedText text, boolean allowEmpty, boolean useLabels) {\r
59         this(support, text, allowEmpty);\r
60         this.useLabels = useLabels;\r
61     }\r
62     \r
63     /**\r
64      * Returns null if there is a variable named newText in the model\r
65      */\r
66     @Override\r
67     public String isValid(String newText) {\r
68         if(newText == null || newText.isEmpty()) {\r
69             if(allowEmpty)\r
70                 return null;\r
71             else\r
72                 return "Empty name not allowed";\r
73         }\r
74         \r
75         synchronized (variables) {\r
76             for(ChartVariable variable : variables) {\r
77                 if(newText.equals(variable.getLabel()))\r
78                     return null;\r
79                 if(newText.equals(variable.getRvi()))\r
80                     return null;\r
81             }\r
82         }\r
83         \r
84         return "Not a valid variable name";\r
85     }\r
86 \r
87     @Override\r
88     public void setInput(ISessionContext context, Object input) {\r
89         final Resource resource = AdaptionUtils.adaptToSingle(input, Resource.class);\r
90         \r
91         if(resource == null) {\r
92             variables = new ArrayList<ChartVariable>();\r
93             return;\r
94         }\r
95         \r
96        \r
97         try {\r
98             /* Find the model resource. It can be found with PartOf \r
99                relations from series resource in a chart */\r
100            AllVariablesOfModel query = AllVariablesOfModel.withRandomResource(context, resource);\r
101             \r
102             if(query != null) {\r
103                 // Find all variables and set them as the reference for isValid(String)\r
104                 SimanticsUI.getSession().asyncRequest(query\r
105                 , new Listener<Collection<ChartVariable>>() {\r
106 \r
107                     @Override\r
108                     public void execute(Collection<ChartVariable> variables) {\r
109                          VariableExistsValidator.this.variables = variables;\r
110                     }\r
111 \r
112                     @Override\r
113                     public void exception(Throwable t) {\r
114                         t.printStackTrace();\r
115                     }\r
116 \r
117                     @Override\r
118                     public boolean isDisposed() {\r
119                         return text.isDisposed();\r
120                     }\r
121 \r
122                 }); \r
123             }\r
124         } catch (DatabaseException e) {\r
125             e.printStackTrace();\r
126         }\r
127     }\r
128 \r
129 }\r