Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / expressionevaluator / FeatureAttributeElement.java @ 43987

History | View | Annotate | Download (4.3 KB)

1
package org.gvsig.fmap.dal.swing.impl.expressionevaluator;
2

    
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.List;
6
import org.gvsig.expressionevaluator.Function;
7
import org.gvsig.expressionevaluator.swing.Element;
8
import org.gvsig.expressionevaluator.swing.Element.GroupElement;
9
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
10
import org.gvsig.expressionevaluator.swing.Element.VariableElement;
11
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
12
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
13
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
14
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
15
import org.gvsig.fmap.dal.feature.Feature;
16
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.FeatureSet;
18
import org.gvsig.fmap.dal.feature.FeatureStore;
19
import org.gvsig.tools.exception.BaseException;
20
import org.gvsig.tools.visitor.VisitCanceledException;
21
import org.gvsig.tools.visitor.Visitor;
22

    
23
/**
24
 *
25
 * @author jjdelcerro
26
 */
27
public class FeatureAttributeElement        
28
        extends AbstractElement
29
        implements 
30
            GroupElement,
31
            SimpleElement,
32
            VariableElement
33
{
34

    
35
    final FeatureStore store;
36
    final FeatureAttributeDescriptor attrdesc;
37
    List<Element> elements;
38
    final ExpressionBuilderConfig configPanel;
39
    boolean hasMoreElements; 
40
    
41
    FeatureAttributeElement(ExpressionBuilderConfig configPanel, FeatureStore store, FeatureAttributeDescriptor attrdesc) {
42
        super(attrdesc.getName(), attrdesc.getDescription(), "expressionbuilder-element-table-field");
43
        this.configPanel = configPanel;
44
        this.store = store;
45
        this.attrdesc = attrdesc;
46
        this.elements = null;
47
        this.hasMoreElements = false;
48
    }
49

    
50
    @Override
51
    public String getTypeName() {
52
        return this.attrdesc.getDataTypeName();
53
    }
54

    
55
    @Override
56
    public Element get(int index) {
57
        return this.getElements().get(index);
58
    }
59

    
60
    @Override
61
    public int size() {
62
        return this.getElements().size();
63
    }
64

    
65
    @Override
66
    public Iterator<Element> iterator() {
67
        return this.getElements().iterator();
68
    }
69

    
70
    @Override
71
    public void addElement(Element element) {
72

    
73
    }
74

    
75
    @Override
76
    public void addElement(Function function) {
77

    
78
    }
79

    
80
    @Override
81
    public void reload() {
82
        this.elements=null; 
83
        hasMoreElements = false;
84
    }
85

    
86
    @Override
87
    public List<Element> getElements() {
88
        if( this.elements==null ) {
89
            hasMoreElements = false;
90
            ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
91
            final List<Object> values = new ArrayList<>();
92
            final int limit = this.configPanel==null? 60 : this.configPanel.getSimpleElementsLimit();
93
            final long timeLimit = System.currentTimeMillis() + limit*1000;
94
            try {
95
                FeatureSet set = this.store.getFeatureSet();
96
                set.accept(new Visitor() {
97
                    @Override
98
                    public void visit(Object o) throws VisitCanceledException, BaseException {
99
                        Object value = ((Feature)o).get(attrdesc.getName());
100
                        if( !values.contains(value ) ) {
101
                            values.add(value);
102
                        }
103
                        if( System.currentTimeMillis() > timeLimit ) {
104
                            hasMoreElements = true;
105
                            throw new VisitCanceledException();
106
                        }
107
                    }
108
                });
109
            } catch(VisitCanceledException ex) {
110
                
111
            } catch (Exception ex) {
112
                // FIXME
113
            }
114
            this.elements = new ArrayList<>();
115
            for (Object value : values) {
116
                this.elements.add(manager.createConstantElement(value));
117
            }
118
        }
119
        return this.elements;
120
    }
121

    
122
    @Override
123
    public boolean hasSubgroups() {
124
        return false;
125
    }
126

    
127
    @Override
128
    public String getSource() {
129
        return this.store.getName();
130
    }
131

    
132
    @Override
133
    public String getLabel() {
134
        return "Field";
135
    }
136

    
137
    @Override
138
    public boolean hasMoreElements() {
139
        return this.hasMoreElements;
140
    }
141
    
142
}