Statistics
| Revision:

root / trunk / extensions / extExpressionField / src / com / iver / cit / gvsig / ExpressionFieldExtension.java @ 13444

History | View | Annotate | Download (12.2 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.BSFManager;
8

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

    
86
        public void execute(String actionCommand) {
87
                com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow();
88
                table=(Table)window;
89
                if (operators.isEmpty()) {
90
                PluginServices.cancelableBackgroundExecution(new EvalOperatorsTask());
91
        }else{
92
                 EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
93
                     PluginServices.getMDIManager().addWindow(eed);
94
        }
95

    
96
        }
97
        public void postInitialize() {
98
        }
99

    
100
        public boolean isEnabled() {
101
                com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow();
102
                if (window instanceof Table) {
103
                        Table table=(Table)window;
104
                        BitSet columnSelected = table.getSelectedFieldIndices();
105
                    if (!columnSelected.isEmpty() && table.isEditing()) {
106
                            return true;
107
                    }
108
                }
109
                return false;
110
        }
111

    
112
        public boolean isVisible() {
113
                com.iver.andami.ui.mdiManager.IWindow window = PluginServices.getMDIManager().getActiveWindow();
114
                if (window instanceof Table) {
115
                        return true;
116
                }
117
                return false;
118
        }
119
         private void registerOperations() {
120
                    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
121

    
122
                    extensionPoints.add("cad_editing_properties_pages","fieldExpression",FieldExpressionPage.class);
123

    
124
                    extensionPoints.add("ColumnOperators",Abs.class.toString(),Abs.class);
125
                extensionPoints.add("ColumnOperators",Acos.class.toString(),Acos.class);
126
                extensionPoints.add("ColumnOperators",After.class.toString(),After.class);
127
                extensionPoints.add("ColumnOperators",Area.class.toString(),Area.class);
128
                extensionPoints.add("ColumnOperators",Asin.class.toString(),Asin.class);
129
                extensionPoints.add("ColumnOperators",Atan.class.toString(),Atan.class);
130
                extensionPoints.add("ColumnOperators",Acos.class.toString(),Acos.class);
131
                extensionPoints.add("ColumnOperators",Before.class.toString(),Before.class);
132
                extensionPoints.add("ColumnOperators",Ceil.class.toString(),Ceil.class);
133
                extensionPoints.add("ColumnOperators",Cos.class.toString(),Cos.class);
134
                    extensionPoints.add("ColumnOperators",Distinct.class.toString(),Distinct.class);
135
                     extensionPoints.add("ColumnOperators",Division.class.toString(),Division.class);
136
                     extensionPoints.add("ColumnOperators",E.class.toString(),E.class);
137
                     extensionPoints.add("ColumnOperators",EndsWith.class.toString(),EndsWith.class);
138
                     extensionPoints.add("ColumnOperators",Equal.class.toString(),Equal.class);
139
                     extensionPoints.add("ColumnOperators",Equals.class.toString(),Equals.class);
140
                     extensionPoints.add("ColumnOperators",Exp.class.toString(),Exp.class);
141
                     extensionPoints.add("ColumnOperators",Geometry.class.toString(),Geometry.class);
142
                     extensionPoints.add("ColumnOperators",GetTimeDate.class.toString(),GetTimeDate.class);
143
                     extensionPoints.add("ColumnOperators",IndexOf.class.toString(),IndexOf.class);
144
                     extensionPoints.add("ColumnOperators",IsNumber.class.toString(),IsNumber.class);
145
                     extensionPoints.add("ColumnOperators",LastIndexOf.class.toString(),LastIndexOf.class);
146
                     extensionPoints.add("ColumnOperators",Length.class.toString(),Length.class);
147
                     extensionPoints.add("ColumnOperators",LessEquals.class.toString(),LessEquals.class);
148
                     extensionPoints.add("ColumnOperators",LessThan.class.toString(),LessThan.class);
149
                     extensionPoints.add("ColumnOperators",Log.class.toString(),Log.class);
150
                     extensionPoints.add("ColumnOperators",Max.class.toString(),Max.class);
151
                     extensionPoints.add("ColumnOperators",Min.class.toString(),Min.class);
152
                     extensionPoints.add("ColumnOperators",Minus.class.toString(),Minus.class);
153
                     extensionPoints.add("ColumnOperators",MoreEquals.class.toString(),MoreEquals.class);
154
                     extensionPoints.add("ColumnOperators",MoreThan.class.toString(),MoreThan.class);
155
                     extensionPoints.add("ColumnOperators",Perimeter.class.toString(),Perimeter.class);
156
                     extensionPoints.add("ColumnOperators",Pi.class.toString(),Pi.class);
157
                    extensionPoints.add("ColumnOperators",Plus.class.toString(),Plus.class);
158
                     extensionPoints.add("ColumnOperators",PointX.class.toString(),PointX.class);
159
                     extensionPoints.add("ColumnOperators",PointY.class.toString(),PointY.class);
160
                     extensionPoints.add("ColumnOperators",Pow.class.toString(),Pow.class);
161
                     extensionPoints.add("ColumnOperators",Random.class.toString(),Random.class);
162
                     extensionPoints.add("ColumnOperators",Replace.class.toString(),Replace.class);
163
                     extensionPoints.add("ColumnOperators",Round.class.toString(),Round.class);
164
                     extensionPoints.add("ColumnOperators",SetTimeDate.class.toString(),SetTimeDate.class);
165
                     extensionPoints.add("ColumnOperators",Sin.class.toString(),Sin.class);
166
                     extensionPoints.add("ColumnOperators",Sqrt.class.toString(),Sqrt.class);
167
                     extensionPoints.add("ColumnOperators",StartsWith.class.toString(),StartsWith.class);
168
                     extensionPoints.add("ColumnOperators",SubString.class.toString(),SubString.class);
169
                     extensionPoints.add("ColumnOperators",Tan.class.toString(),Tan.class);
170
                    extensionPoints.add("ColumnOperators",Times.class.toString(),Times.class);
171
                    extensionPoints.add("ColumnOperators",ToDate.class.toString(),ToDate.class);
172
                    extensionPoints.add("ColumnOperators",ToDegrees.class.toString(),ToDegrees.class);
173
                    extensionPoints.add("ColumnOperators",ToLowerCase.class.toString(),ToLowerCase.class);
174
                    extensionPoints.add("ColumnOperators",ToNumber.class.toString(),ToNumber.class);
175
                    extensionPoints.add("ColumnOperators",ToRadians.class.toString(),ToRadians.class);
176
                    extensionPoints.add("ColumnOperators",ToString.class.toString(),ToString.class);
177
                    extensionPoints.add("ColumnOperators",ToUpperCase.class.toString(),ToUpperCase.class);
178
                    extensionPoints.add("ColumnOperators",Trim.class.toString(),Trim.class);
179
         }
180
         private class EvalOperatorsTask extends AbstractMonitorableTask{
181
                    private ExtensionPoint extensionPoint;
182
                    public EvalOperatorsTask(){
183
                                setInitialStep(0);
184
                                setDeterminatedProcess(true);
185
                                setStatusMessage(PluginServices.getText(this, "charging_operators")+"...");
186
                                ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
187
                                extensionPoint =(ExtensionPoint)extensionPoints.get("ColumnOperators");
188
                                setFinalStep(extensionPoint.size()+1);
189
                    }
190
                        public void run() throws Exception {
191
                                 long t1=System.currentTimeMillis();
192
                                Iterator iterator = extensionPoint.keySet().iterator();
193
                                while (iterator.hasNext()) {
194
                                    try {
195
                                        IOperator operator = (IOperator)extensionPoint.create((String)iterator.next());
196

    
197
                                        operator.eval(interpreter);
198
                                        operators.add(operator);
199
                                        reportStep();
200
                                        setNote(operator.getClass().getName());
201
                                    } catch (InstantiationException e) {
202
                                        e.printStackTrace();
203
                                    } catch (IllegalAccessException e) {
204
                                        e.printStackTrace();
205
                                    } catch (ClassCastException e) {
206
                                        e.printStackTrace();
207
                                    }
208
                                }
209
                                long t2=System.currentTimeMillis();
210
                                System.out.println("Tiempo en evaluar y crear del extension point = "+(t2-t1) );
211
                                long t3=System.currentTimeMillis();
212
                                System.out.println("Tiempo en a?adir los operadores correctos = "+(t3-t2) );
213
                                reportStep();
214
                        }
215
                        public void finished() {
216
                                EvalExpressionDialog eed=new EvalExpressionDialog(table,interpreter,operators);
217
                        PluginServices.getMDIManager().addWindow(eed);
218
                        }
219

    
220
            }
221

    
222
}