svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extExpressionField / src / com / iver / cit / gvsig / ExpressionFieldExtension.java @ 27752
History | View | Annotate | Download (12.8 KB)
1 | 27752 | vcaballero | package com.iver.cit.gvsig; |
---|---|---|---|
2 | |||
3 | import java.util.ArrayList; |
||
4 | import java.util.Iterator; |
||
5 | |||
6 | import org.apache.bsf.BSFManager; |
||
7 | import org.gvsig.fmap.dal.exception.DataException; |
||
8 | import org.gvsig.project.document.table.gui.FeatureTableDocumentPanel; |
||
9 | import org.gvsig.tools.ToolsLocator; |
||
10 | import org.gvsig.tools.extensionpoint.ExtensionPoint; |
||
11 | |||
12 | import com.iver.andami.PluginServices; |
||
13 | import com.iver.andami.messages.NotificationManager; |
||
14 | import com.iver.andami.plugins.Extension; |
||
15 | import com.iver.cit.gvsig.gui.FieldExpressionPage; |
||
16 | import com.iver.cit.gvsig.project.documents.table.IOperator; |
||
17 | import com.iver.cit.gvsig.project.documents.table.gui.EvalExpressionDialog; |
||
18 | import com.iver.cit.gvsig.project.documents.table.operators.Abs; |
||
19 | import com.iver.cit.gvsig.project.documents.table.operators.Acos; |
||
20 | import com.iver.cit.gvsig.project.documents.table.operators.After; |
||
21 | import com.iver.cit.gvsig.project.documents.table.operators.Area; |
||
22 | import com.iver.cit.gvsig.project.documents.table.operators.Asin; |
||
23 | import com.iver.cit.gvsig.project.documents.table.operators.Atan; |
||
24 | import com.iver.cit.gvsig.project.documents.table.operators.Before; |
||
25 | import com.iver.cit.gvsig.project.documents.table.operators.Ceil; |
||
26 | import com.iver.cit.gvsig.project.documents.table.operators.Cos; |
||
27 | import com.iver.cit.gvsig.project.documents.table.operators.DateToString; |
||
28 | import com.iver.cit.gvsig.project.documents.table.operators.Distinct; |
||
29 | import com.iver.cit.gvsig.project.documents.table.operators.Division; |
||
30 | import com.iver.cit.gvsig.project.documents.table.operators.E; |
||
31 | import com.iver.cit.gvsig.project.documents.table.operators.EndsWith; |
||
32 | import com.iver.cit.gvsig.project.documents.table.operators.Equal; |
||
33 | import com.iver.cit.gvsig.project.documents.table.operators.Equals; |
||
34 | import com.iver.cit.gvsig.project.documents.table.operators.Exp; |
||
35 | import com.iver.cit.gvsig.project.documents.table.operators.Floor; |
||
36 | import com.iver.cit.gvsig.project.documents.table.operators.Geometry; |
||
37 | import com.iver.cit.gvsig.project.documents.table.operators.GetTimeDate; |
||
38 | import com.iver.cit.gvsig.project.documents.table.operators.IndexOf; |
||
39 | import com.iver.cit.gvsig.project.documents.table.operators.IsNumber; |
||
40 | import com.iver.cit.gvsig.project.documents.table.operators.LastIndexOf; |
||
41 | import com.iver.cit.gvsig.project.documents.table.operators.Length; |
||
42 | import com.iver.cit.gvsig.project.documents.table.operators.LessEquals; |
||
43 | import com.iver.cit.gvsig.project.documents.table.operators.LessThan; |
||
44 | import com.iver.cit.gvsig.project.documents.table.operators.Log; |
||
45 | import com.iver.cit.gvsig.project.documents.table.operators.Max; |
||
46 | import com.iver.cit.gvsig.project.documents.table.operators.Min; |
||
47 | import com.iver.cit.gvsig.project.documents.table.operators.Minus; |
||
48 | import com.iver.cit.gvsig.project.documents.table.operators.MoreEquals; |
||
49 | import com.iver.cit.gvsig.project.documents.table.operators.MoreThan; |
||
50 | import com.iver.cit.gvsig.project.documents.table.operators.Perimeter; |
||
51 | import com.iver.cit.gvsig.project.documents.table.operators.Pi; |
||
52 | import com.iver.cit.gvsig.project.documents.table.operators.Plus; |
||
53 | import com.iver.cit.gvsig.project.documents.table.operators.PointX; |
||
54 | import com.iver.cit.gvsig.project.documents.table.operators.PointY; |
||
55 | import com.iver.cit.gvsig.project.documents.table.operators.Pow; |
||
56 | import com.iver.cit.gvsig.project.documents.table.operators.Random; |
||
57 | import com.iver.cit.gvsig.project.documents.table.operators.Replace; |
||
58 | import com.iver.cit.gvsig.project.documents.table.operators.Round; |
||
59 | import com.iver.cit.gvsig.project.documents.table.operators.SetTimeDate; |
||
60 | import com.iver.cit.gvsig.project.documents.table.operators.Sin; |
||
61 | import com.iver.cit.gvsig.project.documents.table.operators.Sqrt; |
||
62 | import com.iver.cit.gvsig.project.documents.table.operators.StartsWith; |
||
63 | import com.iver.cit.gvsig.project.documents.table.operators.SubString; |
||
64 | import com.iver.cit.gvsig.project.documents.table.operators.Tan; |
||
65 | import com.iver.cit.gvsig.project.documents.table.operators.Times; |
||
66 | import com.iver.cit.gvsig.project.documents.table.operators.ToDate; |
||
67 | import com.iver.cit.gvsig.project.documents.table.operators.ToDegrees; |
||
68 | import com.iver.cit.gvsig.project.documents.table.operators.ToLowerCase; |
||
69 | import com.iver.cit.gvsig.project.documents.table.operators.ToNumber; |
||
70 | import com.iver.cit.gvsig.project.documents.table.operators.ToRadians; |
||
71 | import com.iver.cit.gvsig.project.documents.table.operators.ToString; |
||
72 | import com.iver.cit.gvsig.project.documents.table.operators.ToUpperCase; |
||
73 | import com.iver.cit.gvsig.project.documents.table.operators.Trim; |
||
74 | import com.iver.utiles.swing.threads.AbstractMonitorableTask; |
||
75 | /**
|
||
76 | * @author Vicente Caballero Navarro
|
||
77 | */
|
||
78 | public class ExpressionFieldExtension extends Extension{ |
||
79 | //private static Interpreter interpreter=new Interpreter();
|
||
80 | public static final String JYTHON="jython"; |
||
81 | private static BSFManager interpreter=new BSFManager(); |
||
82 | private FeatureTableDocumentPanel table=null; |
||
83 | private static ArrayList<IOperator> operators=new ArrayList<IOperator>(); |
||
84 | public void initialize() { |
||
85 | registerOperations(); |
||
86 | registerIcons(); |
||
87 | } |
||
88 | |||
89 | public void execute(String actionCommand) { |
||
90 | com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
91 | table=(FeatureTableDocumentPanel)window; |
||
92 | if (operators.isEmpty()) {
|
||
93 | PluginServices.cancelableBackgroundExecution(new EvalOperatorsTask());
|
||
94 | }else{
|
||
95 | EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
|
||
96 | PluginServices.getMDIManager().addWindow(eed); |
||
97 | } |
||
98 | } |
||
99 | public void postInitialize() { |
||
100 | |||
101 | } |
||
102 | |||
103 | public boolean isEnabled() { |
||
104 | com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
105 | if (window instanceof FeatureTableDocumentPanel) { |
||
106 | FeatureTableDocumentPanel table=(FeatureTableDocumentPanel)window; |
||
107 | int columnSelected = 0; |
||
108 | try {
|
||
109 | columnSelected = table.getTablePanel().getTable().getSelectedColumnCount(); |
||
110 | } catch (DataException e) {
|
||
111 | e.printStackTrace(); |
||
112 | } |
||
113 | if (!(columnSelected == 0) && table.getModel().getStore().isEditing()) { |
||
114 | return true; |
||
115 | } |
||
116 | } |
||
117 | return false; |
||
118 | } |
||
119 | |||
120 | public boolean isVisible() { |
||
121 | com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
||
122 | if (window instanceof FeatureTableDocumentPanel) { |
||
123 | return true; |
||
124 | } |
||
125 | return false; |
||
126 | } |
||
127 | private void registerOperations() { |
||
128 | ExtensionPoint extensionPoints = ToolsLocator.getExtensionPointManager().add( |
||
129 | "fieldExpression", ""); |
||
130 | extensionPoints.append("fieldExpression", "",new FieldExpressionPage()); |
||
131 | extensionPoints = ToolsLocator.getExtensionPointManager().add( |
||
132 | "ColumnOperators", ""); |
||
133 | extensionPoints.append(Abs.class.toString(),"",Abs.class);
|
||
134 | extensionPoints.append(Acos.class.toString(),"",Acos.class);
|
||
135 | extensionPoints.append(After.class.toString(),"",After.class);
|
||
136 | extensionPoints.append(Area.class.toString(),"",Area.class); |
||
137 | extensionPoints.append(Asin.class.toString(),"",Asin.class);
|
||
138 | extensionPoints.append(Atan.class.toString(),"",Atan.class);
|
||
139 | extensionPoints.append(Acos.class.toString(),"",Acos.class);
|
||
140 | extensionPoints.append(Before.class.toString(),"",Before.class);
|
||
141 | extensionPoints.append(Ceil.class.toString(),"",Ceil.class);
|
||
142 | extensionPoints.append(Cos.class.toString(),"",Cos.class);
|
||
143 | extensionPoints.append(DateToString.class.toString(),"",DateToString.class);
|
||
144 | extensionPoints.append(Distinct.class.toString(),"",Distinct.class);
|
||
145 | extensionPoints.append(Division.class.toString(),"",Division.class);
|
||
146 | extensionPoints.append(E.class.toString(),"",E.class);
|
||
147 | extensionPoints.append(EndsWith.class.toString(),"",EndsWith.class);
|
||
148 | extensionPoints.append(Equal.class.toString(),"",Equal.class);
|
||
149 | extensionPoints.append(Equals.class.toString(),"",Equals.class);
|
||
150 | extensionPoints.append(Exp.class.toString(),"",Exp.class);
|
||
151 | extensionPoints.append(Floor.class.toString(),"",Floor.class);
|
||
152 | extensionPoints.append(Geometry.class.toString(),"",Geometry.class);
|
||
153 | extensionPoints.append(GetTimeDate.class.toString(),"",GetTimeDate.class);
|
||
154 | extensionPoints.append(IndexOf.class.toString(),"",IndexOf.class);
|
||
155 | extensionPoints.append(IsNumber.class.toString(),"",IsNumber.class);
|
||
156 | extensionPoints.append(LastIndexOf.class.toString(),"",LastIndexOf.class);
|
||
157 | extensionPoints.append(Length.class.toString(),"",Length.class);
|
||
158 | extensionPoints.append(LessEquals.class.toString(),"",LessEquals.class);
|
||
159 | extensionPoints.append(LessThan.class.toString(),"",LessThan.class);
|
||
160 | extensionPoints.append(Log.class.toString(),"",Log.class);
|
||
161 | extensionPoints.append(Max.class.toString(),"",Max.class);
|
||
162 | extensionPoints.append(Min.class.toString(),"",Min.class);
|
||
163 | extensionPoints.append(Minus.class.toString(),"",Minus.class);
|
||
164 | extensionPoints.append(MoreEquals.class.toString(),"",MoreEquals.class);
|
||
165 | extensionPoints.append(MoreThan.class.toString(),"",MoreThan.class);
|
||
166 | extensionPoints.append(Perimeter.class.toString(),"",Perimeter.class);
|
||
167 | extensionPoints.append(Pi.class.toString(),"",Pi.class);
|
||
168 | extensionPoints.append(Plus.class.toString(),"",Plus.class);
|
||
169 | extensionPoints.append(PointX.class.toString(),"",PointX.class);
|
||
170 | extensionPoints.append(PointY.class.toString(),"",PointY.class);
|
||
171 | extensionPoints.append(Pow.class.toString(),"",Pow.class);
|
||
172 | extensionPoints.append(Random.class.toString(),"",Random.class); |
||
173 | extensionPoints.append(Replace.class.toString(),"",Replace.class);
|
||
174 | extensionPoints.append(Round.class.toString(),"",Round.class);
|
||
175 | extensionPoints.append(SetTimeDate.class.toString(),"",SetTimeDate.class);
|
||
176 | extensionPoints.append(Sin.class.toString(),"",Sin.class);
|
||
177 | extensionPoints.append(Sqrt.class.toString(),"",Sqrt.class);
|
||
178 | extensionPoints.append(StartsWith.class.toString(),"",StartsWith.class);
|
||
179 | extensionPoints.append(SubString.class.toString(),"",SubString.class);
|
||
180 | extensionPoints.append(Tan.class.toString(),"",Tan.class);
|
||
181 | extensionPoints.append(Times.class.toString(),"",Times.class);
|
||
182 | extensionPoints.append(ToDate.class.toString(),"",ToDate.class);
|
||
183 | extensionPoints.append(ToDegrees.class.toString(),"",ToDegrees.class);
|
||
184 | extensionPoints.append(ToLowerCase.class.toString(),"",ToLowerCase.class);
|
||
185 | extensionPoints.append(ToNumber.class.toString(),"",ToNumber.class);
|
||
186 | extensionPoints.append(ToRadians.class.toString(),"",ToRadians.class);
|
||
187 | extensionPoints.append(ToString.class.toString(),"",ToString.class);
|
||
188 | extensionPoints.append(ToUpperCase.class.toString(),"",ToUpperCase.class);
|
||
189 | extensionPoints.append(Trim.class.toString(),"",Trim.class);
|
||
190 | } |
||
191 | |||
192 | private void registerIcons(){ |
||
193 | PluginServices.getIconTheme().registerDefault( |
||
194 | "ext-kcalc",
|
||
195 | this.getClass().getClassLoader().getResource("images/kcalc.png") |
||
196 | ); |
||
197 | |||
198 | PluginServices.getIconTheme().registerDefault( |
||
199 | "field-expression-kcalc",
|
||
200 | this.getClass().getClassLoader().getResource("images/FieldExpression.png") |
||
201 | ); |
||
202 | } |
||
203 | |||
204 | private class EvalOperatorsTask extends AbstractMonitorableTask{ |
||
205 | private ExtensionPoint extensionPoint;
|
||
206 | public EvalOperatorsTask(){
|
||
207 | setInitialStep(0);
|
||
208 | setDeterminatedProcess(true);
|
||
209 | setStatusMessage(PluginServices.getText(this, "charging_operators")+"..."); |
||
210 | this.extensionPoint = ToolsLocator.getExtensionPointManager().get(
|
||
211 | "ColumnOperators");
|
||
212 | setFinalStep(extensionPoint.getCount()+1);
|
||
213 | } |
||
214 | public void run() throws Exception { |
||
215 | NotificationManager.addInfo(PluginServices.getText(this,"charging_operators")); |
||
216 | long t1=System.currentTimeMillis(); |
||
217 | Iterator iterator = extensionPoint.iterator();
|
||
218 | while (iterator.hasNext()) {
|
||
219 | try {
|
||
220 | if (isCanceled())
|
||
221 | return;
|
||
222 | org.gvsig.tools.extensionpoint.ExtensionPoint.Extension obj= (org.gvsig.tools.extensionpoint.ExtensionPoint.Extension)iterator.next(); |
||
223 | IOperator operator = (IOperator)extensionPoint.create(obj.getName()); |
||
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 | } |