Statistics
| Revision:

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
}