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