Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.swing / org.gvsig.expressionevaluator.swing.impl / src / main / java / org / gvsig / expressionevaluator / swing / impl / DefaultCalculatorController.java @ 44076

History | View | Annotate | Download (2.86 KB)

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.swing.impl;
7

    
8
import org.gvsig.expressionevaluator.swing.CalculatorController;
9
import java.util.Objects;
10
import javax.swing.text.JTextComponent;
11
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
12
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
13
import org.gvsig.expressionevaluator.MutableSymbolTable;
14
import org.gvsig.expressionevaluator.SymbolTable;
15
import org.gvsig.tools.dataTypes.DataTypes;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.dataTypes.CoercionException;
18
import org.gvsig.tools.dataTypes.DataTypesManager;
19

    
20
/**
21
 *
22
 * @author jjdelcerro
23
 */
24
class DefaultCalculatorController<T> implements CalculatorController<T> {
25
    
26
    private final JTextComponent text;
27
    private final int dataType;
28
    private final MutableSymbolTable defaultSymbolTable;
29

    
30
    public DefaultCalculatorController(JTextComponent text, int dataType) {
31
        this.text = text;
32
        this.dataType = dataType;
33
        this.defaultSymbolTable = ExpressionEvaluatorLocator.getManager().createSymbolTable();
34
    }
35

    
36
    @Override
37
    public void addSymbolTable(SymbolTable symbolTable) {
38
        this.defaultSymbolTable.addSymbolTable(symbolTable);
39
    }
40

    
41
    @Override
42
    public MutableSymbolTable getSymbolTable() {
43
        return this.defaultSymbolTable;
44
    }
45

    
46
    @Override
47
    public T get() {
48
        String source = this.text.getText();
49
        try {
50
            ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
51
            Object value = manager.evaluate(this.defaultSymbolTable, source);
52
            if (this.dataType != DataTypes.OBJECT) {
53
                DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
54
                value = dataManager.coerce(this.dataType, value);
55
            }
56
            return (T) value;
57
        } catch (CoercionException ex) {
58
            if (this.dataType != DataTypes.STRING) {
59
                return (T) source;
60
            }
61
            return null;
62
        }
63
    }
64

    
65
    @Override
66
    public void set(T value) {
67
        this.text.setText(Objects.toString(value, ""));
68
    }
69

    
70
    @Override
71
    public void coerceAndSet(Object value) {
72
        if (this.dataType != DataTypes.OBJECT) {
73
            DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
74
            try {
75
                value = dataManager.coerce(this.dataType, value);
76
            } catch (CoercionException ex) {
77
            }
78
        }
79
        this.text.setText(Objects.toString(value, ""));
80
    }
81

    
82
    @Override
83
    public void setEnabled(boolean enabled) {
84
        this.text.setEnabled(enabled);
85
    }
86

    
87
    @Override
88
    public boolean isEnabled() {
89
        return this.text.isEnabled();
90
    }
91
    
92
}