root / branches / v2_0_0_prep / extensions / extExpressionField / src / org / gvsig / expressionfield / ExpressionFieldExtension.java @ 38564
History | View | Annotate | Download (13.7 KB)
1 |
package org.gvsig.expressionfield; |
---|---|
2 |
|
3 |
import java.awt.Component; |
4 |
import java.util.ArrayList; |
5 |
import java.util.Iterator; |
6 |
|
7 |
import javax.swing.JOptionPane; |
8 |
|
9 |
import org.apache.bsf.BSFManager; |
10 |
import org.gvsig.andami.IconThemeHelper; |
11 |
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 |
import org.gvsig.fmap.dal.exception.DataException; |
75 |
import org.gvsig.tools.ToolsLocator; |
76 |
import org.gvsig.tools.extensionpoint.ExtensionPoint; |
77 |
import org.gvsig.utils.swing.threads.AbstractMonitorableTask; |
78 |
import org.slf4j.Logger; |
79 |
import org.slf4j.LoggerFactory; |
80 |
|
81 |
/**
|
82 |
* @author Vicente Caballero Navarro
|
83 |
*/
|
84 |
public class ExpressionFieldExtension extends Extension{ |
85 |
|
86 |
private static Logger logger = LoggerFactory.getLogger(ExpressionFieldExtension.class); |
87 |
|
88 |
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 |
|
93 |
public void initialize() { |
94 |
registerOperations(); |
95 |
registerIcons(); |
96 |
} |
97 |
|
98 |
public void execute(String actionCommand) { |
99 |
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 |
} |
108 |
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 |
} |
115 |
} |
116 |
public void postInitialize() { |
117 |
|
118 |
} |
119 |
|
120 |
public boolean isEnabled() { |
121 |
org.gvsig.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
122 |
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 |
logger.error("Can't get selected column in table.",e);
|
129 |
} |
130 |
if (columnSelected > 0 && table.getModel().getStore().isEditing()) { |
131 |
return true; |
132 |
} |
133 |
} |
134 |
return false; |
135 |
} |
136 |
|
137 |
public boolean isVisible() { |
138 |
org.gvsig.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow(); |
139 |
if (window instanceof FeatureTableDocumentPanel) { |
140 |
return true; |
141 |
} |
142 |
return false; |
143 |
} |
144 |
private void registerOperations() { |
145 |
ExtensionPoint extensionPoints = ToolsLocator.getExtensionPointManager().add( |
146 |
"cad_editing_properties_pages", ""); |
147 |
extensionPoints.append("fieldExpression", "",new FieldExpressionPage()); |
148 |
|
149 |
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 |
IconThemeHelper.registerIcon("action", "table-expression-field", this); |
212 |
IconThemeHelper.registerIcon("action", "expression-field-preferences", this); |
213 |
} |
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 |
} |