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 @ 44191

History | View | Annotate | Download (5.48 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.apache.commons.lang3.StringUtils;
7
import org.gvsig.expressionevaluator.Function;
8
import org.gvsig.expressionevaluator.swing.Element;
9
import org.gvsig.expressionevaluator.swing.Element.GroupElement;
10
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
11
import org.gvsig.expressionevaluator.swing.Element.VariableElement;
12
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
13
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
14
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
15
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
16
import org.gvsig.fmap.dal.feature.Feature;
17
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
18
import org.gvsig.fmap.dal.feature.FeatureSet;
19
import org.gvsig.fmap.dal.feature.FeatureStore;
20
import org.gvsig.tools.ToolsLocator;
21
import org.gvsig.tools.exception.BaseException;
22
import org.gvsig.tools.i18n.I18nManager;
23
import org.gvsig.tools.visitor.VisitCanceledException;
24
import org.gvsig.tools.visitor.Visitor;
25

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

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

    
53
    @Override
54
    public String getTypeName() {
55
        return this.attrdesc.getDataTypeName();
56
    }
57

    
58
    @Override
59
    public Element get(int index) {
60
        return this.getElements().get(index);
61
    }
62

    
63
    @Override
64
    public int size() {
65
        return this.getElements().size();
66
    }
67

    
68
    @Override
69
    public Iterator<Element> iterator() {
70
        return this.getElements().iterator();
71
    }
72

    
73
    @Override
74
    public void addElement(Element element) {
75

    
76
    }
77

    
78
    @Override
79
    public void addElement(Function function) {
80

    
81
    }
82

    
83
    @Override
84
    public void reload() {
85
        this.elements=null; 
86
        hasMoreElements = false;
87
    }
88

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

    
125
    @Override
126
    public boolean hasSubgroups() {
127
        return false;
128
    }
129

    
130
    @Override
131
    public String getSource() {
132
        return this.store.getName();
133
    }
134

    
135
    @Override
136
    public String getLabel() {
137
        return "Field";
138
    }
139

    
140
    @Override
141
    public boolean hasMoreElements() {
142
        return this.hasMoreElements;
143
    }
144

    
145
    @Override
146
    public String getDescription() {
147
        I18nManager i18n = ToolsLocator.getI18nManager();
148

    
149
        StringBuilder html = new StringBuilder();
150
        html.append("<html>\n");
151

    
152
        html.append("<b>").append(this.getLabel()).append("</b><br>\n<br>\n");
153
        html.append("<b>").append(i18n.getTranslation("_Source")).append("</b> ").append(this.getSource()).append("<br>\n");
154
        html.append("<b>").append(i18n.getTranslation("_Name")).append("</b> ").append(this.getName()).append("<br>\n");
155
        html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(this.getTypeName()).append("<br>\n");
156
        if( !StringUtils.isBlank(this.attrdesc.getDescription()) &&
157
                StringUtils.equalsAnyIgnoreCase(this.getName(), this.attrdesc.getDescription()) ) {
158
            html.append("<b>").append(i18n.getTranslation("_Description")).append("</b><br>\n");
159
            html.append(this.attrdesc.getDescription().replace("\n", "<br>")).append("<br>\n");
160
        }
161
        html.append("</html>\n");
162
        return html.toString();
163
    }
164
    
165
    
166
}