Revision 44389

View differences:

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

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff