Statistics
| Revision:

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
}