Revision 46485 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/featuretype/DefaultFeatureAttributesSelectionPanel.java

View differences:

DefaultFeatureAttributesSelectionPanel.java
10 10
import javax.swing.DefaultListCellRenderer;
11 11
import javax.swing.ImageIcon;
12 12
import javax.swing.JComponent;
13
import javax.swing.ListCellRenderer;
13 14
import javax.swing.event.DocumentEvent;
14 15
import javax.swing.event.DocumentListener;
15 16
import javax.swing.event.ListSelectionEvent;
16 17
import org.apache.commons.io.FilenameUtils;
18
import org.apache.commons.lang.StringUtils;
17 19
import org.gvsig.expressionevaluator.Expression;
18 20
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
19 21
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
22
import org.gvsig.fmap.dal.DALLocator;
23
import org.gvsig.fmap.dal.DataTypes;
20 24
import org.gvsig.fmap.dal.exception.DataException;
21 25
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
22 26
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
23 27
import org.gvsig.fmap.dal.feature.FeatureStore;
24 28
import org.gvsig.fmap.dal.feature.FeatureType;
25 29
import org.gvsig.fmap.dal.swing.DALSwingLocator;
30
import org.gvsig.fmap.dal.swing.DataSwingManager;
26 31
import org.gvsig.tools.swing.api.ActionListenerSupport;
27 32
import org.gvsig.tools.swing.api.FilteredListController;
28 33
import org.gvsig.tools.swing.api.FilteredListModel;
......
32 37
import org.gvsig.fmap.dal.swing.featuretype.FeatureAttributesSelectionPanel;
33 38
import org.gvsig.tools.locator.ReferenceNotRegisteredException;
34 39
import org.gvsig.tools.util.LabeledValue;
40
import org.gvsig.tools.util.LabeledValueImpl;
35 41

  
36 42
/**
37 43
 *
......
42 48
        implements FeatureAttributesSelectionPanel 
43 49
    {
44 50

  
51
    private static final String ATTR_IS_EXPRESSION = "DefaultFeatureAttributesSelectionPanel_isExpression";
52

  
45 53
    private FeatureType featureType;
46 54
    private final ActionListenerSupport actionListenerSupport;
47 55
    private FilteredListController availableFieldsController;
48
    private final List<String> selecteds;
56
    private final List<FeatureAttributeDescriptor> selecteds;
49 57
    private ExpressionPickerController expressionPicker = null;
50 58
    private boolean allowCalculatedAttributes = false;
51 59
    private List<EditableFeatureAttributeDescriptor> extraColumns;
......
58 66
    
59 67
    private void initComponents() {
60 68
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
61
//        ListCellRenderer renderer = DALSwingLocator.getDataSwingManager().createDefaultFeatureAttributeListCellRenderer();
62
        DefaultListCellRenderer renderer = new DefaultListCellRenderer();
69
        ListCellRenderer renderer = DALSwingLocator.getDataSwingManager().createDefaultFeatureAttributeListCellRenderer();
70
//        DefaultListCellRenderer renderer = new DefaultListCellRenderer();
63 71
        this.lstAvailableColumns.setCellRenderer(renderer);
64 72
        this.lstSelectedColumns.setCellRenderer(renderer);
65 73
        
......
118 126

  
119 127
    @Override
120 128
    public List<String> getSelectedNames() {
121
      return Collections.unmodifiableList(selecteds);
129
        List<String> names = new ArrayList<>();
130
        for (FeatureAttributeDescriptor selected : selecteds) {
131
                names.add(selected.getName());
132
        }
133
      return names;
122 134
    }
123 135

  
124 136
    @Override
125 137
    public void setSelectedNames(List<String> names) {
126
      this.selecteds.clear();
127
      if( names!=null ) {
128
        for (String name : names) {
129
          if(!this.selecteds.contains(name)) {
130
            this.selecteds.add(name);
131
          }
138
        this.selecteds.clear();
139
        if (names != null) {
140
            for (String name : names) {
141
                FeatureAttributeDescriptor attr = this.getAttributeDescriptor(name);
142
                if(attr == null){
143
                    attr = createAttributeFromExpression(name);
144
                } 
145
                if (selectedContains(attr)) {
146
                    continue;
147
                }
148
                this.selecteds.add(attr);
149
            }
132 150
        }
133
      }
134
      updateControls();
151
        updateControls();
135 152
    }
153
    
154
    private boolean selectedContains(FeatureAttributeDescriptor attr) {
155
        for (FeatureAttributeDescriptor selected : selecteds) {
156
            if(StringUtils.equalsIgnoreCase(selected.getName(), attr.getName())){
157
                return true;
158
            }
159
        }
160
        return false;
161
    }
136 162

  
137 163
    private void doSelectAvailableColumn() {
138 164
        if( this.lstAvailableColumns.getSelectedIndex()>=0 || !this.expressionPicker.isEmpty()) {
......
212 238
    }
213 239

  
214 240
    private void doColumnRemove() {
215
        LabeledValue attr = (LabeledValue) this.lstSelectedColumns.getSelectedValue();
241
        FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstSelectedColumns.getSelectedValue();
216 242
        if( attr == null ) {
217 243
            return;
218 244
        }
219
        String label = attr.getLabel();
220
        int n = this.selecteds.indexOf(label);
245
        int n = this.selecteds.indexOf(attr);
221 246
        if( n<0 ) {
222 247
          return;
223 248
        }
224
        
225
        if (!checkIfAttributeInFeatureType(label)) {
249
        if(attr.getTags().getBoolean(ATTR_IS_EXPRESSION,false)){
226 250
            Expression toExp = ExpressionEvaluatorLocator.getManager().createExpression();
227
            toExp.setPhrase(label);
251
            toExp.setPhrase(attr.getLabel());
228 252
            this.expressionPicker.set(toExp);
229
        } 
230
 
253
        }
231 254
        this.selecteds.remove(n);
232 255
        this.updateControls();
233 256
    }
......
235 258
    private void doColumnAdd() {
236 259
        
237 260
        if (this.expressionPicker.isEmpty()) {
238
            LabeledValue attr = (LabeledValue) this.lstAvailableColumns.getSelectedValue();
261
            FeatureAttributeDescriptor attr = (FeatureAttributeDescriptor) this.lstAvailableColumns.getSelectedValue();
239 262
            if( attr == null ) {
240 263
                return;
241 264
            }
......
243 266
            if( n>=0 ) {
244 267
              return;
245 268
            }
246
            this.selecteds.add(attr.getLabel());
269
            this.selecteds.add(attr);
247 270
        } else {
248 271
            if (this.expressionPicker.isValid()) {
249 272
                Expression exp = this.expressionPicker.get();
250 273
                String expressionField = exp.getPhrase();
251
                int n = this.selecteds.indexOf(expressionField);
252
                if (n >= 0) {
253
                    return;
274
                FeatureAttributeDescriptor attr = createAttributeFromExpression(expressionField);
275
                for (FeatureAttributeDescriptor selected : this.selecteds) {
276
                    if(StringUtils.equals(attr.getName(),selected.getName())){
277
                        return;
278
                    }
254 279
                }
255
                this.selecteds.add(expressionField);
280
                this.selecteds.add(attr);
256 281
                this.expressionPicker.set(null);
257 282
            }
258 283
        }
259 284
        this.updateControls();
260 285
    }
286
    
287
    private FeatureAttributeDescriptor createAttributeFromExpression(String expressionField) {
288
        EditableFeatureAttributeDescriptor attr = DALLocator.getDataManager().createFeatureAttributeDescriptor(expressionField, DataTypes.STRING);
289
        attr.getTags().set(ATTR_IS_EXPRESSION, true);
290
        attr.setLabel(expressionField);
291
        return attr;
292
    }
261 293

  
262 294
    @Override
263 295
    public void setStore(FeatureStore store) {
......
337 369
        int indexSelecteds = this.lstSelectedColumns.getSelectedIndex();
338 370
        FilteredListModel modelAvailables = ToolsSwingLocator.getToolsSwingManager().createFilteredListModel();
339 371
        FilteredListModel modelSelecteds = ToolsSwingLocator.getToolsSwingManager().createFilteredListModel();
372
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
340 373
        for (FeatureAttributeDescriptor attr : featureType) {
341
            if( !this.selecteds.contains(attr.getName()) ) {
342
                modelAvailables.addElement(attr.getName()); //label?
374
            if (!selectedContains(attr)) {
375
                modelAvailables.addElement(attr);
343 376
            }
344 377
        }
345 378
        List<EditableFeatureAttributeDescriptor> columns = featureType.getExtraColumns().getColumns();
346 379
        if (columns!=null && !columns.isEmpty()) {
347 380
            for (EditableFeatureAttributeDescriptor extraCol : columns) {
348
                if( !this.selecteds.contains(extraCol.getName()) ) {
349
                    modelAvailables.addElement(extraCol.getName());
381
                if (!selectedContains(extraCol)) {
382
                    modelAvailables.addElement(extraCol);
350 383
                }
351 384
            }
352 385
        }
353 386
        
354 387
        if (this.extraColumns!=null && !this.extraColumns.isEmpty()) {
355 388
            for (FeatureAttributeDescriptor extraCol : this.extraColumns) {
356
                if( !this.selecteds.contains(extraCol.getName()) ) {
357
                    modelAvailables.addElement(extraCol.getName());
389
                if (!selectedContains(extraCol)) {
390
                    modelAvailables.addElement(extraCol);
358 391
                }
359 392
            }
360 393
        }
361 394
        
362 395
        modelAvailables.setFilter(this.txtColumnsFilter.getText());
363 396
        modelAvailables.sort(true);
364
        for (String name : this.selecteds) {
365
            modelSelecteds.addElement(name);
397
        for (FeatureAttributeDescriptor attr : this.selecteds) {
398
            modelSelecteds.addElement(attr);
366 399
        }
367 400
        modelAvailables.sort(true);
368 401
        this.lstAvailableColumns.setModel(modelAvailables);
......
433 466
        this.btnExpression.setVisible(this.allowCalculatedAttributes);
434 467
        this.txtExpression.setVisible(this.allowCalculatedAttributes);
435 468
    }
469
    
470
    private FeatureAttributeDescriptor getAttributeDescriptor(String name) {
471
        if(this.featureType == null){
472
            return null;
473
        }
474
        FeatureAttributeDescriptor attr = this.featureType.getAttributeDescriptorFromAll(name);
475
        if(attr != null){
476
            return attr;
477
        }
478
        if(this.extraColumns == null){
479
            return null;
480
        }
481
        for (EditableFeatureAttributeDescriptor extraColumn : this.extraColumns) {
482
            if(StringUtils.equalsIgnoreCase(extraColumn.getName(), name)){
483
                return extraColumn;
484
            }
485
        }
486
        return null;
487
    }
436 488
}

Also available in: Unified diff