svn-gvsig-desktop / trunk / extensions / extExpressionField / src / com / iver / cit / gvsig / ExpressionFieldExtension.java @ 24544
History | View | Annotate | Download (13.5 KB)
1 |
package com.iver.cit.gvsig; |
---|---|
2 |
|
3 |
import java.util.ArrayList; |
4 |
import java.util.BitSet; |
5 |
import java.util.Iterator; |
6 |
|
7 |
import org.apache.bsf.BSFException; |
8 |
import org.apache.bsf.BSFManager; |
9 |
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 |
|
15 |
import com.iver.andami.PluginServices; |
16 |
import com.iver.andami.messages.NotificationManager; |
17 |
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 |
import com.iver.cit.gvsig.project.documents.table.gui.Table; |
22 |
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 |
import com.iver.cit.gvsig.project.documents.table.operators.DateToString; |
32 |
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 |
import com.iver.cit.gvsig.project.documents.table.operators.Floor; |
40 |
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 |
import com.iver.utiles.extensionPoints.ExtensionPoint; |
79 |
import com.iver.utiles.extensionPoints.ExtensionPoints; |
80 |
import com.iver.utiles.extensionPoints.ExtensionPointsSingleton; |
81 |
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 |
private Table table=null; |
90 |
private static ArrayList<IOperator> operators=new ArrayList<IOperator>(); |
91 |
public void initialize() { |
92 |
registerOperations(); |
93 |
registerIcons(); |
94 |
} |
95 |
|
96 |
public void execute(String actionCommand) { |
97 |
com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
98 |
table=(Table)window; |
99 |
if (operators.isEmpty()) {
|
100 |
PluginServices.cancelableBackgroundExecution(new EvalOperatorsTask());
|
101 |
}else{
|
102 |
EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
|
103 |
PluginServices.getMDIManager().addWindow(eed); |
104 |
} |
105 |
} |
106 |
public void postInitialize() { |
107 |
|
108 |
} |
109 |
|
110 |
public boolean isEnabled() { |
111 |
com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
112 |
if (window instanceof Table) { |
113 |
Table table=(Table)window; |
114 |
BitSet columnSelected = table.getSelectedFieldIndices();
|
115 |
if (!columnSelected.isEmpty() && table.isEditing()) {
|
116 |
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 |
if (window instanceof Table) { |
125 |
return true; |
126 |
} |
127 |
return false; |
128 |
} |
129 |
private void registerOperations() { |
130 |
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
131 |
|
132 |
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 |
private void registerIcons(){ |
194 |
PluginServices.getIconTheme().registerDefault( |
195 |
"ext-kcalc",
|
196 |
this.getClass().getClassLoader().getResource("images/kcalc.png") |
197 |
); |
198 |
|
199 |
PluginServices.getIconTheme().registerDefault( |
200 |
"field-expression-kcalc",
|
201 |
this.getClass().getClassLoader().getResource("images/FieldExpression.png") |
202 |
); |
203 |
} |
204 |
|
205 |
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 |
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); |
212 |
extensionPoint =(ExtensionPoint)extensionPoints.get("ColumnOperators");
|
213 |
setFinalStep(extensionPoint.size()+1);
|
214 |
} |
215 |
public void run() throws Exception { |
216 |
NotificationManager.addInfo(PluginServices.getText(this,"charging_operators")); |
217 |
long t1=System.currentTimeMillis(); |
218 |
Iterator iterator = extensionPoint.keySet().iterator();
|
219 |
while (iterator.hasNext()) {
|
220 |
try {
|
221 |
if (isCanceled())
|
222 |
return;
|
223 |
IOperator operator = (IOperator)extensionPoint.create((String)iterator.next());
|
224 |
|
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 |
if (isCanceled())
|
245 |
return;
|
246 |
NotificationManager.addInfo(PluginServices.getText(this,"charged_operators")); |
247 |
EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
|
248 |
PluginServices.getMDIManager().addWindow(eed); |
249 |
} |
250 |
|
251 |
} |
252 |
} |