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 / DefaultFeatureStoreElement2.java @ 46421

History | View | Annotate | Download (8.75 KB)

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

    
3
import java.util.ArrayList;
4
import java.util.Collection;
5
import java.util.Iterator;
6
import java.util.List;
7
import org.apache.commons.lang3.StringUtils;
8
import org.gvsig.expressionevaluator.Function;
9
import org.gvsig.expressionevaluator.swing.Element;
10
import org.gvsig.expressionevaluator.swing.Element.GroupElement;
11
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
12
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
13
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
14
import org.gvsig.fmap.dal.DALLocator;
15
import org.gvsig.fmap.dal.complements.Search;
16
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
17
import org.gvsig.fmap.dal.feature.Feature;
18
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
19
import org.gvsig.fmap.dal.feature.FeatureStore;
20
import org.gvsig.fmap.dal.feature.ForeingKey;
21
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
22
import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeTreeModel;
23
import org.gvsig.fmap.dal.swing.impl.featuretype.FeatureAttributeTreeModel.Node;
24

    
25
/**
26
 *
27
 * @author jjdelcerro
28
 */
29
public class DefaultFeatureStoreElement2
30
        extends AbstractElement
31
        implements SimpleElement, GroupElement, FeatureStoreElement {
32

    
33
    private final static String DEFAULT_ELEMENT_NAME = "store";
34
    private boolean useFullyQualifiedNames = false;
35
    
36
    private class ForeingKeyElement
37
            extends FeatureAttributeElement
38
            implements SimpleElement, GroupElement {
39

    
40
        private final Node node;
41
        private List<Element> elements;
42

    
43
        public ForeingKeyElement(Element parent, Node node) {
44
            super(
45
                    parent,
46
                    node.getFeatureStore(),
47
                    node.getValue(), "featurestore-foreing-key"
48
            );
49
            this.node = node;
50
        }
51
        
52
        @Override
53
        public String getLabel() {
54
            FeatureAttributeDescriptor attribute = this.node.getValue();
55
            if( attribute!=null && attribute.isForeingKey() ) {
56
                ForeingKey foreingKey = attribute.getForeingKey();
57
                if (getConfig().getPreferences().getShowLabelsOfElements()) {
58
                    if (!StringUtils.equals(attrdesc.getName(), attrdesc.getLabel())) {
59
                        return String.format(
60
                            "<html>%s<br><font size=\"2\"><i>(%s[%s])</i></font></html>", 
61
                            attrdesc.getLocalizedLabel(), 
62
                            attrdesc.getName(),
63
                            foreingKey.getTableName()
64
                        );
65
                    }
66
                    return String.format(
67
                        "<html>%s<br><font size=\"2\"><i>([%s])</i></font></html>", 
68
                        attrdesc.getLocalizedLabel(), 
69
                        foreingKey.getTableName()
70
                    );
71
                }
72
                return String.format(
73
                    "<html>%s<br><font size=\"2\"><i>([%s])</i></font></html>", 
74
                    attrdesc.getName(), 
75
                    foreingKey.getTableName()
76
                );
77
            }
78
            return super.getLabel();
79
        }
80
        
81
        @Override
82
        public Element get(int index) {
83
            return this.getElements().get(index);
84
        }
85

    
86
        @Override
87
        public int size() {
88
            return this.getElements().size();
89
        }
90

    
91
        @Override
92
        public Iterator<Element> iterator() {
93
            return this.getElements().iterator();
94
        }
95

    
96
        @Override
97
        public void addElement(Element element) {
98

    
99
        }
100

    
101
        @Override
102
        public void addElement(Function function) {
103

    
104
        }
105

    
106
        @Override
107
        public List<Element> getElements() {
108
            if (this.elements == null) {
109
                this.elements = new ArrayList<>();
110
                List<Node> children = this.node.getChildren();
111
                for (Node child : children) {
112
                    Element e;
113
                    FeatureAttributeDescriptor theAttrdesc = child.getValue();
114
                    if (theAttrdesc.isForeingKey()) {
115
                        e = new ForeingKeyElement(this, child);
116
                    } else {
117
                        e = new FeatureAttributeElement(this, child.getFeatureStore(), theAttrdesc);
118
                    }
119
                    e.setConfig(this.getConfig());
120
                    this.elements.add(e);
121
                }
122
            }
123
            return this.elements;
124
        }
125

    
126
        @Override
127
        public Element setConfig(ExpressionBuilderConfig config) {
128
            super.setConfig(config);
129
            if (this.elements != null) {
130
                for (Element element : this.elements) {
131
                    element.setConfig(config);
132
                }
133
            }
134
            return this;
135
        }
136
    }
137

    
138
    private List<Element> elements;
139
    private FeatureStore store;
140
    private FeatureAttributeTreeModel treemodel;
141

    
142
    public DefaultFeatureStoreElement2(FeatureStore store, String name) {
143
        super(name, "store", "featurestore-table");
144
        this.setFeatureStore(store);
145
    }
146
    
147
    public DefaultFeatureStoreElement2(FeatureStore store) {
148
        this(store, DEFAULT_ELEMENT_NAME);
149
    }
150

    
151
    @Override
152
    public Element get(int index) {
153
        return this.getElements().get(index);
154
    }
155

    
156
    @Override
157
    public int size() {
158
        return this.getElements().size();
159
    }
160

    
161
    @Override
162
    public Iterator<Element> iterator() {
163
        return this.getElements().iterator();
164
    }
165

    
166
    @Override
167
    public void addElement(Element element) {
168
    }
169

    
170
    @Override
171
    public void addElement(Function function) {
172
    }
173

    
174
    @Override
175
    public Collection<Element> getValues() {
176
        return this.getElements();
177
    }
178

    
179
    @Override
180
    public List<Element> getElements() {
181
        if( this.treemodel==null ) {
182
            return null;
183
        }
184
        if (this.elements == null) {
185
            this.elements = new ArrayList<>();
186
            Node root = (Node) treemodel.getRoot();
187
            List<Node> children = root.getChildren();
188
            for (Node child : children) {
189
                Element e;
190
                FeatureAttributeDescriptor attrdesc = child.getValue();
191
                if (attrdesc.isForeingKey()) {
192
                    e = new ForeingKeyElement(this, child);
193
                } else {
194
                    e = new FeatureAttributeElement(this, child.getFeatureStore(), attrdesc);
195
                }
196
                e.setConfig(this.getConfig());
197
                this.elements.add(e);
198
            }
199
        }
200
        return this.elements;
201
    }
202

    
203
    @Override
204
    public String getLabel() {
205
        if (this.store == null) {
206
            return super.getLabel();
207
        }
208
        return this.store.getName();
209
    }
210
    
211
    @Override
212
    public String getRenderedValue() {
213
        if (this.store == null) {
214
            return super.getRenderedValue();
215
        }
216
        return this.store.getName();
217
    }
218
    
219
    @Override
220
    public void setName(String name) {
221
        super.setName(name);
222
    }
223

    
224
    @Override
225
    public FeatureStore getFeatureStore() {
226
        return this.store;
227
    }
228

    
229
    @Override
230
    public final void setFeatureStore(FeatureStore store) {
231
        this.store = store;
232
        this.init();
233
    }
234

    
235
    @Override
236
    public Element setConfig(ExpressionBuilderConfig config) {
237
        super.setConfig(config);
238
        this.init();
239
        return this;
240
    }
241

    
242
    private void init() {
243
        this.treemodel = null;
244
        this.elements = null;
245
        if (this.store == null || this.getConfig()==null ) {
246
            return;
247
        } 
248
        if( StringUtils.equalsIgnoreCase(DEFAULT_ELEMENT_NAME, this.store.getName()) ) {
249
            this.setName(this.store.getName());
250
        }
251
        if (this.getConfig().getPreviewSymbolTable()==null) { 
252
        Feature sampleFeature = this.store.getSampleFeature();
253
           if( sampleFeature!=null ) {
254
                FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
255
                featureSymbolTable.setFeature(sampleFeature);
256
                this.getConfig().setPreviewSymbolTable(featureSymbolTable.createParent());
257
            } 
258
        }     
259
        this.treemodel = new FeatureAttributeTreeModel(this.store, this.store.getDefaultFeatureTypeQuietly(), true, Search.ALL_FILTER);
260
    }
261

    
262
    @Override
263
    public void reload() {
264
        if( this.elements!=null ) {
265
            for (Element element : this.elements) {
266
                element.reload();
267
            }
268
        }
269
    }
270

    
271
    @Override
272
    public void setUseFullyQualifiedNames(boolean useFullyQualifiedNames) {
273
        this.useFullyQualifiedNames = useFullyQualifiedNames;
274
    }
275

    
276
    @Override
277
    public boolean getUseFullyQualifiedNames() {
278
        return this.useFullyQualifiedNames;
279
    }
280
}