Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app.document.table.app / org.gvsig.app.document.table.app.mainplugin / src / main / java / org / gvsig / app / project / documents / table / gui / EmulatedFieldExpression.java @ 43978

History | View | Annotate | Download (4.18 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.app.project.documents.table.gui;
7

    
8
import org.gvsig.expressionevaluator.Code;
9
import org.gvsig.fmap.dal.feature.EditableFeature;
10
import org.gvsig.fmap.dal.feature.Feature;
11
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
12
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
13
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
14
import org.gvsig.expressionevaluator.MutableSymbolTable;
15
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.dynobject.DynStruct;
18
import org.gvsig.tools.persistence.PersistenceManager;
19
import org.gvsig.tools.persistence.Persistent;
20
import org.gvsig.tools.persistence.PersistentState;
21
import org.gvsig.tools.persistence.exception.PersistenceException;
22

    
23
/**
24
 *
25
 * @author osc
26
 */
27
public class EmulatedFieldExpression implements FeatureAttributeEmulator, Persistent {
28
            
29
    String[] fields = null;
30
    String code = "";
31
    private static final String EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME = 
32
            "EmulatedFieldExpression";
33

    
34
    public EmulatedFieldExpression() {
35
    }
36

    
37
    
38
    EmulatedFieldExpression(String[] fields, String code){
39
        this.fields = fields;
40
        this.setCode(code);
41
    }
42
    
43
    public static void registerPersistenceDefinition() {
44
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
45
    
46
        if (manager.getDefinition(EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME) == 
47
                null) {
48
            DynStruct definition = manager.addDefinition(
49
                EmulatedFieldExpression.class,
50
                EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME, 
51
                EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME +       
52
                        " Persistent definition", 
53
                null, 
54
                null
55
            );
56
            definition.addDynFieldString("code")
57
                .setMandatory(true)
58
                .setPersistent(true);
59
            definition.addDynFieldArray("fields")
60
                .setClassOfItems(String.class)
61
                .setMandatory(true)
62
                .setPersistent(true);
63
        }
64
    }
65
        
66
    @Override
67
    public Object get(Feature feature) {
68
        ExpressionEvaluatorManager expManager = 
69
                ExpressionEvaluatorLocator.getManager();
70
        MutableSymbolTable symbol = expManager.createSymbolTable();
71
        FeatureAttributeDescriptor[] descriptors = 
72
                feature.getType().getAttributeDescriptors();
73
        for (FeatureAttributeDescriptor descriptor : descriptors) {
74
            String fieldName = descriptor.getName();
75
            if (!descriptor.isComputed()) { // si eres tu mismo 
76
                Object value = feature.get(fieldName);
77
                symbol.setVar(fieldName, value);
78
            }
79
        }
80
        Code codeCompilation = expManager.compile(code);
81
        Object result = expManager.evaluate(symbol, codeCompilation);
82
        return result;
83
    }
84

    
85
    @Override
86
    public void set(EditableFeature feature, Object value) {
87
        //throw new UnsupportedOperationException("Not supported yet."); 
88
    }
89

    
90
    @Override
91
    public boolean allowSetting() {
92
        return false;
93
    }
94

    
95
    @Override
96
    public String[] getRequiredFieldNames() {
97
        return this.fields;
98
    }
99
    
100
    public String getCode() {
101
        return this.code;
102
    }
103

    
104
    @Override
105
    public void saveToState(PersistentState state) throws PersistenceException {
106
        state.set("fields", this.getFields());
107
        state.set("code", this.getCode());
108
        
109
    }
110

    
111
    @Override
112
    public void loadFromState(PersistentState state) throws PersistenceException {
113
        String stateCode = state.getString("code");
114
        String[] stateFields = state.getStringArray("fields");
115
        this.setCode(stateCode);
116
        this.setFields(stateFields);
117
    }
118

    
119
    public String[] getFields() {
120
        return this.fields;
121
    }
122
    private void setCode(String code) {
123
        this.code = code;
124
    }
125

    
126
    private void setFields(String[] fields) {
127
        this.fields = fields;
128
    }
129
}