svn-gvsig-desktop / trunk / extensions / extExpressionField / src / com / iver / cit / gvsig / ExpressionFieldExtension.java @ 27739
History | View | Annotate | Download (12.6 KB)
1 |
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 |
} |