Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extExpressionField / src / com / iver / cit / gvsig / ExpressionFieldExtension.java @ 24545

History | View | Annotate | Download (13.5 KB)

1
package com.iver.cit.gvsig;
2

    
3
import java.util.ArrayList;
4
import java.util.BitSet;
5
import java.util.Iterator;
6

    
7
import org.apache.bsf.BSFException;
8
import org.apache.bsf.BSFManager;
9
import org.gvsig.gui.beans.incrementabletask.IIncrementable;
10
import org.gvsig.gui.beans.incrementabletask.IncrementableEvent;
11
import org.gvsig.gui.beans.incrementabletask.IncrementableListener;
12
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
13
import org.gvsig.gui.beans.progresspanel.LogControl;
14

    
15
import com.iver.andami.PluginServices;
16
import com.iver.andami.messages.NotificationManager;
17
import com.iver.andami.plugins.Extension;
18
import com.iver.cit.gvsig.gui.FieldExpressionPage;
19
import com.iver.cit.gvsig.project.documents.table.IOperator;
20
import com.iver.cit.gvsig.project.documents.table.gui.EvalExpressionDialog;
21
import com.iver.cit.gvsig.project.documents.table.gui.Table;
22
import com.iver.cit.gvsig.project.documents.table.operators.Abs;
23
import com.iver.cit.gvsig.project.documents.table.operators.Acos;
24
import com.iver.cit.gvsig.project.documents.table.operators.After;
25
import com.iver.cit.gvsig.project.documents.table.operators.Area;
26
import com.iver.cit.gvsig.project.documents.table.operators.Asin;
27
import com.iver.cit.gvsig.project.documents.table.operators.Atan;
28
import com.iver.cit.gvsig.project.documents.table.operators.Before;
29
import com.iver.cit.gvsig.project.documents.table.operators.Ceil;
30
import com.iver.cit.gvsig.project.documents.table.operators.Cos;
31
import com.iver.cit.gvsig.project.documents.table.operators.DateToString;
32
import com.iver.cit.gvsig.project.documents.table.operators.Distinct;
33
import com.iver.cit.gvsig.project.documents.table.operators.Division;
34
import com.iver.cit.gvsig.project.documents.table.operators.E;
35
import com.iver.cit.gvsig.project.documents.table.operators.EndsWith;
36
import com.iver.cit.gvsig.project.documents.table.operators.Equal;
37
import com.iver.cit.gvsig.project.documents.table.operators.Equals;
38
import com.iver.cit.gvsig.project.documents.table.operators.Exp;
39
import com.iver.cit.gvsig.project.documents.table.operators.Floor;
40
import com.iver.cit.gvsig.project.documents.table.operators.Geometry;
41
import com.iver.cit.gvsig.project.documents.table.operators.GetTimeDate;
42
import com.iver.cit.gvsig.project.documents.table.operators.IndexOf;
43
import com.iver.cit.gvsig.project.documents.table.operators.IsNumber;
44
import com.iver.cit.gvsig.project.documents.table.operators.LastIndexOf;
45
import com.iver.cit.gvsig.project.documents.table.operators.Length;
46
import com.iver.cit.gvsig.project.documents.table.operators.LessEquals;
47
import com.iver.cit.gvsig.project.documents.table.operators.LessThan;
48
import com.iver.cit.gvsig.project.documents.table.operators.Log;
49
import com.iver.cit.gvsig.project.documents.table.operators.Max;
50
import com.iver.cit.gvsig.project.documents.table.operators.Min;
51
import com.iver.cit.gvsig.project.documents.table.operators.Minus;
52
import com.iver.cit.gvsig.project.documents.table.operators.MoreEquals;
53
import com.iver.cit.gvsig.project.documents.table.operators.MoreThan;
54
import com.iver.cit.gvsig.project.documents.table.operators.Perimeter;
55
import com.iver.cit.gvsig.project.documents.table.operators.Pi;
56
import com.iver.cit.gvsig.project.documents.table.operators.Plus;
57
import com.iver.cit.gvsig.project.documents.table.operators.PointX;
58
import com.iver.cit.gvsig.project.documents.table.operators.PointY;
59
import com.iver.cit.gvsig.project.documents.table.operators.Pow;
60
import com.iver.cit.gvsig.project.documents.table.operators.Random;
61
import com.iver.cit.gvsig.project.documents.table.operators.Replace;
62
import com.iver.cit.gvsig.project.documents.table.operators.Round;
63
import com.iver.cit.gvsig.project.documents.table.operators.SetTimeDate;
64
import com.iver.cit.gvsig.project.documents.table.operators.Sin;
65
import com.iver.cit.gvsig.project.documents.table.operators.Sqrt;
66
import com.iver.cit.gvsig.project.documents.table.operators.StartsWith;
67
import com.iver.cit.gvsig.project.documents.table.operators.SubString;
68
import com.iver.cit.gvsig.project.documents.table.operators.Tan;
69
import com.iver.cit.gvsig.project.documents.table.operators.Times;
70
import com.iver.cit.gvsig.project.documents.table.operators.ToDate;
71
import com.iver.cit.gvsig.project.documents.table.operators.ToDegrees;
72
import com.iver.cit.gvsig.project.documents.table.operators.ToLowerCase;
73
import com.iver.cit.gvsig.project.documents.table.operators.ToNumber;
74
import com.iver.cit.gvsig.project.documents.table.operators.ToRadians;
75
import com.iver.cit.gvsig.project.documents.table.operators.ToString;
76
import com.iver.cit.gvsig.project.documents.table.operators.ToUpperCase;
77
import com.iver.cit.gvsig.project.documents.table.operators.Trim;
78
import com.iver.utiles.extensionPoints.ExtensionPoint;
79
import com.iver.utiles.extensionPoints.ExtensionPoints;
80
import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
81
import com.iver.utiles.swing.threads.AbstractMonitorableTask;
82
/**
83
 * @author Vicente Caballero Navarro
84
 */
85
public class ExpressionFieldExtension extends Extension{
86
        //private static Interpreter interpreter=new Interpreter();
87
        public static final String JYTHON="jython";
88
        private static BSFManager interpreter=new BSFManager();
89
        private Table table=null;
90
        private static ArrayList<IOperator> operators=new ArrayList<IOperator>();
91
        public void initialize() {
92
                registerOperations();
93
                registerIcons();
94
        }
95

    
96
        public void execute(String actionCommand) {
97
                com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow();
98
                table=(Table)window;
99
                if (operators.isEmpty()) {
100
                        PluginServices.cancelableBackgroundExecution(new EvalOperatorsTask());
101
        }else{
102
                 EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
103
                     PluginServices.getMDIManager().addWindow(eed);
104
        }
105
        }
106
        public void postInitialize() {
107

    
108
        }
109

    
110
        public boolean isEnabled() {
111
                com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow();
112
                if (window instanceof Table) {
113
                        Table table=(Table)window;
114
                        BitSet columnSelected = table.getSelectedFieldIndices();
115
                    if (!columnSelected.isEmpty() && table.isEditing()) {
116
                            return true;
117
                    }
118
                }
119
                return false;
120
        }
121

    
122
        public boolean isVisible() {
123
                com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow();
124
                if (window instanceof Table) {
125
                        return true;
126
                }
127
                return false;
128
        }
129
         private void registerOperations() {
130
                    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
131

    
132
                    extensionPoints.add("cad_editing_properties_pages","fieldExpression",FieldExpressionPage.class);
133

    
134
                    extensionPoints.add("ColumnOperators",Abs.class.toString(),Abs.class);
135
                extensionPoints.add("ColumnOperators",Acos.class.toString(),Acos.class);
136
                extensionPoints.add("ColumnOperators",After.class.toString(),After.class);
137
                extensionPoints.add("ColumnOperators",Area.class.toString(),Area.class);
138
                extensionPoints.add("ColumnOperators",Asin.class.toString(),Asin.class);
139
                extensionPoints.add("ColumnOperators",Atan.class.toString(),Atan.class);
140
                extensionPoints.add("ColumnOperators",Acos.class.toString(),Acos.class);
141
                extensionPoints.add("ColumnOperators",Before.class.toString(),Before.class);
142
                extensionPoints.add("ColumnOperators",Ceil.class.toString(),Ceil.class);
143
                extensionPoints.add("ColumnOperators",Cos.class.toString(),Cos.class);
144
                    extensionPoints.add("ColumnOperators",DateToString.class.toString(),DateToString.class);
145
                    extensionPoints.add("ColumnOperators",Distinct.class.toString(),Distinct.class);
146
                     extensionPoints.add("ColumnOperators",Division.class.toString(),Division.class);
147
                     extensionPoints.add("ColumnOperators",E.class.toString(),E.class);
148
                     extensionPoints.add("ColumnOperators",EndsWith.class.toString(),EndsWith.class);
149
                     extensionPoints.add("ColumnOperators",Equal.class.toString(),Equal.class);
150
                     extensionPoints.add("ColumnOperators",Equals.class.toString(),Equals.class);
151
                     extensionPoints.add("ColumnOperators",Exp.class.toString(),Exp.class);
152
                extensionPoints.add("ColumnOperators",Floor.class.toString(),Floor.class);
153
                     extensionPoints.add("ColumnOperators",Geometry.class.toString(),Geometry.class);
154
                     extensionPoints.add("ColumnOperators",GetTimeDate.class.toString(),GetTimeDate.class);
155
                     extensionPoints.add("ColumnOperators",IndexOf.class.toString(),IndexOf.class);
156
                     extensionPoints.add("ColumnOperators",IsNumber.class.toString(),IsNumber.class);
157
                     extensionPoints.add("ColumnOperators",LastIndexOf.class.toString(),LastIndexOf.class);
158
                     extensionPoints.add("ColumnOperators",Length.class.toString(),Length.class);
159
                     extensionPoints.add("ColumnOperators",LessEquals.class.toString(),LessEquals.class);
160
                     extensionPoints.add("ColumnOperators",LessThan.class.toString(),LessThan.class);
161
                     extensionPoints.add("ColumnOperators",Log.class.toString(),Log.class);
162
                     extensionPoints.add("ColumnOperators",Max.class.toString(),Max.class);
163
                     extensionPoints.add("ColumnOperators",Min.class.toString(),Min.class);
164
                     extensionPoints.add("ColumnOperators",Minus.class.toString(),Minus.class);
165
                     extensionPoints.add("ColumnOperators",MoreEquals.class.toString(),MoreEquals.class);
166
                     extensionPoints.add("ColumnOperators",MoreThan.class.toString(),MoreThan.class);
167
                     extensionPoints.add("ColumnOperators",Perimeter.class.toString(),Perimeter.class);
168
                     extensionPoints.add("ColumnOperators",Pi.class.toString(),Pi.class);
169
                    extensionPoints.add("ColumnOperators",Plus.class.toString(),Plus.class);
170
                     extensionPoints.add("ColumnOperators",PointX.class.toString(),PointX.class);
171
                     extensionPoints.add("ColumnOperators",PointY.class.toString(),PointY.class);
172
                     extensionPoints.add("ColumnOperators",Pow.class.toString(),Pow.class);
173
                     extensionPoints.add("ColumnOperators",Random.class.toString(),Random.class);
174
                     extensionPoints.add("ColumnOperators",Replace.class.toString(),Replace.class);
175
                     extensionPoints.add("ColumnOperators",Round.class.toString(),Round.class);
176
                     extensionPoints.add("ColumnOperators",SetTimeDate.class.toString(),SetTimeDate.class);
177
                     extensionPoints.add("ColumnOperators",Sin.class.toString(),Sin.class);
178
                     extensionPoints.add("ColumnOperators",Sqrt.class.toString(),Sqrt.class);
179
                     extensionPoints.add("ColumnOperators",StartsWith.class.toString(),StartsWith.class);
180
                     extensionPoints.add("ColumnOperators",SubString.class.toString(),SubString.class);
181
                     extensionPoints.add("ColumnOperators",Tan.class.toString(),Tan.class);
182
                    extensionPoints.add("ColumnOperators",Times.class.toString(),Times.class);
183
                    extensionPoints.add("ColumnOperators",ToDate.class.toString(),ToDate.class);
184
                    extensionPoints.add("ColumnOperators",ToDegrees.class.toString(),ToDegrees.class);
185
                    extensionPoints.add("ColumnOperators",ToLowerCase.class.toString(),ToLowerCase.class);
186
                    extensionPoints.add("ColumnOperators",ToNumber.class.toString(),ToNumber.class);
187
                    extensionPoints.add("ColumnOperators",ToRadians.class.toString(),ToRadians.class);
188
                    extensionPoints.add("ColumnOperators",ToString.class.toString(),ToString.class);
189
                    extensionPoints.add("ColumnOperators",ToUpperCase.class.toString(),ToUpperCase.class);
190
                    extensionPoints.add("ColumnOperators",Trim.class.toString(),Trim.class);
191
         }
192

    
193
         private void registerIcons(){
194
                 PluginServices.getIconTheme().registerDefault(
195
                                        "ext-kcalc",
196
                                        this.getClass().getClassLoader().getResource("images/kcalc.png")
197
                                );
198

    
199
                 PluginServices.getIconTheme().registerDefault(
200
                                        "field-expression-kcalc",
201
                                        this.getClass().getClassLoader().getResource("images/FieldExpression.png")
202
                                );
203
         }
204

    
205
         private class EvalOperatorsTask extends AbstractMonitorableTask{
206
                    private ExtensionPoint extensionPoint;
207
                    public EvalOperatorsTask(){
208
                                setInitialStep(0);
209
                                setDeterminatedProcess(true);
210
                                setStatusMessage(PluginServices.getText(this, "charging_operators")+"...");
211
                                ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
212
                                extensionPoint =(ExtensionPoint)extensionPoints.get("ColumnOperators");
213
                                setFinalStep(extensionPoint.size()+1);
214
                    }
215
                        public void run() throws Exception {
216
                                NotificationManager.addInfo(PluginServices.getText(this,"charging_operators"));
217
                                long t1=System.currentTimeMillis();
218
                                Iterator iterator = extensionPoint.keySet().iterator();
219
                                while (iterator.hasNext()) {
220
                                    try {
221
                                            if (isCanceled())
222
                                                                return;
223
                                        IOperator operator = (IOperator)extensionPoint.create((String)iterator.next());
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
}