Revision 44389
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 | ||
---|---|---|
7 | 7 |
import org.gvsig.expressionevaluator.Expression; |
8 | 8 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
9 | 9 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
10 |
import org.gvsig.expressionevaluator.impl.javascripting.CosaScriptEngineFactory; |
|
10 | 11 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
11 | 12 |
import org.gvsig.tools.script.Script; |
12 | 13 |
|
... | ... | |
37 | 38 |
Object r; |
38 | 39 |
Script sc; |
39 | 40 |
try { |
40 |
sc = manager.createScript("test1", source, "COSA");
|
|
41 |
} catch(Exception ex) { |
|
41 |
sc = manager.createScript("test1", source, CosaScriptEngineFactory.LANGUAGE_NAME);
|
|
42 |
} catch (Exception ex) {
|
|
42 | 43 |
System.err.println(ex.getMessage()); |
43 | 44 |
throw ex; |
44 | 45 |
} |
... | ... | |
57 | 58 |
Object r; |
58 | 59 |
Script sc; |
59 | 60 |
try { |
60 |
sc = manager.createScript("test2", source, "COSA");
|
|
61 |
} catch(Exception ex) { |
|
61 |
sc = manager.createScript("test2", source, CosaScriptEngineFactory.LANGUAGE_NAME);
|
|
62 |
} catch (Exception ex) {
|
|
62 | 63 |
System.err.println(ex.getMessage()); |
63 | 64 |
throw ex; |
64 | 65 |
} |
... | ... | |
67 | 68 |
|
68 | 69 |
r = sc.invokeFunction("test2", null); |
69 | 70 |
assertEquals(" hola adios fin", r); |
70 |
|
|
71 |
|
|
72 |
} |
|
73 |
|
|
74 |
public void testScript3() throws Exception { |
|
75 |
InputStream is = this.getClass().getResource("/org/gvsig/expressionevaluator/impl/TestScript1_2.txt").openStream(); |
|
76 |
String source = StringUtils.join(IOUtils.readLines(is), "\n"); |
|
77 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
|
78 |
|
|
79 |
Object r; |
|
80 |
Script sc; |
|
81 |
try { |
|
82 |
sc = manager.createScript("test3", source, CosaScriptEngineFactory.LANGUAGE_NAME); |
|
83 |
} catch (Exception ex) { |
|
84 |
System.err.println(ex.getMessage()); |
|
85 |
throw ex; |
|
71 | 86 |
} |
87 |
r = sc.invokeFunction("test3", null); |
|
88 |
assertEquals("Hola amigos", r); |
|
89 |
|
|
90 |
r = sc.invokeFunction("saluda", new Object[] { "pato" }); |
|
91 |
assertEquals("Hola pato", r); |
|
92 |
|
|
93 |
} |
|
94 |
|
|
72 | 95 |
} |
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/TestScriptEngine.java | ||
---|---|---|
1 |
package org.gvsig.expresionevaluator.impl; |
|
2 |
|
|
3 |
import javax.script.ScriptEngine; |
|
4 |
import javax.script.ScriptEngineFactory; |
|
5 |
import javax.script.ScriptEngineManager; |
|
6 |
import junit.framework.TestCase; |
|
7 |
import org.gvsig.expressionevaluator.impl.javascripting.CosaScriptEngineFactory; |
|
8 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
|
9 |
|
|
10 |
/** |
|
11 |
* |
|
12 |
* @author jjdelcerro |
|
13 |
*/ |
|
14 |
public class TestScriptEngine extends TestCase { |
|
15 |
|
|
16 |
public TestScriptEngine(String testName) { |
|
17 |
super(testName); |
|
18 |
} |
|
19 |
|
|
20 |
@Override |
|
21 |
protected void setUp() throws Exception { |
|
22 |
super.setUp(); |
|
23 |
new DefaultLibrariesInitializer().fullInitialize(); |
|
24 |
} |
|
25 |
|
|
26 |
@Override |
|
27 |
protected void tearDown() throws Exception { |
|
28 |
super.tearDown(); |
|
29 |
} |
|
30 |
|
|
31 |
public void test1() { |
|
32 |
ScriptEngineManager engineManager = new ScriptEngineManager(); |
|
33 |
ScriptEngine engine = engineManager.getEngineByName(CosaScriptEngineFactory.ENGINE_NAME); |
|
34 |
|
|
35 |
assertNotNull("Can't locate '"+CosaScriptEngineFactory.ENGINE_NAME+" engine,", engine); |
|
36 |
|
|
37 |
assertEquals(CosaScriptEngineFactory.ENGINE_NAME, engine.getFactory().getEngineName()); |
|
38 |
} |
|
39 |
|
|
40 |
} |
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 | ||
---|---|---|
4 | 4 |
SET x ''; |
5 | 5 |
FOR n IN LIST('hola','adios','fin'): |
6 | 6 |
SET x = x || ' ' || n; |
7 |
END FOR
|
|
7 |
END |
|
8 | 8 |
RETURN x; |
9 | 9 |
END |
10 |
|
|
10 |
|
|
11 | 11 |
CREATE FUNCTION test2 AS |
12 | 12 |
$$ |
13 | 13 |
SET s ''; |
14 | 14 |
SET x TO LIST('hola','adios','fin'); |
15 | 15 |
FOR n IN RANGE(3): |
16 | 16 |
SET s = s || ' ' || x[n]; |
17 |
END FOR |
|
17 |
END FOR;
|
|
18 | 18 |
RETURN s; |
19 | 19 |
$$ |
20 |
|
|
21 |
CREATE FUNCTION saluda AS |
|
22 |
IF LEN($ARGS) > 0 THEN |
|
23 |
SET s TO 'Hola ' || $ARGS[0]; |
|
24 |
ELSE |
|
25 |
SET s = 'Hola.'; |
|
26 |
END; |
|
27 |
PRINT(s); |
|
28 |
RETURN s; |
|
29 |
END |
|
30 |
|
|
31 |
CREATE FUNCTION test3 AS |
|
32 |
RETURN saluda('amigos'); |
|
33 |
END |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/resources/org/gvsig/scripting/langs/cosa/new_template.txt | ||
---|---|---|
1 |
-- encoding: utf-8; language: cosa |
|
2 |
|
|
3 |
CREATE FUNCTION main AS |
|
4 |
PRINT('Hello world!'); |
|
5 |
END |
|
6 |
|
|
7 |
|
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory | ||
---|---|---|
1 |
org.gvsig.expressionevaluator.impl.javascripting.CosaScriptEngineFactory |
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/DefaultCodeBuilder.java | ||
---|---|---|
4 | 4 |
import java.util.Collections; |
5 | 5 |
import java.util.Iterator; |
6 | 6 |
import java.util.List; |
7 |
import org.apache.commons.lang3.ObjectUtils; |
|
7 | 8 |
import org.apache.commons.lang3.StringUtils; |
8 | 9 |
import org.gvsig.expressionevaluator.Code; |
9 | 10 |
import static org.gvsig.expressionevaluator.Code.CALLER; |
... | ... | |
50 | 51 |
import org.gvsig.expressionevaluator.impl.function.programming.GetattrFunction; |
51 | 52 |
import org.gvsig.expressionevaluator.impl.function.programming.GetitemFunction; |
52 | 53 |
import org.gvsig.fmap.geom.Geometry; |
54 |
import org.gvsig.tools.dynobject.DynObject; |
|
55 |
import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException; |
|
53 | 56 |
import org.gvsig.tools.exception.BaseException; |
57 |
import org.gvsig.tools.script.Script; |
|
54 | 58 |
import org.gvsig.tools.visitor.Visitor; |
55 | 59 |
|
56 | 60 |
@SuppressWarnings("UseSpecificCatch") |
... | ... | |
557 | 561 |
@Override |
558 | 562 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
559 | 563 |
Object theInstance = interpreter.run(instance); |
564 |
if( theInstance instanceof SimpleScript ) { |
|
565 |
try { |
|
566 |
return ((SimpleScript)theInstance).invokeFunction(methodname, args); |
|
567 |
} catch(NoSuchMethodException ex) { |
|
568 |
// Ignore... continue calling instance method |
|
569 |
} |
|
570 |
} else if( theInstance instanceof DynObject ) { |
|
571 |
DynObject dynobj = (DynObject) theInstance; |
|
572 |
try { |
|
573 |
return dynobj.invokeDynMethod(methodname, args); |
|
574 |
} catch(DynMethodNotSupportedException ex) { |
|
575 |
// Ignore... continue calling instance method |
|
576 |
} |
|
577 |
} |
|
560 | 578 |
return InstanceUtils.callmethod(theInstance, methodname, args); |
561 | 579 |
} |
562 | 580 |
|
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 | ||
---|---|---|
20 | 20 |
import org.gvsig.expressionevaluator.impl.function.programming.CodeBlockWithExceptFunction; |
21 | 21 |
import org.gvsig.expressionevaluator.impl.function.programming.CreateFnFunction; |
22 | 22 |
import org.gvsig.expressionevaluator.impl.function.programming.ForEachFunction; |
23 |
import org.gvsig.expressionevaluator.impl.function.programming.ListFunction; |
|
24 | 23 |
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction; |
25 | 24 |
import org.gvsig.expressionevaluator.impl.function.programming.WhileFunction; |
26 | 25 |
import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory; |
... | ... | |
63 | 62 |
} |
64 | 63 |
|
65 | 64 |
@Override |
66 |
public Grammar createGrammar() {
|
|
65 |
public Grammar create(Object... parameters) {
|
|
67 | 66 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
68 | 67 |
if( this.grammar==null ) { |
69 | 68 |
Grammar theGrammar = manager.createGrammar(this.getName()); |
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 | ||
---|---|---|
9 | 9 |
import org.gvsig.expressionevaluator.impl.coercion.CoerceToString; |
10 | 10 |
import org.gvsig.expressionevaluator.impl.grammars.BasicGrammarFactory; |
11 | 11 |
import org.gvsig.expressionevaluator.impl.symboltable.BasicImageSymbolTableFactory; |
12 |
import org.gvsig.expressionevaluator.impl.symboltable.FoldersSymbolTableFactory; |
|
12 | 13 |
import org.gvsig.expressionevaluator.impl.symboltable.OGCSymbolTableFactory; |
13 | 14 |
import org.gvsig.expressionevaluator.impl.symboltable.ProgrammingSymbolTableFactory; |
14 | 15 |
import org.gvsig.expressionevaluator.impl.symboltable.SQLSymbolTableFactory; |
... | ... | |
44 | 45 |
manager.registerSymbolTable(new UtilsSymbolTableFactory()); |
45 | 46 |
manager.registerSymbolTable(new BasicImageSymbolTableFactory()); |
46 | 47 |
manager.registerSymbolTable(new ProgrammingSymbolTableFactory()); |
48 |
manager.registerSymbolTable(new FoldersSymbolTableFactory()); |
|
47 | 49 |
|
48 | 50 |
manager.registerGrammar(new BasicGrammarFactory()); |
49 | 51 |
|
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/symboltable/OGCSymbolTableFactory.java | ||
---|---|---|
16 | 16 |
} |
17 | 17 |
|
18 | 18 |
@Override |
19 |
public SymbolTable createSymbolTable(Object... args) {
|
|
19 |
public SymbolTable create(Object... args) { |
|
20 | 20 |
if( this.symbolTable==null ) { |
21 | 21 |
this.symbolTable = new OGCSymbolTable(); |
22 | 22 |
} |
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/symboltable/FoldersSymbolTableFactory.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.symboltable; |
|
2 |
|
|
3 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
4 |
import org.gvsig.expressionevaluator.spi.AbstractSymbolTableFactory; |
|
5 |
|
|
6 |
/** |
|
7 |
* |
|
8 |
* @author jjdelcerro |
|
9 |
*/ |
|
10 |
public class FoldersSymbolTableFactory extends AbstractSymbolTableFactory { |
|
11 |
|
|
12 |
private SymbolTable symbolTable; |
|
13 |
|
|
14 |
public FoldersSymbolTableFactory() { |
|
15 |
super(FoldersSymbolTable.NAME, true); |
|
16 |
} |
|
17 |
|
|
18 |
@Override |
|
19 |
public SymbolTable create(Object... args) { |
|
20 |
if( this.symbolTable==null ) { |
|
21 |
this.symbolTable = new FoldersSymbolTable(); |
|
22 |
} |
|
23 |
return this.symbolTable; |
|
24 |
} |
|
25 |
|
|
26 |
} |
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/symboltable/SQLSymbolTableFactory.java | ||
---|---|---|
16 | 16 |
} |
17 | 17 |
|
18 | 18 |
@Override |
19 |
public SymbolTable createSymbolTable(Object... args) {
|
|
19 |
public SymbolTable create(Object... args) { |
|
20 | 20 |
if( this.symbolTable==null ) { |
21 | 21 |
this.symbolTable = new SQLSymbolTable(); |
22 | 22 |
} |
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/symboltable/UtilsSymbolTableFactory.java | ||
---|---|---|
16 | 16 |
} |
17 | 17 |
|
18 | 18 |
@Override |
19 |
public SymbolTable createSymbolTable(Object... args) {
|
|
19 |
public SymbolTable create(Object... args) { |
|
20 | 20 |
if( this.symbolTable==null ) { |
21 | 21 |
this.symbolTable = new UtilsSymbolTable(); |
22 | 22 |
} |
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/symboltable/ProgrammingSymbolTableFactory.java | ||
---|---|---|
16 | 16 |
} |
17 | 17 |
|
18 | 18 |
@Override |
19 |
public SymbolTable createSymbolTable(Object... args) {
|
|
19 |
public SymbolTable create(Object... args) { |
|
20 | 20 |
if( this.symbolTable==null ) { |
21 | 21 |
this.symbolTable = new ProgrammingSymbolTable(); |
22 | 22 |
} |
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/symboltable/BasicImageSymbolTableFactory.java | ||
---|---|---|
16 | 16 |
} |
17 | 17 |
|
18 | 18 |
@Override |
19 |
public SymbolTable createSymbolTable(Object... args) {
|
|
19 |
public SymbolTable create(Object... args) { |
|
20 | 20 |
if( this.symbolTable==null ) { |
21 | 21 |
this.symbolTable = new BasicImageSymbolTable(); |
22 | 22 |
} |
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/symboltable/FoldersSymbolTable.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.symboltable; |
|
2 |
|
|
3 |
import org.gvsig.expressionevaluator.Function; |
|
4 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.GetFolderFunction; |
|
5 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.HomeFunction; |
|
6 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.LastPathFunction; |
|
7 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.SetFolderFunction; |
|
8 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.SetLastPathFunction; |
|
9 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.SetTemporaryFolderFunction; |
|
10 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.TemporaryFileFunction; |
|
11 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.TemporaryFolderFunction; |
|
12 |
import org.gvsig.expressionevaluator.impl.function.foldersmanager.UniqueTemporaryFileFunction; |
|
13 |
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable; |
|
14 |
|
|
15 |
/** |
|
16 |
* |
|
17 |
* @author jjdelcerro |
|
18 |
*/ |
|
19 |
public class FoldersSymbolTable extends AbstractSymbolTable { |
|
20 |
static final String NAME = "Folders"; |
|
21 |
|
|
22 |
@SuppressWarnings("OverridableMethodCallInConstructor") |
|
23 |
public FoldersSymbolTable() { |
|
24 |
super(NAME); |
|
25 |
|
|
26 |
this.addFunction(new GetFolderFunction()); |
|
27 |
|
|
28 |
this.addFunction(new HomeFunction()); |
|
29 |
this.addFunction(new LastPathFunction()); |
|
30 |
this.addFunction(new SetFolderFunction()); |
|
31 |
this.addFunction(new SetLastPathFunction()); |
|
32 |
this.addFunction(new SetTemporaryFolderFunction()); |
|
33 |
this.addFunction(new TemporaryFileFunction()); |
|
34 |
this.addFunction(new TemporaryFolderFunction()); |
|
35 |
this.addFunction(new UniqueTemporaryFileFunction()); |
|
36 |
} |
|
37 |
|
|
38 |
private void addOperator(Function operator) { |
|
39 |
this.addFunction(operator); |
|
40 |
} |
|
41 |
|
|
42 |
} |
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/foldersmanager/SetFolderFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class SetFolderFunction extends AbstractFunction { |
|
11 |
|
|
12 |
|
|
13 |
public static final String NAME = "SETFOLDER"; |
|
14 |
|
|
15 |
public SetFolderFunction() { |
|
16 |
super( |
|
17 |
"Folders", |
|
18 |
NAME, |
|
19 |
Range.is(2), |
|
20 |
"Set the folder associated to the id. Return the new value set to the folder.", |
|
21 |
NAME+"({{folderid}}, value)", |
|
22 |
new String[] { |
|
23 |
"folderid - Identifier of the folder to set", |
|
24 |
"value - value set to the folder." |
|
25 |
}, |
|
26 |
"File", |
|
27 |
false |
|
28 |
); |
|
29 |
} |
|
30 |
|
|
31 |
|
|
32 |
@Override |
|
33 |
public boolean allowConstantFolding() { |
|
34 |
return false; |
|
35 |
} |
|
36 |
|
|
37 |
@Override |
|
38 |
public Object call(Interpreter interpreter, Object[] args) { |
|
39 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
40 |
String id = getStr(args, 0); |
|
41 |
File value = getFile(args,1); |
|
42 |
folderManager.set(id, value); |
|
43 |
return value; |
|
44 |
} |
|
45 |
} |
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/foldersmanager/HomeFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class HomeFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "HOME"; |
|
13 |
|
|
14 |
public HomeFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.is(0), |
|
19 |
"Return the folder user home", |
|
20 |
NAME+"()", |
|
21 |
null, |
|
22 |
"File", |
|
23 |
false |
|
24 |
); |
|
25 |
} |
|
26 |
|
|
27 |
|
|
28 |
@Override |
|
29 |
public boolean allowConstantFolding() { |
|
30 |
return false; |
|
31 |
} |
|
32 |
|
|
33 |
@Override |
|
34 |
public Object call(Interpreter interpreter, Object[] args) { |
|
35 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
36 |
File f = folderManager.getHome(); |
|
37 |
return f; |
|
38 |
} |
|
39 |
} |
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/foldersmanager/UniqueTemporaryFileFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class UniqueTemporaryFileFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "UNIQUETEMPORARYFILE"; |
|
13 |
|
|
14 |
public UniqueTemporaryFileFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.between(1,1000), |
|
19 |
"Return a unique file with the specified relative path to the temporary folder.\n" + |
|
20 |
"The base name of the file is modified to be unique.\n" + |
|
21 |
"The file will be deleted when the application exits.\n" + |
|
22 |
" "+NAME+"('folder','name.txt')\n", |
|
23 |
"For this call, the return value will have the form:\n" + |
|
24 |
" <PATH>/folder/name-<HEX1>-<HEX2>.txt" + |
|
25 |
NAME+"({{pathComponents...}})", |
|
26 |
new String[] { |
|
27 |
"pathComponents - relative pathname" |
|
28 |
}, |
|
29 |
"File", |
|
30 |
false |
|
31 |
); |
|
32 |
} |
|
33 |
|
|
34 |
@Override |
|
35 |
public boolean allowConstantFolding() { |
|
36 |
return false; |
|
37 |
} |
|
38 |
|
|
39 |
@Override |
|
40 |
public Object call(Interpreter interpreter, Object[] args) { |
|
41 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
42 |
String[] pathComponents = new String[args.length]; |
|
43 |
for (int i = 0; i < args.length; i++) { |
|
44 |
pathComponents[i] = getStr(args,i); |
|
45 |
} |
|
46 |
File f = folderManager.getUniqueTemporaryFile(pathComponents); |
|
47 |
return f; |
|
48 |
} |
|
49 |
} |
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/foldersmanager/SetTemporaryFolderFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class SetTemporaryFolderFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "SETTEMPORARYFOLDER"; |
|
13 |
|
|
14 |
public SetTemporaryFolderFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.is(1), |
|
19 |
"Assign the folder to use as a temporary folder for the application. Be careful, it can affect other parts of it. Return the new value set.", |
|
20 |
NAME+"({{folder}})", |
|
21 |
new String[] { |
|
22 |
"folder - Folder to set as temporary folder" |
|
23 |
}, |
|
24 |
"File", |
|
25 |
false |
|
26 |
); |
|
27 |
} |
|
28 |
|
|
29 |
@Override |
|
30 |
public boolean allowConstantFolding() { |
|
31 |
return false; |
|
32 |
} |
|
33 |
|
|
34 |
@Override |
|
35 |
public Object call(Interpreter interpreter, Object[] args) { |
|
36 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
37 |
File value = getFile(args,0); |
|
38 |
folderManager.setTemporaryFolder(value); |
|
39 |
return value; |
|
40 |
} |
|
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/function/foldersmanager/GetFolderFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class GetFolderFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "GETFOLDER"; |
|
13 |
|
|
14 |
public GetFolderFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.between(1,2), |
|
19 |
"Get a folder by id", |
|
20 |
NAME+"({{folderid}}, defaultValue)", |
|
21 |
new String[] { |
|
22 |
"folderid - Identifier of the folder to retrieve", |
|
23 |
"defaultValue - Optional. value to get if the folder with id 'folderid' is not defined." |
|
24 |
}, |
|
25 |
"File", |
|
26 |
false |
|
27 |
); |
|
28 |
} |
|
29 |
|
|
30 |
@Override |
|
31 |
public boolean allowConstantFolding() { |
|
32 |
return false; |
|
33 |
} |
|
34 |
|
|
35 |
@Override |
|
36 |
public Object call(Interpreter interpreter, Object[] args) { |
|
37 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
38 |
String id = getStr(args, 0); |
|
39 |
File defaultValue = null; |
|
40 |
if( args.length==2 ) { |
|
41 |
defaultValue = getFile(args,1); |
|
42 |
} |
|
43 |
File f = folderManager.get(id, defaultValue); |
|
44 |
return f; |
|
45 |
} |
|
46 |
} |
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/foldersmanager/SetLastPathFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class SetLastPathFunction extends AbstractFunction { |
|
11 |
|
|
12 |
|
|
13 |
public static final String NAME = "SETLASTPATH"; |
|
14 |
|
|
15 |
public SetLastPathFunction() { |
|
16 |
super( |
|
17 |
"Folders", |
|
18 |
NAME, |
|
19 |
Range.is(2), |
|
20 |
"Assigns the last value used to the indicated folder. Return the new value set to the folder.", |
|
21 |
NAME+"({{folderid}}, value)", |
|
22 |
new String[] { |
|
23 |
"folderid - Identifier of the folder to set", |
|
24 |
"value - Value to be assigned as the last used folder associated with the indicated identifier.." |
|
25 |
}, |
|
26 |
"File", |
|
27 |
false |
|
28 |
); |
|
29 |
} |
|
30 |
|
|
31 |
@Override |
|
32 |
public boolean allowConstantFolding() { |
|
33 |
return false; |
|
34 |
} |
|
35 |
|
|
36 |
@Override |
|
37 |
public Object call(Interpreter interpreter, Object[] args) { |
|
38 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
39 |
String id = getStr(args, 0); |
|
40 |
File value = getFile(args,1); |
|
41 |
folderManager.setLastPath(id, value); |
|
42 |
return value; |
|
43 |
} |
|
44 |
} |
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/foldersmanager/TemporaryFolderFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class TemporaryFolderFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "TEMPORARYFOLDER"; |
|
13 |
|
|
14 |
public TemporaryFolderFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.is(0), |
|
19 |
"Return the file associated to the temporary folder of the application.\n" + |
|
20 |
"The file can't exits.", |
|
21 |
NAME+"()", |
|
22 |
null, |
|
23 |
"File", |
|
24 |
false |
|
25 |
); |
|
26 |
} |
|
27 |
|
|
28 |
@Override |
|
29 |
public boolean allowConstantFolding() { |
|
30 |
return false; |
|
31 |
} |
|
32 |
|
|
33 |
@Override |
|
34 |
public Object call(Interpreter interpreter, Object[] args) { |
|
35 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
36 |
File f = folderManager.getTemporaryFolder(); |
|
37 |
return f; |
|
38 |
} |
|
39 |
} |
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/foldersmanager/LastPathFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class LastPathFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "LASTPATH"; |
|
13 |
|
|
14 |
public LastPathFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.between(1,2), |
|
19 |
"Retrieve the last value used to the indicated folder.", |
|
20 |
NAME+"({{folderid}}, defaultValue)", |
|
21 |
new String[] { |
|
22 |
"folderid - Identifier of the folder to retrieve", |
|
23 |
"defaultValue - Optional. value to get if the folder with id 'folderid' is not defined." |
|
24 |
}, |
|
25 |
"File", |
|
26 |
false |
|
27 |
); |
|
28 |
} |
|
29 |
|
|
30 |
|
|
31 |
@Override |
|
32 |
public boolean allowConstantFolding() { |
|
33 |
return false; |
|
34 |
} |
|
35 |
|
|
36 |
@Override |
|
37 |
public Object call(Interpreter interpreter, Object[] args) { |
|
38 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
39 |
String id = getStr(args, 0); |
|
40 |
File defaultValue = getFile(args,1); |
|
41 |
File f = folderManager.getLastPath(id, defaultValue); |
|
42 |
return f; |
|
43 |
} |
|
44 |
} |
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/foldersmanager/TemporaryFileFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.foldersmanager; |
|
2 |
|
|
3 |
import java.io.File; |
|
4 |
import org.apache.commons.lang3.Range; |
|
5 |
import org.gvsig.expressionevaluator.Interpreter; |
|
6 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
7 |
import org.gvsig.tools.ToolsLocator; |
|
8 |
import org.gvsig.tools.folders.FoldersManager; |
|
9 |
|
|
10 |
public class TemporaryFileFunction extends AbstractFunction { |
|
11 |
|
|
12 |
public static final String NAME = "TEMPORARYFILE"; |
|
13 |
|
|
14 |
public TemporaryFileFunction() { |
|
15 |
super( |
|
16 |
"Folders", |
|
17 |
NAME, |
|
18 |
Range.between(1, 1000), |
|
19 |
"Return a file with the specified relative path to the temporary folder.\n" + |
|
20 |
"The file will be deleted when the application exits.\n" + |
|
21 |
" "+NAME+"('folder','name.txt')", |
|
22 |
NAME+"({{pathComponents...}})", |
|
23 |
new String[] { |
|
24 |
"pathComponents - relative pathname" |
|
25 |
}, |
|
26 |
"File", |
|
27 |
false |
|
28 |
); |
|
29 |
} |
|
30 |
|
|
31 |
@Override |
|
32 |
public boolean allowConstantFolding() { |
|
33 |
return false; |
|
34 |
} |
|
35 |
|
|
36 |
@Override |
|
37 |
public Object call(Interpreter interpreter, Object[] args) { |
|
38 |
FoldersManager folderManager = ToolsLocator.getFoldersManager(); |
|
39 |
String[] pathComponents = new String[args.length]; |
|
40 |
for (int i = 0; i < args.length; i++) { |
|
41 |
pathComponents[i] = getStr(args,i); |
|
42 |
} |
|
43 |
File f = folderManager.getTemporaryFile(pathComponents); |
|
44 |
return f; |
|
45 |
} |
|
46 |
} |
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/PrintFunction.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl.function.programming; |
2 | 2 |
|
3 |
import java.io.Writer; |
|
3 | 4 |
import java.util.Objects; |
4 | 5 |
import org.apache.commons.lang3.Range; |
5 | 6 |
import org.gvsig.expressionevaluator.Function; |
... | ... | |
29 | 30 |
|
30 | 31 |
@Override |
31 | 32 |
public Object call(Interpreter interpreter, Object[] args) throws Exception { |
33 |
Writer writer = interpreter.getWriter(); |
|
32 | 34 |
Object value = null; |
33 | 35 |
for (Object arg : args) { |
34 | 36 |
value = arg; |
35 |
System.out.print(Objects.toString(arg, ""));
|
|
37 |
writer.append(Objects.toString(arg, ""));
|
|
36 | 38 |
} |
37 |
System.out.println(); |
|
39 |
writer.append("\n"); |
|
40 |
writer.flush(); |
|
38 | 41 |
return value; |
39 | 42 |
} |
40 | 43 |
} |
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 | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl.function.programming; |
2 | 2 |
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.Arrays; |
|
3 | 5 |
import java.util.List; |
4 | 6 |
import org.apache.commons.lang3.Range; |
5 | 7 |
import org.gvsig.expressionevaluator.Code; |
... | ... | |
12 | 14 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
13 | 15 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
14 | 16 |
import org.gvsig.expressionevaluator.SymbolTable; |
15 |
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException; |
|
16 | 17 |
|
17 | 18 |
public class CreateFnFunction extends AbstractFunction { |
18 | 19 |
|
... | ... | |
96 | 97 |
Object value; |
97 | 98 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
98 | 99 |
MutableSymbolTable localSymbolTable = manager.createSymbolTable(); |
100 |
|
|
101 |
List $args = new ArrayList(); |
|
102 |
if( args != null ) { |
|
103 |
$args.addAll(Arrays.asList(args)); |
|
104 |
} |
|
105 |
localSymbolTable.setVar("$ARGS", $args); |
|
106 |
|
|
99 | 107 |
int max; |
100 | 108 |
if( this.argNames==null ) { |
101 | 109 |
max = 0; |
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/DefaultInterpreter.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl; |
2 | 2 |
|
3 |
import java.io.OutputStreamWriter; |
|
4 |
import java.io.Writer; |
|
3 | 5 |
import java.util.ArrayList; |
4 | 6 |
import java.util.Comparator; |
5 | 7 |
import java.util.Date; |
... | ... | |
18 | 20 |
import org.gvsig.expressionevaluator.Codes; |
19 | 21 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
20 | 22 |
import org.gvsig.expressionevaluator.Function; |
23 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
21 | 24 |
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.RecursionControlSupport; |
22 | 25 |
import org.gvsig.expressionevaluator.impl.function.operator.BinaryOperator; |
23 | 26 |
import org.gvsig.expressionevaluator.impl.function.operator.UnaryOperator; |
24 | 27 |
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException; |
25 | 28 |
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable; |
29 |
import org.gvsig.tools.resourcesstorage.ResourcesStorage; |
|
26 | 30 |
|
27 | 31 |
public class DefaultInterpreter implements Interpreter { |
28 | 32 |
|
... | ... | |
89 | 93 |
private Cache cache; |
90 | 94 |
private int maxRecursionLimit; |
91 | 95 |
private boolean sqlCompatible = false; |
96 |
private Writer writer ; |
|
97 |
private ResourcesStorage resourcesStorage; |
|
92 | 98 |
|
93 | 99 |
public DefaultInterpreter() { |
94 | 100 |
this.cache = new DefaultCache(); |
95 | 101 |
this.maxRecursionLimit = DEFAULT_MAX_RECURSION_LIMIT; |
102 |
this.writer = new OutputStreamWriter(System.out); |
|
103 |
this.resourcesStorage = ResourcesStorage.EMPTY_RESOURCESSTORAGE; |
|
96 | 104 |
} |
97 | 105 |
|
98 | 106 |
@Override |
... | ... | |
104 | 112 |
} |
105 | 113 |
return other; |
106 | 114 |
} |
115 |
|
|
116 |
@Override |
|
117 |
public ResourcesStorage getResourcesStorage() { |
|
118 |
return resourcesStorage; |
|
119 |
} |
|
120 |
|
|
121 |
@Override |
|
122 |
public void setResourcesStorage(ResourcesStorage resourcesStorage) { |
|
123 |
if( resourcesStorage==null ) { |
|
124 |
this.resourcesStorage = ResourcesStorage.EMPTY_RESOURCESSTORAGE; |
|
125 |
} else { |
|
126 |
this.resourcesStorage = resourcesStorage; |
|
127 |
} |
|
128 |
} |
|
107 | 129 |
|
108 | 130 |
@Override |
131 |
public Writer getWriter() { |
|
132 |
return this.writer; |
|
133 |
} |
|
134 |
|
|
135 |
@Override |
|
136 |
public void setWriter(Writer writer) { |
|
137 |
if( writer == null ) { |
|
138 |
writer = new OutputStreamWriter(System.out); |
|
139 |
} |
|
140 |
this.writer = writer; |
|
141 |
} |
|
142 |
|
|
143 |
@Override |
|
144 |
public Object call(SymbolTable symbolTable, String funcname, Object... args) throws Exception { |
|
145 |
SymbolTable savedSymbolTable = this.symbolTable; |
|
146 |
try { |
|
147 |
symbolTable.addSymbolTable(this.symbolTable); |
|
148 |
this.symbolTable = symbolTable; |
|
149 |
return this.call(funcname, args); |
|
150 |
} finally { |
|
151 |
this.symbolTable = savedSymbolTable; |
|
152 |
symbolTable.removeSymbolTable(this.symbolTable); |
|
153 |
} |
|
154 |
} |
|
155 |
|
|
156 |
@Override |
|
109 | 157 |
public Object call(String function, Object... args) throws Exception { |
110 | 158 |
Function fn = this.symbolTable.function(function); |
111 | 159 |
Object value = fn.call(this, args); |
... | ... | |
114 | 162 |
|
115 | 163 |
@Override |
116 | 164 |
public boolean hasFunction(String function) { |
117 |
Function fn = this.symbolTable.function(function);
|
|
165 |
Function fn = this.getSymbolTable().function(function);
|
|
118 | 166 |
if( fn == null ) { |
119 | 167 |
return false; |
120 | 168 |
} |
... | ... | |
170 | 218 |
} |
171 | 219 |
|
172 | 220 |
@Override |
221 |
public void run(MutableSymbolTable symbolTable, Code code) { |
|
222 |
SymbolTable savedSymbolTable = this.symbolTable; |
|
223 |
try { |
|
224 |
symbolTable.addSymbolTable(this.symbolTable); |
|
225 |
this.symbolTable = symbolTable; |
|
226 |
this.run(code); |
|
227 |
} finally { |
|
228 |
this.symbolTable = savedSymbolTable; |
|
229 |
symbolTable.removeSymbolTable(this.symbolTable); |
|
230 |
} |
|
231 |
} |
|
232 |
|
|
233 |
@Override |
|
173 | 234 |
public Object run(Code code) { |
174 | 235 |
try { |
175 | 236 |
return this.runCode(code); |
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/SimpleScript.java | ||
---|---|---|
9 | 9 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
10 | 10 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
11 | 11 |
import org.gvsig.expressionevaluator.Function; |
12 |
import org.gvsig.expressionevaluator.Interpreter; |
|
13 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
12 | 14 |
import org.gvsig.expressionevaluator.SymbolTable; |
13 | 15 |
import org.gvsig.tools.script.Script; |
14 | 16 |
|
... | ... | |
20 | 22 |
|
21 | 23 |
private final String name; |
22 | 24 |
private String source; |
23 |
private DefaultInterpreter interpreter;
|
|
25 |
private Interpreter interpreter; |
|
24 | 26 |
private List<String> names; |
27 |
private final MutableSymbolTable symbolTable; |
|
25 | 28 |
|
26 |
public SimpleScript(String name, String source) { |
|
29 |
public SimpleScript(Interpreter interpreter, String name, String source) { |
|
30 |
this.interpreter = interpreter; |
|
27 | 31 |
this.name = name; |
28 |
this.setCode(source); |
|
32 |
this.symbolTable = ExpressionEvaluatorLocator.getManager().createSymbolTable(); |
|
33 |
this.setCode(source); |
|
29 | 34 |
} |
30 | 35 |
|
36 |
public MutableSymbolTable getSymbolTable() { |
|
37 |
return this.symbolTable; |
|
38 |
} |
|
39 |
|
|
31 | 40 |
@Override |
32 | 41 |
public String getName() { |
33 | 42 |
return this.name; |
... | ... | |
50 | 59 |
|
51 | 60 |
@Override |
52 | 61 |
public void put(String name, Object value) { |
53 |
DefaultSymbolTable symbolTable = (DefaultSymbolTable) this.interpreter.getSymbolTable(); |
|
54 |
symbolTable.setVar(name, value); |
|
62 |
this.symbolTable.setVar(name, value); |
|
55 | 63 |
} |
56 | 64 |
|
57 | 65 |
@Override |
58 | 66 |
public Object invokeFunction(String funcname, Object[] args) throws NoSuchMethodException { |
59 |
if( !this.interpreter.hasFunction(funcname) ) { |
|
60 |
throw new NoSuchMethodException(funcname); |
|
67 |
if( this.symbolTable.function(funcname)==null ) { |
|
68 |
if( !this.interpreter.hasFunction(funcname) ) { |
|
69 |
throw new NoSuchMethodException(funcname); |
|
70 |
} |
|
61 | 71 |
} |
62 | 72 |
try { |
63 |
return this.interpreter.call(funcname, args); |
|
73 |
return this.interpreter.call(this.symbolTable, funcname, args);
|
|
64 | 74 |
} catch (Exception ex) { |
65 | 75 |
throw new ExpressionRuntimeException(this.interpreter.getCurrentCode(),"Error calling funcion '"+funcname+"'.", ex); |
66 | 76 |
} |
... | ... | |
71 | 81 |
this.source = source; |
72 | 82 |
this.names = null; |
73 | 83 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
74 |
this.interpreter = new DefaultInterpreter(); |
|
75 | 84 |
Code code = manager.compile(source); |
76 |
this.interpreter.run(code); |
|
85 |
this.interpreter.run(this.symbolTable, code);
|
|
77 | 86 |
} |
78 | 87 |
|
79 | 88 |
@Override |
80 | 89 |
public List<String> getNames() { |
81 | 90 |
if( this.names == null ) { |
82 | 91 |
List<String> theNames = new ArrayList<>(); |
83 |
SymbolTable symbolTable = this.interpreter.getSymbolTable(); |
|
84 |
Collection<Function> funcs = symbolTable.localfunctions(); |
|
92 |
Collection<Function> funcs = this.symbolTable.localfunctions(); |
|
85 | 93 |
if( funcs!=null ) { |
86 | 94 |
for (Function function : funcs) { |
87 | 95 |
theNames.add(function.name()); |
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 | ||
---|---|---|
1 | 1 |
package org.gvsig.expressionevaluator.impl; |
2 | 2 |
|
3 | 3 |
import java.io.InputStream; |
4 |
import java.io.StringWriter; |
|
4 | 5 |
import java.net.URI; |
5 | 6 |
import java.net.URL; |
6 | 7 |
import org.gvsig.expressionevaluator.Grammar; |
... | ... | |
8 | 9 |
import java.util.Collection; |
9 | 10 |
import java.util.HashMap; |
10 | 11 |
import java.util.Map; |
12 |
import java.util.Objects; |
|
11 | 13 |
import org.apache.commons.io.FilenameUtils; |
12 | 14 |
import org.apache.commons.io.IOUtils; |
15 |
import org.apache.commons.lang3.ArrayUtils; |
|
16 |
import org.apache.commons.lang3.StringUtils; |
|
13 | 17 |
import org.gvsig.expressionevaluator.Bookmarks; |
14 | 18 |
import org.gvsig.expressionevaluator.Code; |
15 | 19 |
import org.gvsig.expressionevaluator.CodeBuilder; |
... | ... | |
25 | 29 |
import org.gvsig.expressionevaluator.Compiler; |
26 | 30 |
import org.gvsig.expressionevaluator.GrammarSet; |
27 | 31 |
import org.gvsig.expressionevaluator.History; |
32 |
import org.gvsig.expressionevaluator.impl.javascripting.CosaScriptEngineFactory; |
|
28 | 33 |
import org.gvsig.tools.script.Script; |
29 | 34 |
import org.slf4j.Logger; |
30 | 35 |
import org.slf4j.LoggerFactory; |
... | ... | |
55 | 60 |
if( factory == null ) { |
56 | 61 |
return null; |
57 | 62 |
} |
58 |
return factory.createSymbolTable();
|
|
63 |
return factory.create(); |
|
59 | 64 |
} |
60 | 65 |
|
61 | 66 |
@Override |
... | ... | |
78 | 83 |
Code code = compiler.compileExpression(source); |
79 | 84 |
return interpreter.run(code); |
80 | 85 |
} |
81 |
|
|
86 |
|
|
82 | 87 |
@Override |
83 | 88 |
public Object evaluate(SymbolTable symbolTable, String source) { |
84 | 89 |
DefaultInterpreter interpreter = new DefaultInterpreter(); |
... | ... | |
96 | 101 |
} |
97 | 102 |
|
98 | 103 |
@Override |
104 |
public String evaluatePage(String source) { |
|
105 |
return evaluatePage(null, source); |
|
106 |
} |
|
107 |
|
|
108 |
@Override |
|
109 |
public String evaluatePage(SymbolTable symbolTable, String source) { |
|
110 |
String[] sources = StringUtils.substringsBetween(source, "<%", "%>"); |
|
111 |
if( ArrayUtils.isEmpty(sources) ) { |
|
112 |
return source; |
|
113 |
} |
|
114 |
String[] values = new String[sources.length]; |
|
115 |
|
|
116 |
DefaultInterpreter interpreter = new DefaultInterpreter(); |
|
117 |
if( symbolTable!=null ) { |
|
118 |
interpreter.setSymbolTable(symbolTable); |
|
119 |
} |
|
120 |
StringWriter writer = new StringWriter(); |
|
121 |
interpreter.setWriter(writer); |
|
122 |
DefaultCompiler compiler = new DefaultCompiler(); |
|
123 |
for (int i = 0; i < sources.length; i++) { |
|
124 |
String theSource = sources[i]; |
|
125 |
if( StringUtils.startsWith(theSource, "=") ) { |
|
126 |
Code code = compiler.compileExpression(theSource.substring(1)); |
|
127 |
Object value = interpreter.run(code); |
|
128 |
values[i] = Objects.toString(value, ""); |
|
129 |
} else { |
|
130 |
Code code = compiler.compileExpression(theSource.substring(1)); |
|
131 |
writer.getBuffer().setLength(0); |
|
132 |
interpreter.run(code); |
|
133 |
values[i] = writer.toString(); |
|
134 |
} |
|
135 |
} |
|
136 |
String output = StringUtils.replaceEach(source, sources, values); |
|
137 |
return output; |
|
138 |
} |
|
139 |
|
|
140 |
@Override |
|
99 | 141 |
public Code compile(String source) { |
100 | 142 |
Compiler compiler = this.createCompiler(); |
101 | 143 |
return compiler.compileExpression(source); |
... | ... | |
123 | 165 |
public void populateSymbolTable(SymbolTable aSymbolTable) { |
124 | 166 |
for (SymbolTableFactory factory : this.getSymbolTableFactories() ) { |
125 | 167 |
if( factory.isAutoload() ) { |
126 |
SymbolTable symbolTable = factory.createSymbolTable();
|
|
168 |
SymbolTable symbolTable = factory.create(); |
|
127 | 169 |
aSymbolTable.addSymbolTable(symbolTable); |
128 | 170 |
} |
129 | 171 |
} |
... | ... | |
196 | 238 |
GrammarSet grammarSet = compiler.getGrammars(); |
197 | 239 |
for (GrammarFactory factory : this.getGrammarFactories() ) { |
198 | 240 |
if( factory.isAutoload() ) { |
199 |
Grammar grammar = factory.createGrammar();
|
|
241 |
Grammar grammar = factory.create(); |
|
200 | 242 |
grammarSet.add(grammar); |
201 | 243 |
} |
202 | 244 |
} |
... | ... | |
226 | 268 |
|
227 | 269 |
@Override |
228 | 270 |
public Script createScript(String name, String code, String languaje) { |
229 |
SimpleScript sc = new SimpleScript(name, code); |
|
271 |
SimpleScript sc = new SimpleScript(this.createInterpreter(), name, code);
|
|
230 | 272 |
return sc; |
231 | 273 |
} |
232 | 274 |
|
... | ... | |
250 | 292 |
} finally { |
251 | 293 |
IOUtils.closeQuietly(is); |
252 | 294 |
} |
253 |
return this.createScript(name, code, "COSA");
|
|
295 |
return this.createScript(name, code, CosaScriptEngineFactory.LANGUAGE_NAME);
|
|
254 | 296 |
} |
255 | 297 |
|
256 | 298 |
} |
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/javascripting/BindingsToSymbolTableAdapter.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.javascripting; |
|
2 |
|
|
3 |
import java.util.Collection; |
|
4 |
import javax.script.Bindings; |
|
5 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
6 |
import org.gvsig.expressionevaluator.impl.DefaultSymbolTable; |
|
7 |
|
|
8 |
/** |
|
9 |
* |
|
10 |
* @author jjdelcerro |
|
11 |
*/ |
|
12 |
public class BindingsToSymbolTableAdapter |
|
13 |
extends DefaultSymbolTable |
|
14 |
implements MutableSymbolTable |
|
15 |
{ |
|
16 |
|
|
17 |
private final Bindings bindings; |
|
18 |
|
|
19 |
public BindingsToSymbolTableAdapter(Bindings bindings) { |
|
20 |
this.bindings = bindings; |
|
21 |
} |
|
22 |
@Override |
|
23 |
public void setVar(String name, Object value) { |
|
24 |
this.bindings.put(name, value); |
|
25 |
} |
|
26 |
|
|
27 |
@Override |
|
28 |
public void removeVar(String name) { |
|
29 |
this.bindings.remove(name); |
|
30 |
} |
|
31 |
|
|
32 |
@Override |
|
33 |
@SuppressWarnings("CloneDoesntCallSuperClone") |
|
34 |
public MutableSymbolTable clone() throws CloneNotSupportedException { |
|
35 |
throw new CloneNotSupportedException(); |
|
36 |
} |
|
37 |
|
|
38 |
@Override |
|
39 |
public String getName() { |
|
40 |
return "Anonimous"; |
|
41 |
} |
|
42 |
|
|
43 |
@Override |
|
44 |
public boolean exists(String name) { |
|
45 |
return this.bindings.containsKey(name); |
|
46 |
} |
|
47 |
|
|
48 |
@Override |
|
49 |
public Object value(String name) { |
|
50 |
return this.bindings.get(name); |
|
51 |
} |
|
52 |
|
|
53 |
@Override |
|
54 |
public Collection<String> variables() { |
|
55 |
return this.bindings.keySet(); |
|
56 |
} |
|
57 |
|
|
58 |
@Override |
|
59 |
public Collection<String> localvariables() { |
|
60 |
return this.bindings.keySet(); |
|
61 |
} |
|
62 |
|
|
63 |
|
|
64 |
} |
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/javascripting/SymbolTableToBindingsAdapter.java | ||
---|---|---|
1 |
/* |
|
2 |
* To change this license header, choose License Headers in Project Properties. |
|
3 |
* To change this template file, choose Tools | Templates |
|
4 |
* and open the template in the editor. |
|
5 |
*/ |
|
6 |
package org.gvsig.expressionevaluator.impl.javascripting; |
|
7 |
|
|
8 |
import java.util.Collection; |
|
9 |
import java.util.HashSet; |
|
10 |
import java.util.Map; |
|
11 |
import java.util.Set; |
|
12 |
import javax.script.Bindings; |
|
13 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
14 |
|
|
15 |
/** |
|
16 |
* |
|
17 |
* @author jjdelcerro |
|
18 |
*/ |
|
19 |
public class SymbolTableToBindingsAdapter implements Bindings |
|
20 |
{ |
|
21 |
private MutableSymbolTable symbolTable; |
|
22 |
|
|
23 |
public SymbolTableToBindingsAdapter(MutableSymbolTable symbolTable) { |
|
24 |
this.symbolTable = symbolTable; |
|
25 |
} |
|
26 |
|
|
27 |
public MutableSymbolTable getSymbolTable() { |
|
28 |
return symbolTable; |
|
29 |
} |
|
30 |
|
|
31 |
@Override |
|
32 |
public Object put(String name, Object value) { |
|
33 |
Object previous = this.symbolTable.value(name); |
|
34 |
this.symbolTable.setVar(name, value); |
|
35 |
return previous; |
|
36 |
} |
|
37 |
|
|
38 |
@Override |
|
39 |
public void putAll(Map<? extends String, ? extends Object> toMerge) { |
|
40 |
for (Entry<? extends String, ? extends Object> entry : toMerge.entrySet()) { |
|
41 |
String key = entry.getKey(); |
|
42 |
Object value = entry.getValue(); |
|
43 |
this.symbolTable.setVar(key, value); |
|
44 |
} |
|
45 |
} |
|
46 |
|
|
47 |
@Override |
|
48 |
public boolean containsKey(Object key) { |
|
49 |
return this.symbolTable.exists(key.toString()); |
|
50 |
} |
|
51 |
|
|
52 |
@Override |
|
53 |
public Object get(Object key) { |
|
54 |
return this.symbolTable.value(key.toString()); |
|
55 |
} |
|
56 |
|
|
57 |
@Override |
|
58 |
public Object remove(Object key) { |
|
59 |
Object previous = this.symbolTable.value(key.toString()); |
|
60 |
this.symbolTable.removeVar(key.toString()); |
|
61 |
return previous; |
|
62 |
} |
|
63 |
|
|
64 |
|
|
65 |
@Override |
|
66 |
public int size() { |
|
67 |
return this.symbolTable.variables().size(); |
|
68 |
} |
|
69 |
|
|
70 |
@Override |
|
71 |
public boolean isEmpty() { |
|
72 |
return this.symbolTable.variables().isEmpty(); |
|
73 |
} |
|
74 |
|
|
75 |
@Override |
|
76 |
public boolean containsValue(Object value) { |
|
77 |
return false; // FIXME |
|
78 |
} |
|
79 |
|
|
80 |
@Override |
|
81 |
public void clear() { |
|
82 |
// FIXME |
|
83 |
} |
|
84 |
|
|
85 |
@Override |
|
86 |
public Set<String> keySet() { |
|
87 |
Collection<String> vars = this.symbolTable.variables(); |
|
88 |
return new HashSet<>(vars); |
|
89 |
} |
|
90 |
|
|
91 |
@Override |
|
92 |
public Collection<Object> values() { |
|
93 |
return null; // FIXME |
|
94 |
} |
|
95 |
|
|
96 |
@Override |
|
97 |
public Set<Entry<String, Object>> entrySet() { |
|
98 |
return null; // FIXME |
|
99 |
} |
|
100 |
|
|
101 |
} |
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/javascripting/CosaScriptEngine.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.javascripting; |
|
2 |
|
|
3 |
import java.io.IOException; |
|
4 |
import java.io.Reader; |
|
5 |
import java.io.Writer; |
|
6 |
import java.util.List; |
|
7 |
import javax.script.AbstractScriptEngine; |
|
8 |
import javax.script.Bindings; |
|
9 |
import javax.script.Compilable; |
|
10 |
import javax.script.CompiledScript; |
|
11 |
import javax.script.Invocable; |
|
12 |
import javax.script.ScriptContext; |
|
13 |
import javax.script.ScriptEngine; |
|
14 |
import javax.script.ScriptEngineFactory; |
|
15 |
import javax.script.ScriptException; |
|
16 |
import javax.script.SimpleScriptContext; |
|
17 |
import org.apache.commons.io.IOUtils; |
|
18 |
import org.apache.commons.lang3.StringUtils; |
|
19 |
import org.gvsig.expressionevaluator.Code; |
|
20 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
21 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
|
22 |
import org.gvsig.expressionevaluator.ExpressionRuntimeException; |
|
23 |
import org.gvsig.expressionevaluator.Interpreter; |
|
24 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
|
25 |
|
|
26 |
/** |
|
27 |
* |
|
28 |
* @author jjdelcerro |
|
29 |
*/ |
|
30 |
public class CosaScriptEngine |
|
31 |
extends AbstractScriptEngine |
|
32 |
implements ScriptEngine, Compilable, Invocable |
|
33 |
{ |
|
34 |
|
|
35 |
private class MyContextScript extends SimpleScriptContext { |
|
36 |
|
|
37 |
public MyContextScript() { |
|
38 |
engineScope = new SymbolTableToBindingsAdapter(symbolTable); |
|
39 |
} |
|
40 |
|
|
41 |
@Override |
|
42 |
public void setWriter(Writer writer) { |
|
43 |
super.setWriter(writer); |
|
44 |
interpreter.setWriter(writer); |
|
45 |
} |
|
46 |
|
|
47 |
@Override |
|
48 |
public void setErrorWriter(Writer writer) { |
|
49 |
super.setErrorWriter(writer); |
|
50 |
} |
|
51 |
} |
|
52 |
|
|
53 |
private final ScriptEngineFactory factory; |
|
54 |
private final MutableSymbolTable symbolTable; |
|
55 |
private final Interpreter interpreter; |
|
56 |
private final ExpressionEvaluatorManager manager; |
|
57 |
|
|
58 |
public CosaScriptEngine(ScriptEngineFactory factory) { |
|
59 |
this.factory = factory; |
|
60 |
this.manager = ExpressionEvaluatorLocator.getManager(); |
|
61 |
this.symbolTable = manager.createSymbolTable(); |
|
62 |
this.interpreter = manager.createInterpreter(); |
|
63 |
this.interpreter.setSymbolTable(this.symbolTable); |
|
64 |
this.context = new MyContextScript(); |
|
65 |
} |
|
66 |
|
|
67 |
@Override |
|
68 |
public ScriptEngineFactory getFactory() { |
|
69 |
return this.factory; |
|
70 |
} |
|
71 |
|
|
72 |
|
|
73 |
@Override |
|
74 |
public Object eval(String source, ScriptContext context) throws ScriptException { |
|
75 |
CompiledScript script = this.compile(source); |
|
76 |
Object x = script.eval(context); |
|
77 |
return x; |
|
78 |
} |
|
79 |
|
|
80 |
@Override |
|
81 |
public Object eval(Reader source, ScriptContext context) throws ScriptException { |
|
82 |
CompiledScript script = this.compile(source); |
|
83 |
Object x = script.eval(context); |
|
84 |
return x; |
|
85 |
} |
|
86 |
|
Also available in: Unified diff