svn-gvsig-desktop / trunk / extensions / extExpressionField / src / com / iver / cit / gvsig / ExpressionFieldExtension.java @ 30790
History | View | Annotate | Download (13.5 KB)
1 | 13444 | caballero | package com.iver.cit.gvsig; |
---|---|---|---|
2 | |||
3 | import java.util.ArrayList; |
||
4 | 27750 | vcaballero | import java.util.BitSet; |
5 | 13444 | caballero | import java.util.Iterator; |
6 | |||
7 | 27750 | vcaballero | import org.apache.bsf.BSFException; |
8 | 13444 | caballero | import org.apache.bsf.BSFManager; |
9 | 27750 | vcaballero | import org.gvsig.gui.beans.incrementabletask.IIncrementable; |
10 | import org.gvsig.gui.beans.incrementabletask.IncrementableEvent; |
||
11 | import org.gvsig.gui.beans.incrementabletask.IncrementableListener; |
||
12 | import org.gvsig.gui.beans.incrementabletask.IncrementableTask; |
||
13 | import org.gvsig.gui.beans.progresspanel.LogControl; |
||
14 | 13444 | caballero | |
15 | import com.iver.andami.PluginServices; |
||
16 | 16774 | vcaballero | import com.iver.andami.messages.NotificationManager; |
17 | 13444 | caballero | import com.iver.andami.plugins.Extension; |
18 | import com.iver.cit.gvsig.gui.FieldExpressionPage; |
||
19 | import com.iver.cit.gvsig.project.documents.table.IOperator; |
||
20 | import com.iver.cit.gvsig.project.documents.table.gui.EvalExpressionDialog; |
||
21 | 27750 | vcaballero | import com.iver.cit.gvsig.project.documents.table.gui.Table; |
22 | 13444 | caballero | import com.iver.cit.gvsig.project.documents.table.operators.Abs; |
23 | import com.iver.cit.gvsig.project.documents.table.operators.Acos; |
||
24 | import com.iver.cit.gvsig.project.documents.table.operators.After; |
||
25 | import com.iver.cit.gvsig.project.documents.table.operators.Area; |
||
26 | import com.iver.cit.gvsig.project.documents.table.operators.Asin; |
||
27 | import com.iver.cit.gvsig.project.documents.table.operators.Atan; |
||
28 | import com.iver.cit.gvsig.project.documents.table.operators.Before; |
||
29 | import com.iver.cit.gvsig.project.documents.table.operators.Ceil; |
||
30 | import com.iver.cit.gvsig.project.documents.table.operators.Cos; |
||
31 | 24544 | fdiaz | import com.iver.cit.gvsig.project.documents.table.operators.DateToString; |
32 | 13444 | caballero | import com.iver.cit.gvsig.project.documents.table.operators.Distinct; |
33 | import com.iver.cit.gvsig.project.documents.table.operators.Division; |
||
34 | import com.iver.cit.gvsig.project.documents.table.operators.E; |
||
35 | import com.iver.cit.gvsig.project.documents.table.operators.EndsWith; |
||
36 | import com.iver.cit.gvsig.project.documents.table.operators.Equal; |
||
37 | import com.iver.cit.gvsig.project.documents.table.operators.Equals; |
||
38 | import com.iver.cit.gvsig.project.documents.table.operators.Exp; |
||
39 | 24544 | fdiaz | import com.iver.cit.gvsig.project.documents.table.operators.Floor; |
40 | 13444 | caballero | import com.iver.cit.gvsig.project.documents.table.operators.Geometry; |
41 | import com.iver.cit.gvsig.project.documents.table.operators.GetTimeDate; |
||
42 | import com.iver.cit.gvsig.project.documents.table.operators.IndexOf; |
||
43 | import com.iver.cit.gvsig.project.documents.table.operators.IsNumber; |
||
44 | import com.iver.cit.gvsig.project.documents.table.operators.LastIndexOf; |
||
45 | import com.iver.cit.gvsig.project.documents.table.operators.Length; |
||
46 | import com.iver.cit.gvsig.project.documents.table.operators.LessEquals; |
||
47 | import com.iver.cit.gvsig.project.documents.table.operators.LessThan; |
||
48 | import com.iver.cit.gvsig.project.documents.table.operators.Log; |
||
49 | import com.iver.cit.gvsig.project.documents.table.operators.Max; |
||
50 | import com.iver.cit.gvsig.project.documents.table.operators.Min; |
||
51 | import com.iver.cit.gvsig.project.documents.table.operators.Minus; |
||
52 | import com.iver.cit.gvsig.project.documents.table.operators.MoreEquals; |
||
53 | import com.iver.cit.gvsig.project.documents.table.operators.MoreThan; |
||
54 | import com.iver.cit.gvsig.project.documents.table.operators.Perimeter; |
||
55 | import com.iver.cit.gvsig.project.documents.table.operators.Pi; |
||
56 | import com.iver.cit.gvsig.project.documents.table.operators.Plus; |
||
57 | import com.iver.cit.gvsig.project.documents.table.operators.PointX; |
||
58 | import com.iver.cit.gvsig.project.documents.table.operators.PointY; |
||
59 | import com.iver.cit.gvsig.project.documents.table.operators.Pow; |
||
60 | import com.iver.cit.gvsig.project.documents.table.operators.Random; |
||
61 | import com.iver.cit.gvsig.project.documents.table.operators.Replace; |
||
62 | import com.iver.cit.gvsig.project.documents.table.operators.Round; |
||
63 | import com.iver.cit.gvsig.project.documents.table.operators.SetTimeDate; |
||
64 | import com.iver.cit.gvsig.project.documents.table.operators.Sin; |
||
65 | import com.iver.cit.gvsig.project.documents.table.operators.Sqrt; |
||
66 | import com.iver.cit.gvsig.project.documents.table.operators.StartsWith; |
||
67 | import com.iver.cit.gvsig.project.documents.table.operators.SubString; |
||
68 | import com.iver.cit.gvsig.project.documents.table.operators.Tan; |
||
69 | import com.iver.cit.gvsig.project.documents.table.operators.Times; |
||
70 | import com.iver.cit.gvsig.project.documents.table.operators.ToDate; |
||
71 | import com.iver.cit.gvsig.project.documents.table.operators.ToDegrees; |
||
72 | import com.iver.cit.gvsig.project.documents.table.operators.ToLowerCase; |
||
73 | import com.iver.cit.gvsig.project.documents.table.operators.ToNumber; |
||
74 | import com.iver.cit.gvsig.project.documents.table.operators.ToRadians; |
||
75 | import com.iver.cit.gvsig.project.documents.table.operators.ToString; |
||
76 | import com.iver.cit.gvsig.project.documents.table.operators.ToUpperCase; |
||
77 | import com.iver.cit.gvsig.project.documents.table.operators.Trim; |
||
78 | 27750 | vcaballero | import com.iver.utiles.extensionPoints.ExtensionPoint; |
79 | import com.iver.utiles.extensionPoints.ExtensionPoints; |
||
80 | import com.iver.utiles.extensionPoints.ExtensionPointsSingleton; |
||
81 | 13444 | caballero | import com.iver.utiles.swing.threads.AbstractMonitorableTask; |
82 | /**
|
||
83 | * @author Vicente Caballero Navarro
|
||
84 | */
|
||
85 | public class ExpressionFieldExtension extends Extension{ |
||
86 | //private static Interpreter interpreter=new Interpreter();
|
||
87 | public static final String JYTHON="jython"; |
||
88 | private static BSFManager interpreter=new BSFManager(); |
||
89 | 27750 | vcaballero | private Table table=null; |
90 | 16774 | vcaballero | private static ArrayList<IOperator> operators=new ArrayList<IOperator>(); |
91 | 13444 | caballero | public void initialize() { |
92 | registerOperations(); |
||
93 | 14822 | jmvivo | registerIcons(); |
94 | 13444 | caballero | } |
95 | |||
96 | public void execute(String actionCommand) { |
||
97 | com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
98 | 27750 | vcaballero | table=(Table)window; |
99 | 13444 | caballero | if (operators.isEmpty()) {
|
100 | 16774 | vcaballero | PluginServices.cancelableBackgroundExecution(new EvalOperatorsTask());
|
101 | 13444 | caballero | }else{
|
102 | EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
|
||
103 | PluginServices.getMDIManager().addWindow(eed); |
||
104 | } |
||
105 | } |
||
106 | public void postInitialize() { |
||
107 | 16774 | vcaballero | |
108 | 13444 | caballero | } |
109 | |||
110 | public boolean isEnabled() { |
||
111 | com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
112 | 27750 | vcaballero | if (window instanceof Table) { |
113 | Table table=(Table)window; |
||
114 | BitSet columnSelected = table.getSelectedFieldIndices();
|
||
115 | if (!columnSelected.isEmpty() && table.isEditing()) {
|
||
116 | 13444 | caballero | return true; |
117 | } |
||
118 | } |
||
119 | return false; |
||
120 | } |
||
121 | |||
122 | public boolean isVisible() { |
||
123 | com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
124 | 27750 | vcaballero | if (window instanceof Table) { |
125 | 13444 | caballero | return true; |
126 | } |
||
127 | return false; |
||
128 | } |
||
129 | 27750 | vcaballero | private void registerOperations() { |
130 | ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
||
131 | 13444 | caballero | |
132 | 27750 | vcaballero | extensionPoints.add("cad_editing_properties_pages","fieldExpression",FieldExpressionPage.class); |
133 | |||
134 | extensionPoints.add("ColumnOperators",Abs.class.toString(),Abs.class);
|
||
135 | extensionPoints.add("ColumnOperators",Acos.class.toString(),Acos.class);
|
||
136 | extensionPoints.add("ColumnOperators",After.class.toString(),After.class);
|
||
137 | extensionPoints.add("ColumnOperators",Area.class.toString(),Area.class); |
||
138 | extensionPoints.add("ColumnOperators",Asin.class.toString(),Asin.class);
|
||
139 | extensionPoints.add("ColumnOperators",Atan.class.toString(),Atan.class);
|
||
140 | extensionPoints.add("ColumnOperators",Acos.class.toString(),Acos.class);
|
||
141 | extensionPoints.add("ColumnOperators",Before.class.toString(),Before.class);
|
||
142 | extensionPoints.add("ColumnOperators",Ceil.class.toString(),Ceil.class);
|
||
143 | extensionPoints.add("ColumnOperators",Cos.class.toString(),Cos.class);
|
||
144 | extensionPoints.add("ColumnOperators",DateToString.class.toString(),DateToString.class);
|
||
145 | extensionPoints.add("ColumnOperators",Distinct.class.toString(),Distinct.class);
|
||
146 | extensionPoints.add("ColumnOperators",Division.class.toString(),Division.class);
|
||
147 | extensionPoints.add("ColumnOperators",E.class.toString(),E.class);
|
||
148 | extensionPoints.add("ColumnOperators",EndsWith.class.toString(),EndsWith.class);
|
||
149 | extensionPoints.add("ColumnOperators",Equal.class.toString(),Equal.class);
|
||
150 | extensionPoints.add("ColumnOperators",Equals.class.toString(),Equals.class);
|
||
151 | extensionPoints.add("ColumnOperators",Exp.class.toString(),Exp.class);
|
||
152 | extensionPoints.add("ColumnOperators",Floor.class.toString(),Floor.class);
|
||
153 | extensionPoints.add("ColumnOperators",Geometry.class.toString(),Geometry.class);
|
||
154 | extensionPoints.add("ColumnOperators",GetTimeDate.class.toString(),GetTimeDate.class);
|
||
155 | extensionPoints.add("ColumnOperators",IndexOf.class.toString(),IndexOf.class);
|
||
156 | extensionPoints.add("ColumnOperators",IsNumber.class.toString(),IsNumber.class);
|
||
157 | extensionPoints.add("ColumnOperators",LastIndexOf.class.toString(),LastIndexOf.class);
|
||
158 | extensionPoints.add("ColumnOperators",Length.class.toString(),Length.class);
|
||
159 | extensionPoints.add("ColumnOperators",LessEquals.class.toString(),LessEquals.class);
|
||
160 | extensionPoints.add("ColumnOperators",LessThan.class.toString(),LessThan.class);
|
||
161 | extensionPoints.add("ColumnOperators",Log.class.toString(),Log.class);
|
||
162 | extensionPoints.add("ColumnOperators",Max.class.toString(),Max.class);
|
||
163 | extensionPoints.add("ColumnOperators",Min.class.toString(),Min.class);
|
||
164 | extensionPoints.add("ColumnOperators",Minus.class.toString(),Minus.class);
|
||
165 | extensionPoints.add("ColumnOperators",MoreEquals.class.toString(),MoreEquals.class);
|
||
166 | extensionPoints.add("ColumnOperators",MoreThan.class.toString(),MoreThan.class);
|
||
167 | extensionPoints.add("ColumnOperators",Perimeter.class.toString(),Perimeter.class);
|
||
168 | extensionPoints.add("ColumnOperators",Pi.class.toString(),Pi.class);
|
||
169 | extensionPoints.add("ColumnOperators",Plus.class.toString(),Plus.class);
|
||
170 | extensionPoints.add("ColumnOperators",PointX.class.toString(),PointX.class);
|
||
171 | extensionPoints.add("ColumnOperators",PointY.class.toString(),PointY.class);
|
||
172 | extensionPoints.add("ColumnOperators",Pow.class.toString(),Pow.class);
|
||
173 | extensionPoints.add("ColumnOperators",Random.class.toString(),Random.class); |
||
174 | extensionPoints.add("ColumnOperators",Replace.class.toString(),Replace.class);
|
||
175 | extensionPoints.add("ColumnOperators",Round.class.toString(),Round.class);
|
||
176 | extensionPoints.add("ColumnOperators",SetTimeDate.class.toString(),SetTimeDate.class);
|
||
177 | extensionPoints.add("ColumnOperators",Sin.class.toString(),Sin.class);
|
||
178 | extensionPoints.add("ColumnOperators",Sqrt.class.toString(),Sqrt.class);
|
||
179 | extensionPoints.add("ColumnOperators",StartsWith.class.toString(),StartsWith.class);
|
||
180 | extensionPoints.add("ColumnOperators",SubString.class.toString(),SubString.class);
|
||
181 | extensionPoints.add("ColumnOperators",Tan.class.toString(),Tan.class);
|
||
182 | extensionPoints.add("ColumnOperators",Times.class.toString(),Times.class);
|
||
183 | extensionPoints.add("ColumnOperators",ToDate.class.toString(),ToDate.class);
|
||
184 | extensionPoints.add("ColumnOperators",ToDegrees.class.toString(),ToDegrees.class);
|
||
185 | extensionPoints.add("ColumnOperators",ToLowerCase.class.toString(),ToLowerCase.class);
|
||
186 | extensionPoints.add("ColumnOperators",ToNumber.class.toString(),ToNumber.class);
|
||
187 | extensionPoints.add("ColumnOperators",ToRadians.class.toString(),ToRadians.class);
|
||
188 | extensionPoints.add("ColumnOperators",ToString.class.toString(),ToString.class);
|
||
189 | extensionPoints.add("ColumnOperators",ToUpperCase.class.toString(),ToUpperCase.class);
|
||
190 | extensionPoints.add("ColumnOperators",Trim.class.toString(),Trim.class);
|
||
191 | } |
||
192 | |||
193 | 14822 | jmvivo | private void registerIcons(){ |
194 | 15644 | jmvivo | PluginServices.getIconTheme().registerDefault( |
195 | 14822 | jmvivo | "ext-kcalc",
|
196 | this.getClass().getClassLoader().getResource("images/kcalc.png") |
||
197 | ); |
||
198 | 16774 | vcaballero | |
199 | 15644 | jmvivo | PluginServices.getIconTheme().registerDefault( |
200 | 14822 | jmvivo | "field-expression-kcalc",
|
201 | this.getClass().getClassLoader().getResource("images/FieldExpression.png") |
||
202 | ); |
||
203 | } |
||
204 | 16774 | vcaballero | |
205 | 13444 | caballero | private class EvalOperatorsTask extends AbstractMonitorableTask{ |
206 | private ExtensionPoint extensionPoint;
|
||
207 | public EvalOperatorsTask(){
|
||
208 | setInitialStep(0);
|
||
209 | setDeterminatedProcess(true);
|
||
210 | setStatusMessage(PluginServices.getText(this, "charging_operators")+"..."); |
||
211 | 27750 | vcaballero | ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
212 | extensionPoint =(ExtensionPoint)extensionPoints.get("ColumnOperators");
|
||
213 | setFinalStep(extensionPoint.size()+1);
|
||
214 | 13444 | caballero | } |
215 | public void run() throws Exception { |
||
216 | 16774 | vcaballero | NotificationManager.addInfo(PluginServices.getText(this,"charging_operators")); |
217 | long t1=System.currentTimeMillis(); |
||
218 | 27750 | vcaballero | Iterator iterator = extensionPoint.keySet().iterator();
|
219 | 13444 | caballero | while (iterator.hasNext()) {
|
220 | try {
|
||
221 | 16774 | vcaballero | if (isCanceled())
|
222 | return;
|
||
223 | 27750 | vcaballero | IOperator operator = (IOperator)extensionPoint.create((String)iterator.next());
|
224 | 13444 | caballero | |
225 | operator.eval(interpreter); |
||
226 | operators.add(operator); |
||
227 | reportStep(); |
||
228 | setNote(operator.getClass().getName()); |
||
229 | } catch (InstantiationException e) { |
||
230 | e.printStackTrace(); |
||
231 | } catch (IllegalAccessException e) { |
||
232 | e.printStackTrace(); |
||
233 | } catch (ClassCastException e) { |
||
234 | e.printStackTrace(); |
||
235 | } |
||
236 | } |
||
237 | long t2=System.currentTimeMillis(); |
||
238 | System.out.println("Tiempo en evaluar y crear del extension point = "+(t2-t1) ); |
||
239 | long t3=System.currentTimeMillis(); |
||
240 | System.out.println("Tiempo en a?adir los operadores correctos = "+(t3-t2) ); |
||
241 | reportStep(); |
||
242 | } |
||
243 | public void finished() { |
||
244 | 16774 | vcaballero | if (isCanceled())
|
245 | return;
|
||
246 | NotificationManager.addInfo(PluginServices.getText(this,"charged_operators")); |
||
247 | 13444 | caballero | EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
|
248 | PluginServices.getMDIManager().addWindow(eed); |
||
249 | } |
||
250 | |||
251 | 16774 | vcaballero | } |
252 | 13444 | caballero | } |