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

History | View | Annotate | Download (6.79 KB)

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

    
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.Iterator;
6
import java.util.List;
7
import java.util.Map;
8
import java.util.Objects;
9
import org.apache.commons.lang3.StringUtils;
10
import org.gvsig.expressionevaluator.Function;
11
import org.gvsig.expressionevaluator.swing.Element;
12
import org.gvsig.expressionevaluator.swing.Element.GroupElement;
13
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
14
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
15
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
16
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
17
import org.gvsig.fmap.dal.feature.Feature;
18
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
19
import org.gvsig.fmap.dal.feature.FeatureSet;
20
import org.gvsig.fmap.dal.feature.FeatureStore;
21
import org.gvsig.tools.ToolsLocator;
22
import org.gvsig.tools.exception.BaseException;
23
import org.gvsig.tools.i18n.I18nManager;
24
import org.gvsig.tools.util.LabeledValue;
25
import org.gvsig.tools.visitor.VisitCanceledException;
26
import org.gvsig.tools.visitor.Visitor;
27

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

    
39
    final FeatureStore store;
40
    final FeatureAttributeDescriptor attrdesc;
41
    List<Element> elements;
42
    boolean hasMoreElements;
43

    
44
    FeatureAttributeElement(FeatureStore store, FeatureAttributeDescriptor attrdesc) {
45
        super(attrdesc.getName(), attrdesc.getName(), "featurestore-column");
46
        this.store = store;
47
        this.attrdesc = attrdesc;
48
        this.elements = null;
49
        this.hasMoreElements = false;
50
    }
51

    
52
    @Override
53
    public Element get(int index) {
54
        return this.getElements().get(index);
55
    }
56

    
57
    @Override
58
    public boolean isEnabled() {
59
        if (this.getConfig().getPreferences().isSQLCompatible()) {
60
            if (this.attrdesc.isComputed()) {
61
                return false;
62
            }
63
        }
64
        return true;
65
    }
66

    
67
    @Override
68
    public int size() {
69
        return this.getElements().size();
70
    }
71

    
72
    @Override
73
    public Iterator<Element> iterator() {
74
        return this.getElements().iterator();
75
    }
76

    
77
    @Override
78
    public void addElement(Element element) {
79

    
80
    }
81

    
82
    @Override
83
    public void addElement(Function function) {
84

    
85
    }
86

    
87
    @Override
88
    public void reload() {
89
        this.elements = null;
90
        hasMoreElements = false;
91
    }
92

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

    
118
            } catch (Exception ex) {
119
                // FIXME
120
            }
121
            this.elements = new ArrayList<>();
122
            if (!values.isEmpty()) {
123
                LabeledValue[] availableValues = this.attrdesc.getAvailableValues();
124
                Map<String, String> availableValuesMap = new HashMap<>();
125
                if( availableValues!=null ) {
126
                    for (LabeledValue availableValue : availableValues) {
127
                        availableValuesMap.put(
128
                                Objects.toString(availableValue.getValue()),
129
                                availableValue.getLabel()
130
                        );
131
                    }
132
                }
133
                for (Object value : values) {
134
                    String key = Objects.toString(value);
135
                    String label = availableValuesMap.getOrDefault(key, null);
136
                    this.elements.add(manager.createConstantElement(
137
                            value,
138
                            label
139
                        )
140
                    );
141
                }
142
            }
143
        }
144
        return this.elements;
145
    }
146

    
147
    @Override
148
    public boolean hasSubgroups() {
149
        return false;
150
    }
151

    
152
    @Override
153
    public boolean hasMoreElements() {
154
        return this.hasMoreElements;
155
    }
156

    
157
    @Override
158
    public String getName() {
159
        return attrdesc.getName();
160
    }
161
    
162
    @Override
163
    public String getLabel() {
164
        if (getConfig().getPreferences().getShowLabelsOfElements()) {
165
            if (!StringUtils.equals(attrdesc.getName(), attrdesc.getLabel())) {
166
                return "<html>" + attrdesc.getLabel() + "<br><font size=\"2\"><i>(" + attrdesc.getName() + ")</i></font></html>";
167
            }
168
        }
169
        return "<html>" + attrdesc.getName() + "</html>";
170
    }
171

    
172
    @Override
173
    public String getRenderedValue() {
174
        return " "+attrdesc.getName()+" ";
175
    }
176

    
177
    @Override
178
    public String getDescription() {
179
        I18nManager i18n = ToolsLocator.getI18nManager();
180

    
181
        StringBuilder html = new StringBuilder();
182
        html.append("<html>\n");
183

    
184
        html.append("<b>").append(this.getLabel()).append("</b><br>\n<br>\n");
185
        html.append("<b>").append(i18n.getTranslation("_Source")).append("</b> ").append(this.store.getName()).append("<br>\n");
186
        html.append("<b>").append(i18n.getTranslation("_Name")).append("</b> ").append(this.getName()).append("<br>\n");
187
        html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(this.attrdesc.getDataTypeName()).append("<br>\n");
188
        if (!StringUtils.isBlank(this.attrdesc.getDescription())
189
                && StringUtils.equalsAnyIgnoreCase(this.getName(), this.attrdesc.getDescription())) {
190
            html.append("<b>").append(i18n.getTranslation("_Description")).append("</b><br>\n");
191
            html.append(this.attrdesc.getDescription().replace("\n", "<br>")).append("<br>\n");
192
        }
193
        html.append("</html>\n");
194
        return html.toString();
195
    }
196

    
197
    @Override
198
    @SuppressWarnings("empty-statement")
199
    public void used() {
200
        attrdesc.recentUsed();
201
    }
202
}