Revision 44263 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
2 2

  
3 3
import java.util.ArrayList;
4 4
import java.util.HashMap;
5
import java.util.Iterator;
6 5
import java.util.List;
7 6
import java.util.Map;
8 7
import java.util.Objects;
9 8
import org.apache.commons.lang3.StringUtils;
10
import org.gvsig.expressionevaluator.Function;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
10
import org.gvsig.expressionevaluator.ExpressionUtils;
11 11
import org.gvsig.expressionevaluator.swing.Element;
12
import org.gvsig.expressionevaluator.swing.Element.GroupElement;
13 12
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
14 13
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
15 14
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
16 15
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
16
import org.gvsig.fmap.dal.DataManager;
17 17
import org.gvsig.fmap.dal.feature.Feature;
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.AdvancedAttributeSelectionTreeModel;
21 22
import org.gvsig.tools.ToolsLocator;
22 23
import org.gvsig.tools.exception.BaseException;
23 24
import org.gvsig.tools.i18n.I18nManager;
......
32 33
public class FeatureAttributeElement
33 34
        extends AbstractElement
34 35
        implements
35
        GroupElement,
36 36
        SimpleElement
37 37
    {
38 38

  
39 39
    final FeatureStore store;
40 40
    final FeatureAttributeDescriptor attrdesc;
41
    List<Element> elements;
42
    boolean hasMoreElements;
41
    List<Element> values;
42
    boolean hasMoreValues;
43
    private final Element parent;
43 44

  
44
    FeatureAttributeElement(FeatureStore store, FeatureAttributeDescriptor attrdesc) {
45
        super(attrdesc.getName(), attrdesc.getName(), "featurestore-column");
45
    FeatureAttributeElement(Element parent, FeatureStore store, FeatureAttributeDescriptor attrdesc) {
46
        this(parent, store, attrdesc, "featurestore-column");
47
    }
48
    
49
    FeatureAttributeElement(Element parent, FeatureStore store, FeatureAttributeDescriptor attrdesc, String iconName) {
50
        super(attrdesc.getName(), attrdesc.getName(), iconName);
51
        this.parent = parent;
46 52
        this.store = store;
47 53
        this.attrdesc = attrdesc;
48
        this.elements = null;
49
        this.hasMoreElements = false;
54
        this.hasMoreValues = false;
50 55
    }
51 56

  
57
    public Element getParent() {
58
        return this.parent;
59
    }
60

  
52 61
    @Override
53
    public Element get(int index) {
54
        return this.getElements().get(index);
62
    public String getRenderedValue() {
63
        if( this.parent instanceof DefaultFeatureStoreElement2 ) {
64
            return super.getRenderedValue();
65
        }
66
        List<String> fieldNames = new ArrayList<>();
67
        fieldNames.add(attrdesc.getName());
68
        Element theParent = this.parent;
69
        while( theParent!=null ) {
70
            if( theParent instanceof DefaultFeatureStoreElement2 ) {
71
                break;
72
            }
73
            if( !(theParent instanceof FeatureAttributeElement) ) {
74
                break; // Esto no deberia pasar
75
            }
76
            fieldNames.add(0, theParent.getName());
77
            theParent = ((FeatureAttributeElement)theParent).getParent();
78
        }
79
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
80
        ExpressionBuilder.Function list = builder.list();
81
        for (String fieldName : fieldNames) {
82
            list.parameter(builder.constant(fieldName));
83
        }
84
        String formula = builder.function(DataManager.FUNCTION_FOREING_VALUE, list).toString();
85
        return formula;
55 86
    }
87
    
88
    
89
    @Override
90
    public void reload() {
91
        this.values = null;
92
        hasMoreValues = false;
93
    }
56 94

  
57 95
    @Override
58 96
    public boolean isEnabled() {
......
65 103
    }
66 104

  
67 105
    @Override
68
    public int size() {
69
        return this.getElements().size();
106
    public boolean hasMoreValues() {
107
        return this.hasMoreValues;
70 108
    }
71 109

  
72 110
    @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;
111
    public List<Element> getValues() {
112
        if (this.values == null) {
113
            hasMoreValues = false;
97 114
            ExpressionEvaluatorSwingManager manager = ExpressionEvaluatorSwingLocator.getManager();
98 115
            final List<Object> values = new ArrayList<>();
99 116
            final int limit = this.getConfig() == null ? 60 : this.getConfig().getPreferences().getSimpleElementsLimit();
......
108 125
                            values.add(value);
109 126
                        }
110 127
                        if (System.currentTimeMillis() > timeLimit) {
111
                            hasMoreElements = true;
128
                            hasMoreValues = true;
112 129
                            throw new VisitCanceledException();
113 130
                        }
114 131
                    }
......
118 135
            } catch (Exception ex) {
119 136
                // FIXME
120 137
            }
121
            this.elements = new ArrayList<>();
138
            this.values = new ArrayList<>();
122 139
            if (!values.isEmpty()) {
123 140
                LabeledValue[] availableValues = this.attrdesc.getAvailableValues();
124 141
                Map<String, String> availableValuesMap = new HashMap<>();
......
133 150
                for (Object value : values) {
134 151
                    String key = Objects.toString(value);
135 152
                    String label = availableValuesMap.getOrDefault(key, null);
136
                    this.elements.add(manager.createConstantElement(
153
                    ConstantElement e = manager.createConstantElement(
137 154
                            value,
138 155
                            label
139
                        )
140 156
                    );
157
                    this.values.add(e);
158
                    e.setConfig(this.getConfig());
141 159
                }
142 160
            }
143 161
        }
144
        return this.elements;
162
        return this.values;
145 163
    }
146 164

  
147 165
    @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 166
    public String getName() {
159 167
        return attrdesc.getName();
160 168
    }
......
170 178
    }
171 179

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

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

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

  
184
        html.append("<b>").append(this.getLabel()).append("</b><br>\n<br>\n");
187
        html.append("<b>").append(this.attrdesc.getName()).append("</b><br>");
188
        if( !StringUtils.equalsIgnoreCase(attrdesc.getName(), attrdesc.getLabel()) ) {
189
            html.append(this.attrdesc.getLabel()).append("<br>\n");
190
        }
191
        html.append("<br>\n");
185 192
        html.append("<b>").append(i18n.getTranslation("_Source")).append("</b> ").append(this.store.getName()).append("<br>\n");
186 193
        html.append("<b>").append(i18n.getTranslation("_Name")).append("</b> ").append(this.getName()).append("<br>\n");
187 194
        html.append("<b>").append(i18n.getTranslation("_Type")).append("</b> ").append(this.attrdesc.getDataTypeName()).append("<br>\n");

Also available in: Unified diff