Revision 44259 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

View differences:

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

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

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

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

  
45
    FeatureAttributeElement(FeatureStore store, FeatureAttributeDescriptor attrdesc) {
46
        super(attrdesc.getName(), attrdesc.getName(), "expressionbuilder-element-table-field");
48 47
        this.store = store;
49 48
        this.attrdesc = attrdesc;
50 49
        this.elements = null;
......
52 51
    }
53 52

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

  
59
    @Override
60 54
    public Element get(int index) {
61 55
        return this.getElements().get(index);
62 56
    }
63
    
57

  
64 58
    @Override
65 59
    public boolean isEnabled() {
66
        if( this.config.isSQLCompatible() ) {
67
            if( this.attrdesc.isComputed() ) {
60
        if (this.getConfig().getPreferences().isSQLCompatible()) {
61
            if (this.attrdesc.isComputed()) {
68 62
                return false;
69 63
            }
70 64
        }
......
93 87

  
94 88
    @Override
95 89
    public void reload() {
96
        this.elements=null; 
90
        this.elements = null;
97 91
        hasMoreElements = false;
98 92
    }
99 93

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

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

  
141 153
    @Override
142
    public String getSource() {
143
        return this.store.getName();
154
    public boolean hasMoreElements() {
155
        return this.hasMoreElements;
144 156
    }
145 157

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

  
151 173
    @Override
152
    public boolean hasMoreElements() {
153
        return this.hasMoreElements;
174
    public String getRenderedValue() {
175
        return " "+attrdesc.getName()+" ";
154 176
    }
155 177

  
156 178
    @Override
......
161 183
        html.append("<html>\n");
162 184

  
163 185
        html.append("<b>").append(this.getLabel()).append("</b><br>\n<br>\n");
164
        html.append("<b>").append(i18n.getTranslation("_Source")).append("</b> ").append(this.getSource()).append("<br>\n");
186
        html.append("<b>").append(i18n.getTranslation("_Source")).append("</b> ").append(this.store.getName()).append("<br>\n");
165 187
        html.append("<b>").append(i18n.getTranslation("_Name")).append("</b> ").append(this.getName()).append("<br>\n");
166
        html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(this.getTypeName()).append("<br>\n");
167
        if( !StringUtils.isBlank(this.attrdesc.getDescription()) &&
168
                StringUtils.equalsAnyIgnoreCase(this.getName(), this.attrdesc.getDescription()) ) {
188
        html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(this.attrdesc.getDataTypeName()).append("<br>\n");
189
        if (!StringUtils.isBlank(this.attrdesc.getDescription())
190
                && StringUtils.equalsAnyIgnoreCase(this.getName(), this.attrdesc.getDescription())) {
169 191
            html.append("<b>").append(i18n.getTranslation("_Description")).append("</b><br>\n");
170 192
            html.append(this.attrdesc.getDescription().replace("\n", "<br>")).append("<br>\n");
171 193
        }
172 194
        html.append("</html>\n");
173 195
        return html.toString();
174 196
    }
175
    
176
    
197

  
198
    @Override
199
    @SuppressWarnings("empty-statement")
200
    public void used() {
201
        SearchUtils.getRecentUseds().add(attrdesc);
202
    }
177 203
}

Also available in: Unified diff