Revision 43984

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureSymbolTable.java
13 13
import org.gvsig.fmap.dal.feature.FeatureSelection;
14 14
import org.gvsig.fmap.dal.feature.FeatureStore;
15 15
import org.gvsig.fmap.dal.feature.FeatureType;
16
import org.gvsig.tools.script.Script;
17
import org.gvsig.tools.util.UnmodifiableBasicList;
16 18

  
17 19
/**
18 20
 *
......
99 101
        this.addFunction(new IsSelectedFunction());
100 102
    }
101 103

  
104
    @SuppressWarnings("OverridableMethodCallInConstructor")
105
    public DefaultFeatureSymbolTable(Script userScript, UnmodifiableBasicList<Script> scripts) {
106
        this();
107
        if (userScript != null) {
108
            this.getScripts().add(userScript);
109
        }
110
        if (scripts != null && !scripts.isEmpty()) {
111
            for (Script script : scripts) {
112
                this.getScripts().add(script);
113
            }
114
        }
115
    }
116

  
102 117
    public final void addFunction(Function function) {
103 118
        if (function == null) {
104 119
            throw new IllegalArgumentException("function can't be null");
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultExpressionEvaluator.java
8 8
import org.gvsig.expressionevaluator.Interpreter;
9 9
import org.gvsig.expressionevaluator.SymbolTable;
10 10
import org.gvsig.expressionevaluator.Compiler;
11
import org.gvsig.expressionevaluator.Expression;
11 12
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
12 13
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
13 14
import org.gvsig.expressionevaluator.Function;
......
76 77
    private Compiler compiler;
77 78
    private Interpreter interpreter;
78 79
    private Code code;
79
    private String source;
80
    private Expression expression;
80 81
    private Description[] availableOperators;
81 82
    private Description[] availableFunctions;
82 83

  
83 84
    public DefaultExpressionEvaluator(String source) {
84 85
        this.featureSymbolTable = new DefaultFeatureSymbolTable();
85
        this.source = source;
86
        this.expression = ExpressionEvaluatorLocator.getManager().createExpression();
87
        this.expression.setPhrase(source);
86 88
    }
87 89

  
90
    public DefaultExpressionEvaluator(Expression expression) {
91
        this.expression = expression;
92
        this.featureSymbolTable = new DefaultFeatureSymbolTable(
93
                expression.getUserScript(), 
94
                expression.getScripts()
95
        );
96
    }
97

  
88 98
    private void compile() {
89
        this.code = this.compiler.compileExpression(source);
99
        this.code = this.compiler.compileExpression(expression.getPhrase());
90 100
    }
91 101

  
92 102
    @Override
......
175 185
    public Evaluator clone() throws CloneNotSupportedException {
176 186
        DefaultExpressionEvaluator other = (DefaultExpressionEvaluator) super.clone();
177 187
        other.code = this.code;
178
        other.source = this.source;
188
        other.expression = this.expression.clone();
179 189
        other.availableFunctions = null;
180 190
        other.availableOperators = null;
181 191

  
182 192
        if (this.featureSymbolTable != null) {
183
            // evaluatorData don't support clone.
184 193
            other.featureSymbolTable = this.featureSymbolTable.clone();
185 194
        }
186 195
        if (this.compiler != null) {
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java
9 9
import java.util.List;
10 10
import java.util.Map;
11 11
import org.apache.commons.lang3.StringUtils;
12
import org.gvsig.expressionevaluator.Expression;
12 13

  
13 14
import org.gvsig.fmap.dal.DataFactory;
14 15
import org.gvsig.fmap.dal.DataManager;
......
51 52
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
52 53
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
53 54
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultEvaluatorFactory;
55
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultExpressionEvaluator;
54 56
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureSymbolTable;
55 57
import org.gvsig.fmap.dal.raster.impl.RasterStoreFactory;
56 58
import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory;
......
690 692
    }
691 693

  
692 694
    @Override
695
    public Evaluator createExpresion(Expression expression) throws InitializeException {
696
        DefaultExpressionEvaluator exp = new DefaultExpressionEvaluator(expression);
697
        return exp;        
698
    }
699

  
700
    @Override
693 701
    public FeaturePagingHelper createFeaturePagingHelper(
694 702
            FeatureStore featureStore, int pageSize) throws BaseException {
695 703
        return new FeaturePagingHelperImpl(featureStore, pageSize);
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java
24 24

  
25 25
import java.io.File;
26 26
import java.util.List;
27
import org.gvsig.expressionevaluator.Expression;
27 28

  
28 29
import org.gvsig.fmap.dal.exception.DataException;
29 30
import org.gvsig.fmap.dal.exception.InitializeException;
......
300 301
    public Evaluator createExpresion(String expression)
301 302
            throws InitializeException;
302 303

  
304
    public Evaluator createExpresion(Expression expression)
305
            throws InitializeException;
306

  
303 307
    public EvaluatorFactory createEvaluatorFactory();
304 308
    
305 309
    /*
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/pom.xml
11 11
  <modules>
12 12
    <module>org.gvsig.expressionevaluator.lib</module>
13 13
    <module>org.gvsig.expressionevaluator.swing</module>
14
    <module>org.gvsig.expressionevaluator.main</module>
14 15
  </modules>
15 16
</project>
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/pom.xml
25 25
            <scope>compile</scope>
26 26
        </dependency>
27 27
        <dependency>
28
            <groupId>org.apache.commons</groupId>
29
            <artifactId>commons-math</artifactId>
28
            <groupId>org.json</groupId>
29
            <artifactId>json</artifactId>
30 30
            <scope>compile</scope>
31 31
        </dependency>
32
        <dependency>
33
            <groupId>org.apache.httpcomponents</groupId>
34
            <artifactId>httpclient</artifactId>
35
            <version>4.5.2</version>
36
            <type>jar</type>
37
        </dependency>
38 32
    </dependencies>
39 33
</project>
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestExpressionToString.java
34 34
        expression.setPhrase(source);
35 35
        
36 36
        assertEquals(
37
                "expression:?phrase=precio+%2B+10&userScriptCode&userScriptLanguage&scriptsCount=0&scripts", 
38
                expression.toURI().toString()
37
                "{\"phrase\":\"precio + 10\"}", 
38
                expression.toJSON()
39 39
        );
40 40
    }
41 41
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultSymbolTable.java
9 9
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
10 10
import org.gvsig.expressionevaluator.Function;
11 11
import org.gvsig.expressionevaluator.MutableSymbolTable;
12
import org.gvsig.expressionevaluator.SymbolTable;
12 13
import org.gvsig.tools.script.Script;
13 14

  
14 15
/**
......
31 32
    
32 33
    protected final void init() {
33 34
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
34
        this.addSymbolTable(manager.getSymbolTable("SQL"));
35
        this.addSymbolTable(manager.getSymbolTable("OGC"));
35
        for (SymbolTable symbolTable : manager.getSymbolTables()) {
36
            this.addSymbolTable(symbolTable);
37
        }
36 38
    }
37 39
    
38 40
    @Override
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultExpression.java
1 1
package org.gvsig.expressionevaluator.impl;
2 2

  
3 3
import java.net.URI;
4
import java.net.URISyntaxException;
5 4
import java.util.ArrayList;
6 5
import java.util.Iterator;
7 6
import java.util.List;
8 7
import java.util.logging.Level;
9 8
import java.util.logging.Logger;
10 9
import org.apache.commons.lang3.StringUtils;
11
import org.apache.http.client.utils.URIBuilder;
12 10
import org.gvsig.expressionevaluator.Code;
13 11
import org.gvsig.expressionevaluator.Expression;
14 12
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
......
24 22
import org.gvsig.tools.script.ScriptManager;
25 23
import org.gvsig.tools.util.UnmodifiableBasicList;
26 24
import org.gvsig.tools.util.UnmodifiableBasicListAdapter;
25
import org.json.JSONArray;
26
import org.json.JSONObject;
27 27

  
28 28
/**
29 29
 *
......
108 108
    }
109 109

  
110 110
    @Override
111
    public void clear() {
112
        this.phrase = null;
113
        this.userScript = null;
114
        this.unmodifiableScripts = null;
115
        this.scripts = null;
116
        this.code = null;
117
        this.interpreter = null;
118
    }
119

  
120
    @Override
111 121
    public Object execute(SymbolTable symbolTable) {
112 122
        if (this.code == null) {
113 123
            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
......
191 201
    }
192 202

  
193 203
    @Override
194
    public URI toURI() {
195
        URIBuilder builder = new URIBuilder();
204
    public String toJSON() {
205
        JSONObject expressionJson = new JSONObject();
206
        expressionJson.put("phrase", this.phrase);
196 207
        
197
        builder.setScheme("expression");
198
        builder.addParameter("phrase", this.phrase);
199
        if( this.userScript==null ) {
200
            builder.addParameter("userScriptCode", null);
201
            builder.addParameter("userScriptLanguage", null);
202
        } else {
203
            builder.addParameter("userScriptCode", this.userScript.getCode());
204
            builder.addParameter("userScriptLanguage", this.userScript.getTypeName());
208
        if( this.userScript!=null ) {
209
            JSONObject userScriptJson = new JSONObject();
210
            userScriptJson.put("code", this.userScript.getCode());
211
            userScriptJson.put("language", this.userScript.getTypeName());
212
            expressionJson.put("userScript", userScriptJson);
205 213
        }
206
        if (this.scripts != null && !this.scripts.isEmpty()) {
207
            List<URI> l = new ArrayList<>();
214
        
215
        if( this.scripts!=null && !this.scripts.isEmpty() ) {
216
            JSONArray scriptsJson = new JSONArray();
208 217
            for (Script script : this.scripts) {
209
                URI location = script.getURI();
210
                if (location != null) {
211
                    l.add(location);
212
                }
218
                scriptsJson.put(script.getURI());
213 219
            }
214
            if (l.isEmpty()) {
215
                builder.addParameter("scriptsCount", "0");
216
                builder.addParameter("scripts", null);
217
            } else {
218
                builder.addParameter("scriptsCount", String.valueOf(l.size()));
219
                int n = 1;
220
                for (URI uri : l) {
221
                    builder.addParameter("scripts"+n, uri.toString());
222
                }
220
            expressionJson.put("scripts", scriptsJson);
221
        }
222
        return expressionJson.toString();
223
    }
224

  
225
    @Override
226
    public void fromJSON(String json) {
227
        this.clear();
228
        ScriptManager scriptMananger = ToolsLocator.getScriptManager();
229

  
230
        JSONObject expressionJson = new JSONObject(json);
231
        if( expressionJson.has("phrase") ) {
232
            this.phrase = expressionJson.getString("phrase");
233
        }
234
        if( expressionJson.has("userScript") ) {
235
            String theCode = "";
236
            String theLanguage = "python";
237
            JSONObject userScriptJson = expressionJson.getJSONObject("userScript");
238
            if( userScriptJson.has("code") ) {
239
                theCode = userScriptJson.getString("code");
223 240
            }
224
        } else {
225
            builder.addParameter("scriptsCount", "0");
226
            builder.addParameter("scripts", null);
241
            if( userScriptJson.has("language") ) {
242
                theCode = userScriptJson.getString("language");
243
            }
244
            this.userScript = scriptMananger.createScript("user", theCode, theLanguage);
227 245
        }
228
        
229
        try {
230
            return builder.build();
231
        } catch (URISyntaxException ex) {
232
            throw new RuntimeException("Can't serialize expression", ex);
246
        if( expressionJson.has("scripts") ) {
247
            this.scripts = new ArrayList<>();
248
            JSONArray scriptsJson = expressionJson.getJSONArray("scripts");
249
            for (Object object : scriptsJson) {
250
                URI location = (URI) object;
251
                Script script = scriptMananger.loadScript(location);
252
                this.scripts.add(script);
253
            }
233 254
        }
234 255
    }
235 256

  
257
    @Override
258
    public String toString() {
259
        return this.toJSON();
260
    }
261

  
262
    @Override
263
    public Expression clone() throws CloneNotSupportedException {
264
        Expression other = (Expression) super.clone();
265
        other.fromJSON(this.toJSON());
266
        return other;
267
    }
268

  
236 269
    
237 270
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/Expression.java
5 5
 */
6 6
package org.gvsig.expressionevaluator;
7 7

  
8
import java.net.URI;
9 8
import org.gvsig.tools.persistence.Persistent;
10 9
import org.gvsig.tools.script.Script;
11 10
import org.gvsig.tools.util.UnmodifiableBasicList;
......
15 14
 * @author jjdelcerro
16 15
 */
17 16
public interface Expression extends Persistent {
17
    public void clear();
18 18
    
19 19
    public String getPhrase();
20 20
    
......
36 36
    
37 37
    public Object execute(SymbolTable symbolTable);
38 38
    
39
    public URI toURI();
39
    public String toJSON();
40
    
41
    public void fromJSON(String json);
42
    
43
    public Expression clone() throws CloneNotSupportedException;
44
    
40 45
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.api/src/main/java/org/gvsig/expressionevaluator/swing/ExpressionBuilderConfig.java
20 20

  
21 21
    public void addSymbolTable(SymbolTable symbolTable);
22 22

  
23
    public void removeSymbolTable(String name);
24

  
23 25
    public void removeAllSymbolTables();
24 26
    
27
    public void setScriptsEnabled(boolean enabled);
28
    
29
    public boolean getScriptsEnabled();
30
    
25 31
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionPicker.java
91 91
    public void removeAllSymbolTables() {
92 92
        this.controller.removeAllSymbolTables();
93 93
    }
94

  
95
    @Override
96
    public void removeSymbolTable(String name) {
97
        this.controller.removeSymbolTable(name);
98
    }
99

  
100
    @Override
101
    public void setScriptsEnabled(boolean enabled) {
102
        this.controller.setScriptsEnabled(enabled);
103
    }
104

  
105
    @Override
106
    public boolean getScriptsEnabled() {
107
        return this.controller.getScriptsEnabled();
108
    }
94 109
    
95 110
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultExpressionBuilderConfig.java
22 22
    private int limit;
23 23
    private HashMap<String, SymbolTable> symbolTables;
24 24
    private final ExpressionEvaluatorSwingManager manager;
25
    private boolean scriptsEnabled = true;
25 26

  
26 27
    public DefaultExpressionBuilderConfig(ExpressionEvaluatorSwingManager manager) {
27 28
        this.manager = manager;
......
76 77
    public void setSimpleElementsLimit(int limit) {
77 78
        this.limit = limit;
78 79
    }
80

  
81
    @Override
82
    public void removeSymbolTable(String name) {
83
        this.symbolTables.remove(name);
84
    }
85

  
86
    @Override
87
    public void setScriptsEnabled(boolean enabled) {
88
        this.scriptsEnabled = enabled;
89
    }
90

  
91
    @Override
92
    public boolean getScriptsEnabled() {
93
        return this.scriptsEnabled;
94
    }
79 95
    
80 96

  
81 97
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionBuilder.java
10 10
import java.net.URL;
11 11
import java.util.ArrayList;
12 12
import java.util.Collection;
13
import java.util.Collections;
14 13
import java.util.Date;
15
import java.util.HashMap;
16 14
import java.util.List;
17 15
import java.util.Objects;
18 16
import javax.swing.DefaultListCellRenderer;
......
35 33
import org.apache.commons.lang.StringEscapeUtils;
36 34
import org.gvsig.expressionevaluator.Expression;
37 35
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
38
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
39 36
import org.gvsig.expressionevaluator.Function;
40 37
import org.gvsig.expressionevaluator.SymbolTable;
41 38
import org.gvsig.expressionevaluator.swing.Element;
......
69 66
    private PickerController<List<Script>> scriptPicker;
70 67
    private ScriptSwingManager.ScriptEditor scriptEditor;
71 68
    
72
    private ExpressionBuilderConfig config;
69
    private final ExpressionBuilderConfig config;
73 70
    
74 71
    private class ElementsTreeModel implements TreeModel {
75 72

  
......
337 334
        this.pnlScriptEditorContainer.setLayout(new BorderLayout());
338 335
        this.pnlScriptEditorContainer.add(this.scriptEditor.asJComponent(), BorderLayout.CENTER);
339 336
    
337
        this.tabExpressionBuilder.setEnabledAt(0, this.config.getScriptsEnabled());
340 338
        this.setPreferredSize(new Dimension(750, 500));
341 339
    }
342 340

  
......
559 557
        this.config.removeAllSymbolTables();
560 558
    }
561 559

  
560
    @Override
561
    public void removeSymbolTable(String name) {
562
        this.config.removeSymbolTable(name);
563
    }
564

  
565
    @Override
566
    public void setScriptsEnabled(boolean enabled) {
567
        this.config.setScriptsEnabled(enabled);
568
        this.tabExpressionBuilder.setEnabledAt(0, this.config.getScriptsEnabled());
569
    }
570

  
571
    @Override
572
    public boolean getScriptsEnabled() {
573
        return this.config.getScriptsEnabled();
574
    }
562 575
    
563 576
    @Override
564 577
    public JComponent asJComponent() {
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultExpressionPickerController.java
165 165
        this.config.removeAllSymbolTables();
166 166
    }
167 167

  
168
    @Override
169
    public void removeSymbolTable(String name) {
170
        this.config.removeSymbolTable(name);
171
    }
172

  
173
    @Override
174
    public void setScriptsEnabled(boolean enabled) {
175
        this.config.setScriptsEnabled(enabled);
176
    }
177

  
178
    @Override
179
    public boolean getScriptsEnabled() {
180
        return this.config.getScriptsEnabled();
181
    }
182

  
168 183
    
169 184
}
170 185

  

Also available in: Unified diff