Revision 44592
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/TestCreateFunction.java | ||
---|---|---|
1 |
package org.gvsig.expresionevaluator.impl; |
|
2 |
|
|
3 |
import java.net.URL; |
|
4 |
import junit.framework.TestCase; |
|
5 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
|
6 |
import org.gvsig.expressionevaluator.Compiler; |
|
7 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
8 |
import org.gvsig.expressionevaluator.Interpreter; |
|
9 |
import org.gvsig.expressionevaluator.Code; |
|
10 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
12 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
13 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
|
14 |
import org.gvsig.tools.resourcesstorage.AbstractResourcesStorage; |
|
15 |
import org.gvsig.tools.resourcesstorage.URLResource; |
|
16 |
|
|
17 |
public class TestCreateFunction extends TestCase { |
|
18 |
|
|
19 |
private static class Test1ResourcesStorage extends AbstractResourcesStorage { |
|
20 |
|
|
21 |
public Test1ResourcesStorage() { |
|
22 |
|
|
23 |
} |
|
24 |
|
|
25 |
@Override |
|
26 |
public Resource getResource(String resourceName) { |
|
27 |
URL url = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/"+resourceName+".cosa"); |
|
28 |
if( url == null ) { |
|
29 |
return null; |
|
30 |
} |
|
31 |
Resource res = new URLResource(url); |
|
32 |
return res; |
|
33 |
} |
|
34 |
} |
|
35 |
|
|
36 |
public TestCreateFunction(String testName) { |
|
37 |
super(testName); |
|
38 |
} |
|
39 |
|
|
40 |
@Override |
|
41 |
protected void setUp() throws Exception { |
|
42 |
super.setUp(); |
|
43 |
new DefaultLibrariesInitializer().fullInitialize(); |
|
44 |
} |
|
45 |
|
|
46 |
@Override |
|
47 |
protected void tearDown() throws Exception { |
|
48 |
super.tearDown(); |
|
49 |
} |
|
50 |
|
|
51 |
// TODO add test methods here. The name must begin with 'test'. For example: |
|
52 |
// public void testHello() {} |
|
53 |
|
|
54 |
|
|
55 |
protected LexicalAnalyzer createLexicalAnalyzer() { |
|
56 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
57 |
LexicalAnalyzer lexer = manager.createLexicalAnalyzer(); |
|
58 |
return lexer; |
|
59 |
} |
|
60 |
|
|
61 |
protected org.gvsig.expressionevaluator.Compiler createCompiler() { |
|
62 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
63 |
Compiler compiler = manager.createCompiler(); |
|
64 |
compiler.setLexicalAnalyzer(createLexicalAnalyzer()); |
|
65 |
return compiler; |
|
66 |
} |
|
67 |
|
|
68 |
|
|
69 |
protected SymbolTable createSymbolTable() { |
|
70 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
71 |
MutableSymbolTable symbolTable = manager.createSymbolTable(); |
|
72 |
symbolTable.setVar("precio", 200); |
|
73 |
symbolTable.setVar("1990", 0.168873933773767); |
|
74 |
return symbolTable; |
|
75 |
} |
|
76 |
|
|
77 |
protected Interpreter createInterpreter(SymbolTable symbolTable) { |
|
78 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
79 |
manager.setScriptsResourcesStorage(new Test1ResourcesStorage()); |
|
80 |
Interpreter interpreter = manager.createInterpreter(); |
|
81 |
interpreter.setSymbolTable(symbolTable); |
|
82 |
return interpreter; |
|
83 |
} |
|
84 |
|
|
85 |
public void testStringUtilsCapitalize() { |
|
86 |
SymbolTable symbolTable = createSymbolTable(); |
|
87 |
Compiler compiler = createCompiler(); |
|
88 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
89 |
|
|
90 |
String source = "BEGIN " |
|
91 |
+ "CREATE FUNCTION CAPITALIZE(s) AS " |
|
92 |
+ "'org.apache.commons.lang3.StringUtils', 'capitalize' " |
|
93 |
+ "LANGUAGE 'java';" |
|
94 |
+ "CAPITALIZE('hola');" |
|
95 |
+ "END"; |
|
96 |
|
|
97 |
Code code = compiler.compileExpression(source); |
|
98 |
Object v = interpreter.run(code); |
|
99 |
assertEquals("Hola", v.toString()); |
|
100 |
} |
|
101 |
|
|
102 |
public void testSQRTScriptEngine() { |
|
103 |
SymbolTable symbolTable = createSymbolTable(); |
|
104 |
Compiler compiler = createCompiler(); |
|
105 |
Interpreter interpreter = createInterpreter(symbolTable); |
|
106 |
|
|
107 |
String source = "BEGIN " |
|
108 |
+ "CREATE FUNCTION SQUARE(num) AS 'testlib', 'SQUARE';" |
|
109 |
+ "SQUARE(4);" |
|
110 |
+ "END"; |
|
111 |
|
|
112 |
Code code = compiler.compileExpression(source); |
|
113 |
Object v = interpreter.run(code); |
|
114 |
assertEquals(16, ((Number)v).intValue()); |
|
115 |
} |
|
116 |
|
|
117 |
|
|
118 |
|
|
119 |
} |
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/TestGrammarCompiler.java | ||
---|---|---|
126 | 126 |
Compiler compiler = createCompiler(); |
127 | 127 |
|
128 | 128 |
Code code = compiler.compileExpression(source); |
129 |
assertEquals("IFF((\"V1\" = 11), LET('V2', 22), NULL)", code.toString());
|
|
129 |
assertEquals("IFF((\"V1\" = 11), LET('V2', 22))", code.toString()); |
|
130 | 130 |
} |
131 | 131 |
|
132 | 132 |
public void testIfThenElse() { |
... | ... | |
144 | 144 |
Compiler compiler = createCompiler(); |
145 | 145 |
|
146 | 146 |
Code code = compiler.compileExpression(source); |
147 |
assertEquals("IFF((\"V1\" = 11), BLOCK(LET('V2', 22), LET('V1', 10)), NULL)", code.toString());
|
|
147 |
assertEquals("IFF((\"V1\" = 11), BLOCK(LET('V2', 22), LET('V1', 10)))", code.toString()); |
|
148 | 148 |
} |
149 | 149 |
|
150 | 150 |
public void testWhile() { |
... | ... | |
243 | 243 |
Compiler compiler = createCompiler(); |
244 | 244 |
|
245 | 245 |
Code code = compiler.compileExpression(source); |
246 |
assertEquals("CASE(((\"Field_1\" >= 75) AND (\"Field_1\" <= 79)), ((\"Field_1\" >= 80) AND (\"Field_1\" <= 84)), 100, 110, NULL)", code.toString());
|
|
246 |
assertEquals("CASE(((\"Field_1\" >= 75) AND (\"Field_1\" <= 79)), ((\"Field_1\" >= 80) AND (\"Field_1\" <= 84)), 100, 110)", code.toString()); |
|
247 | 247 |
} |
248 | 248 |
|
249 | 249 |
public void testCase3() { |
... | ... | |
261 | 261 |
Compiler compiler = createCompiler(); |
262 | 262 |
|
263 | 263 |
Code code = compiler.compileExpression(source); |
264 |
assertEquals("CREATE_FUNCTION('test1', NULL, print('Hola'), NULL, NULL, NULL)", code.toString());
|
|
264 |
assertEquals("CREATE_FUNCTION('test1', print('Hola'))", code.toString());
|
|
265 | 265 |
} |
266 | 266 |
|
267 | 267 |
public void testDef2() { |
... | ... | |
270 | 270 |
Compiler compiler = createCompiler(); |
271 | 271 |
|
272 | 272 |
Code code = compiler.compileExpression(source); |
273 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(('Hola ' + \"nombre\")), NULL, NULL, NULL)", code.toString());
|
|
273 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), print(('Hola ' + \"nombre\")))", code.toString()); |
|
274 | 274 |
} |
275 | 275 |
|
276 | 276 |
public void testDef3() { |
... | ... | |
279 | 279 |
Compiler compiler = createCompiler(); |
280 | 280 |
|
281 | 281 |
Code code = compiler.compileExpression(source); |
282 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), RETURN(('Hola ' || \"nombre\")), NULL, NULL, NULL)", code.toString());
|
|
282 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), RETURN(('Hola ' || \"nombre\")))", code.toString()); |
|
283 | 283 |
} |
284 | 284 |
|
285 | 285 |
public void testCreateFunctionExtern1() { |
286 |
String source = "CREATE FUNCTION test1(nombre) AS 'addons/test/test', test1";
|
|
286 |
String source = "CREATE FUNCTION test1(nombre) AS 'addons/test/test', 'test1' LANGUAGE 'cosa'";
|
|
287 | 287 |
|
288 | 288 |
Compiler compiler = createCompiler(); |
289 | 289 |
|
290 | 290 |
Code code = compiler.compileExpression(source); |
291 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), NULL, 'addons/test/test', 'test1', NULL)", code.toString());
|
|
291 |
assertEquals("CREATE_FUNCTION('test1', LIST('nombre'), 'addons/test/test', 'test1', 'cosa')", code.toString());
|
|
292 | 292 |
} |
293 | 293 |
|
294 | 294 |
public void testList() { |
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/TestScript1.java | ||
---|---|---|
4 | 4 |
import junit.framework.TestCase; |
5 | 5 |
import org.apache.commons.io.IOUtils; |
6 | 6 |
import org.apache.commons.lang3.StringUtils; |
7 |
import org.gvsig.expressionevaluator.Expression; |
|
8 | 7 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
9 | 8 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
10 | 9 |
import org.gvsig.expressionevaluator.impl.javascripting.CosaScriptEngineFactory; |
... | ... | |
31 | 30 |
// TODO add test methods here. The name must begin with 'test'. For example: |
32 | 31 |
// public void testHello() {} |
33 | 32 |
public void testScript1() throws Exception { |
34 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_1.txt").openStream();
|
|
33 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_1."+CosaScriptEngineFactory.LANGUAGE_NAME).openStream();
|
|
35 | 34 |
String source = StringUtils.join(IOUtils.readLines(is), "\n"); |
36 | 35 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
37 | 36 |
|
... | ... | |
51 | 50 |
} |
52 | 51 |
|
53 | 52 |
public void testScript2() throws Exception { |
54 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2.txt").openStream();
|
|
53 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2."+CosaScriptEngineFactory.LANGUAGE_NAME).openStream();
|
|
55 | 54 |
String source = StringUtils.join(IOUtils.readLines(is), "\n"); |
56 | 55 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
57 | 56 |
|
... | ... | |
72 | 71 |
} |
73 | 72 |
|
74 | 73 |
public void testScript3() throws Exception { |
75 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2.txt").openStream();
|
|
74 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2."+CosaScriptEngineFactory.LANGUAGE_NAME).openStream();
|
|
76 | 75 |
String source = StringUtils.join(IOUtils.readLines(is), "\n"); |
77 | 76 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
78 | 77 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_1.txt | ||
---|---|---|
1 |
|
|
2 |
create procedure form_onSetvalues form, values as |
|
3 |
begin |
|
4 |
print("form_onSetvalues"); |
|
5 |
end |
|
6 |
|
|
7 |
create procedure form_onFieldEnter form, field as |
|
8 |
begin |
|
9 |
print("form_onFieldEnter"); |
|
10 |
end |
|
11 |
|
|
12 |
create procedure form_onFieldExit form, field as |
|
13 |
begin |
|
14 |
print("form_onFieldExit"); |
|
15 |
end |
|
16 |
|
|
17 |
create procedure form_onFieldChanged form, field as |
|
18 |
begin |
|
19 |
print("form_onFieldChanged"); |
|
20 |
end |
|
21 |
|
|
22 |
create function form_validate form as |
|
23 |
$$ |
|
24 |
return true; |
|
25 |
$$ |
|
26 |
|
|
27 |
create procedure form_onLoad form as |
|
28 |
$$ |
|
29 |
print("form_onLoad"); |
|
30 |
$$ |
|
31 |
|
|
32 |
create procedure form_clear form as |
|
33 |
$$ |
|
34 |
print("form_clear"); |
|
35 |
$$ |
|
36 |
|
|
37 |
create function form_isReadOnly form as |
|
38 |
begin |
|
39 |
if not user().isAuthenticated() then |
|
40 |
return true; |
|
41 |
end if |
|
42 |
return false; |
|
43 |
-- set fecha_accidente = form.getField('FECHA_ACCIDENTE').getValue(); |
|
44 |
-- if fecha_accidente = null then |
|
45 |
-- return false; |
|
46 |
-- end if |
|
47 |
-- set fecha_de_cierre = application().getProperty('CEGESEV.accidentes.fecha_de_cierre'); |
|
48 |
-- if fecha_de_cierre = null then |
|
49 |
-- return true; |
|
50 |
-- end if |
|
51 |
-- return Date(fecha_de_cierre) > Date(fecha_accidente); |
|
52 |
end |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_2.txt | ||
---|---|---|
1 |
|
|
2 |
CREATE FUNCTION test1 AS |
|
3 |
BEGIN |
|
4 |
SET x ''; |
|
5 |
FOR n IN LIST('hola','adios','fin'): |
|
6 |
SET x = x || ' ' || n; |
|
7 |
END |
|
8 |
RETURN x; |
|
9 |
END |
|
10 |
|
|
11 |
CREATE FUNCTION test2 AS |
|
12 |
$$ |
|
13 |
SET s ''; |
|
14 |
SET x TO LIST('hola','adios','fin'); |
|
15 |
FOR n IN RANGE(3): |
|
16 |
SET s = s || ' ' || x[n]; |
|
17 |
END FOR; |
|
18 |
RETURN s; |
|
19 |
$$ |
|
20 |
|
|
21 |
CREATE FUNCTION saluda AS |
|
22 |
BEGIN |
|
23 |
IF LEN($ARGS) > 0 THEN |
|
24 |
SET s TO 'Hola ' || $ARGS[0]; |
|
25 |
ELSE |
|
26 |
SET s = 'Hola.'; |
|
27 |
END; |
|
28 |
PRINT(s); |
|
29 |
RETURN s; |
|
30 |
END |
|
31 |
|
|
32 |
CREATE FUNCTION test3 AS |
|
33 |
BEGIN |
|
34 |
RETURN saluda('amigos'); |
|
35 |
END |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_1.cosa | ||
---|---|---|
1 |
-- encoding: utf-8; lang: cosa |
|
2 |
|
|
3 |
create procedure form_onSetvalues form, values as |
|
4 |
begin |
|
5 |
print("form_onSetvalues"); |
|
6 |
end |
|
7 |
|
|
8 |
create procedure form_onFieldEnter form, field as |
|
9 |
begin |
|
10 |
print("form_onFieldEnter"); |
|
11 |
end |
|
12 |
|
|
13 |
create procedure form_onFieldExit form, field as |
|
14 |
begin |
|
15 |
print("form_onFieldExit"); |
|
16 |
end |
|
17 |
|
|
18 |
create procedure form_onFieldChanged form, field as |
|
19 |
begin |
|
20 |
print("form_onFieldChanged"); |
|
21 |
end |
|
22 |
|
|
23 |
create function form_validate form as |
|
24 |
$$ |
|
25 |
return true; |
|
26 |
$$ |
|
27 |
|
|
28 |
create procedure form_onLoad form as |
|
29 |
$$ |
|
30 |
print("form_onLoad"); |
|
31 |
$$ |
|
32 |
|
|
33 |
create procedure form_clear form as |
|
34 |
$$ |
|
35 |
print("form_clear"); |
|
36 |
$$ |
|
37 |
|
|
38 |
create function form_isReadOnly form as |
|
39 |
begin |
|
40 |
if not user().isAuthenticated() then |
|
41 |
return true; |
|
42 |
end if |
|
43 |
return false; |
|
44 |
-- set fecha_accidente = form.getField('FECHA_ACCIDENTE').getValue(); |
|
45 |
-- if fecha_accidente = null then |
|
46 |
-- return false; |
|
47 |
-- end if |
|
48 |
-- set fecha_de_cierre = application().getProperty('CEGESEV.accidentes.fecha_de_cierre'); |
|
49 |
-- if fecha_de_cierre = null then |
|
50 |
-- return true; |
|
51 |
-- end if |
|
52 |
-- return Date(fecha_de_cierre) > Date(fecha_accidente); |
|
53 |
end |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/TestScript1_2.cosa | ||
---|---|---|
1 |
-- encoding: utf-8; lang: cosa |
|
2 |
|
|
3 |
CREATE FUNCTION test1 AS |
|
4 |
BEGIN |
|
5 |
SET x ''; |
|
6 |
FOR n IN LIST('hola','adios','fin'): |
|
7 |
SET x = x || ' ' || n; |
|
8 |
END |
|
9 |
RETURN x; |
|
10 |
END |
|
11 |
|
|
12 |
CREATE FUNCTION test2 AS |
|
13 |
$$ |
|
14 |
SET s ''; |
|
15 |
SET x TO LIST('hola','adios','fin'); |
|
16 |
FOR n IN RANGE(3): |
|
17 |
SET s = s || ' ' || x[n]; |
|
18 |
END FOR; |
|
19 |
RETURN s; |
|
20 |
$$ |
|
21 |
|
|
22 |
CREATE FUNCTION saluda AS |
|
23 |
BEGIN |
|
24 |
IF LEN($ARGS) > 0 THEN |
|
25 |
SET s TO 'Hola ' || $ARGS[0]; |
|
26 |
ELSE |
|
27 |
SET s = 'Hola.'; |
|
28 |
END; |
|
29 |
PRINT(s); |
|
30 |
RETURN s; |
|
31 |
END |
|
32 |
|
|
33 |
CREATE FUNCTION test3 AS |
|
34 |
BEGIN |
|
35 |
RETURN saluda('amigos'); |
|
36 |
END |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/resources/org/gvsig/expressionevaluator/impl/testlib.cosa | ||
---|---|---|
1 |
-- encoding: utf-8; lang: cosa |
|
2 |
|
|
3 |
CREATE FUNCTION SQUARE(num) AS |
|
4 |
BEGIN |
|
5 |
RETURN num*num; |
|
6 |
END |
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/DefaultExpressionEvaluatorManager.java | ||
---|---|---|
361 | 361 |
|
362 | 362 |
} |
363 | 363 |
|
364 |
private static final Pattern RE_LANG = Pattern.compile(".*lang[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)");
|
|
365 |
private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*([a-zA-Z_][a-zA-Z_0-9]*)");
|
|
364 |
private static final Pattern RE_LANG = Pattern.compile(".*lang[:]\\s*([a-zA-Z_][a-zA-Z_0-9_]*).*");
|
|
365 |
private static final Pattern RE_ENCODING = Pattern.compile(".*encoding[:]\\s*([a-zA-Z_][a-zA-Z0-9_-]*).*");
|
|
366 | 366 |
|
367 | 367 |
private Script loadScript(ResourcesStorage.Resource res, String name) { |
368 | 368 |
try { |
... | ... | |
376 | 376 |
if( StringUtils.isEmpty(head) ) { |
377 | 377 |
return null; |
378 | 378 |
} |
379 |
head = StringUtils.split("\n")[0]; |
|
379 |
head = StringUtils.split(head, "\n")[0];
|
|
380 | 380 |
|
381 | 381 |
String lang = "cosa"; |
382 | 382 |
String encoding = null; |
383 | 383 |
Matcher m = RE_LANG.matcher(head); |
384 |
if( m.groupCount()==1 ) { |
|
384 |
if( m!=null && m.matches() && m.groupCount()==1 ) {
|
|
385 | 385 |
String s = m.group(1); |
386 | 386 |
if( !StringUtils.isBlank(s) ) { |
387 | 387 |
lang = s; |
388 | 388 |
} |
389 | 389 |
} |
390 | 390 |
m = RE_ENCODING.matcher(head); |
391 |
if( m.groupCount()==1 ) { |
|
391 |
if( m!=null && m.matches() && m.groupCount()==1 ) {
|
|
392 | 392 |
String s = m.group(1); |
393 | 393 |
if( !StringUtils.isBlank(s) ) { |
394 | 394 |
encoding = s; |
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/ExpressionEvaluatorImplLibrary.java | ||
---|---|---|
20 | 20 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
21 | 21 |
import org.gvsig.tools.library.AbstractLibrary; |
22 | 22 |
import org.gvsig.tools.library.LibraryException; |
23 |
import org.gvsig.tools.script.impl.DummyScriptManager; |
|
23 | 24 |
|
24 | 25 |
public class ExpressionEvaluatorImplLibrary extends AbstractLibrary { |
25 | 26 |
|
... | ... | |
55 | 56 |
|
56 | 57 |
dataTypesManager.setCoercion(DataTypes.EXPRESSION, new CoerceToExpression()); |
57 | 58 |
dataTypesManager.addCoercion(DataTypes.STRING,new CoerceToString()); |
59 |
|
|
60 |
ToolsLocator.registerScriptManager(DefaultExpressionEvaluatorManager.class); |
|
58 | 61 |
} |
59 | 62 |
} |
60 | 63 |
|
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/grammars/BasicGrammarFactory.java | ||
---|---|---|
191 | 191 |
.addRuleOnTrue(stmt.optional_any_token("FUNCTION", "PROCEDURE")) |
192 | 192 |
.addRuleOnFalse(stmt.optional_literal_string("SCRIPT_PATH") |
193 | 193 |
.addRuleOnTrue(stmt.require_any_token(",")) |
194 |
.addRuleOnTrue(stmt.require_identifier("SCRIPT_FUNCTION"))
|
|
194 |
.addRuleOnTrue(stmt.require_literal_string("SCRIPT_FUNCTION"))
|
|
195 | 195 |
.addRuleOnTrue(stmt.optional_any_token("LANGUAGE") |
196 | 196 |
.addRuleOnTrue(stmt.require_literal_string("LANGUAGE")) |
197 | 197 |
) |
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/function/programming/CreateFnFunction.java | ||
---|---|---|
67 | 67 |
String script_path = null; |
68 | 68 |
String script_function = null; |
69 | 69 |
String language = null; |
70 |
// name, body |
|
71 |
// name, args, body |
|
72 |
// name, script_name, script_func, lang |
|
73 |
// name, args, script_name, script_func, lang |
|
70 | 74 |
switch(args.size()) { |
71 | 75 |
case 2: |
72 | 76 |
name = (String) getObject(interpreter, args, 0); |
... | ... | |
90 | 94 |
argNames = (List<String>) getObject(interpreter, args, 1); |
91 | 95 |
} |
92 | 96 |
body = args.get(2); |
93 |
script_path = Objects.toString(args.get(2),null);
|
|
94 |
script_function = Objects.toString(args.get(3),null);
|
|
95 |
language = Objects.toString(args.get(4),null);
|
|
97 |
script_path = (args.get(3)==null)? null:((String)((Code.Constant)args.get(3)).value());
|
|
98 |
script_function = (args.get(4)==null)? null:((String)((Code.Constant)args.get(4)).value());
|
|
99 |
language = (args.get(5)==null)? null:((String)((Code.Constant)args.get(5)).value()).toLowerCase();
|
|
96 | 100 |
break; |
97 | 101 |
default: |
98 | 102 |
throw new ExpressionRuntimeException("Incorrect number of arguments"); |
... | ... | |
171 | 175 |
|
172 | 176 |
private final String script_path; |
173 | 177 |
private final String script_function; |
178 |
private final Script script; |
|
174 | 179 |
|
175 | 180 |
public ExternalFunction(String name, String script_path, String script_function) { |
176 | 181 |
super(GROUP_OTHER, name, Range.between(0, Integer.MAX_VALUE)); |
177 | 182 |
this.script_path = script_path; |
178 | 183 |
this.script_function = script_function; |
179 |
} |
|
180 |
|
|
181 |
@Override |
|
182 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
|
183 | 184 |
ScriptManager scriptManager = ToolsLocator.getScriptManager(); |
184 | 185 |
ExpressionEvaluatorManager expressionManager = ExpressionEvaluatorLocator.getExpressionEvaluatorManager(); |
185 | 186 |
ResourcesStorage resourcesStorage = expressionManager.getScriptsResourcesStorage(); |
186 |
Script sc = scriptManager.loadScript(resourcesStorage, script_path);
|
|
187 |
if( sc == null ) {
|
|
187 |
this.script = scriptManager.loadScript(resourcesStorage, script_path);
|
|
188 |
if( this.script == null ) {
|
|
188 | 189 |
throw new ExpressionRuntimeException("Can't locate '"+this.script_path+"'."); |
189 | 190 |
} |
190 |
Object r = sc.invokeFunction(this.script_function, args); |
|
191 |
} |
|
192 |
|
|
193 |
@Override |
|
194 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
|
195 |
Object r = this.script.invokeFunction(this.script_function, args); |
|
191 | 196 |
return r; |
192 | 197 |
} |
193 | 198 |
|
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/DefaultStatement.java | ||
---|---|---|
117 | 117 |
context.getLexicalAnalyzer() |
118 | 118 |
); |
119 | 119 |
} |
120 |
String identifier = (String) token.getLiteral();
|
|
120 |
String identifier = (String) token.getValue();
|
|
121 | 121 |
Code code = context.getCodeBuilder().constant(identifier); |
122 | 122 |
context.setCode(id, code); |
123 | 123 |
context.next_token(); |
... | ... | |
398 | 398 |
public void parse(StatementContext context) { |
399 | 399 |
Token token = context.look_token(); |
400 | 400 |
if (token.getType() == Token.STRING_LITERAL) { |
401 |
String s = (String) token.getLiteral();
|
|
401 |
String s = (String) token.getValue();
|
|
402 | 402 |
Code code = context.getCodeBuilder().constant(s); |
403 | 403 |
context.setCode(id, code); |
404 | 404 |
context.next_token(); |
... | ... | |
439 | 439 |
} |
440 | 440 |
} else { |
441 | 441 |
Code code = context.getCode(argName); |
442 |
if( code == null) { |
|
443 |
code = context.getCodeBuilder().constant(null); |
|
444 |
} |
|
442 |
// if( code == null) {
|
|
443 |
// code = context.getCodeBuilder().constant(null);
|
|
444 |
// }
|
|
445 | 445 |
args.add(code); |
446 | 446 |
} |
447 | 447 |
} |
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/spi/AbstractFunction.java | ||
---|---|---|
249 | 249 |
throw new IllegalArgumentException(I18N.Required_argument_XargnX_and_only_found_XargcX_in_call_to_XIdentifierX(name(), args.size(), n)); |
250 | 250 |
} |
251 | 251 |
Code arg = args.get(n); |
252 |
if( arg==null ) { |
|
253 |
return null; |
|
254 |
} |
|
252 | 255 |
Object value = interpreter.run(arg); |
253 | 256 |
return value; |
254 | 257 |
} |
Also available in: Unified diff