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 / featuretype / DefaultAttributeDescriptorPickerController.java @ 44164

History | View | Annotate | Download (3.87 KB)

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

    
3
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
4
import java.awt.event.ItemEvent;
5
import java.awt.event.ItemListener;
6
import java.util.ArrayList;
7
import java.util.Comparator;
8
import java.util.List;
9
import java.util.function.Predicate;
10
import javax.swing.DefaultComboBoxModel;
11
import javax.swing.JComboBox;
12
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
13
import org.gvsig.fmap.dal.feature.FeatureType;
14
import org.gvsig.tools.swing.api.ListElement;
15
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
16

    
17
/**
18
 *
19
 * @author jjdelcerro
20
 */
21
public class DefaultAttributeDescriptorPickerController         
22
        extends AbstractPickerController<FeatureAttributeDescriptor> 
23
        implements AttributeDescriptorPickerController
24
    {
25

    
26
    private final JComboBox combo;
27
    private FeatureType featureType;
28
    private final Predicate<FeatureAttributeDescriptor> filter;
29

    
30
    public DefaultAttributeDescriptorPickerController(JComboBox combo, Predicate<FeatureAttributeDescriptor> filter) {
31
        this.combo = combo; 
32
        this.combo.setEditable(false);
33
        this.combo.addItemListener(new ItemListener() {
34
            @Override
35
            public void itemStateChanged(ItemEvent e) {
36
                fireChangeEvent();
37
            }
38
        });
39
        this.filter = filter;
40
    }
41
    
42
    public void setFeatureType(FeatureType featureType) {
43
        this.featureType = featureType;
44
        List<FeatureAttributeDescriptor> attributes = new ArrayList<>();
45
        for (FeatureAttributeDescriptor descriptor : featureType) {
46
            if( filter==null || filter.test(descriptor) ) {
47
                attributes.add(descriptor);
48
            }
49
        }
50
        attributes.sort(new Comparator<FeatureAttributeDescriptor>() {
51
            @Override
52
            public int compare(FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) {
53
                return o1.getName().compareToIgnoreCase(o2.getName());
54
            }
55
        });
56
        DefaultComboBoxModel model = new DefaultComboBoxModel();
57
        for (FeatureAttributeDescriptor descriptor : attributes) {
58
            String nameDescription = descriptor.getName() + " [" + descriptor.getDataTypeName() + "]";
59
            model.addElement(new ListElement<>(nameDescription, descriptor));
60
        }
61
        this.combo.setModel(model);
62
        if( this.combo.getModel().getSize()>0 ) {
63
            this.combo.setSelectedIndex(0);
64
        } else {
65
            this.combo.setSelectedIndex(-1);
66
        }
67
    }
68
    
69
    @Override
70
    public FeatureAttributeDescriptor get() {
71
        FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) ListElement.getSelected(this.combo);
72
        return descriptor;
73
    }
74

    
75
    @Override
76
    public void set(FeatureAttributeDescriptor descriptor) {
77
        ListElement.setSelected(this.combo, descriptor);
78
    }
79

    
80
    @Override
81
    public void set(String name) {
82
        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(name);
83
        if( descriptor == null ) {
84
            // throw new IllegalArgumentException("The field '"+name+" don't exists.");
85
            this.combo.setSelectedIndex(-1);
86
            return;
87
        }
88
        this.set(descriptor);
89
    }
90

    
91
    @Override
92
    public void coerceAndSet(Object descriptor) {
93
        this.set((FeatureAttributeDescriptor) descriptor);
94
    }
95

    
96
    @Override
97
    public void setEnabled(boolean enabled) {
98
        this.combo.setEnabled(enabled);
99
    }
100

    
101
    @Override
102
    public boolean isEnabled() {
103
        return this.combo.isEnabled();
104
    }
105

    
106
    @Override
107
    public String getName() {
108
        FeatureAttributeDescriptor descriptor = this.get();
109
        if( descriptor==null ) {
110
            return null;
111
        }
112
        return descriptor.getName();
113
    }
114

    
115
    @Override
116
    public void clean() {
117
        this.combo.setSelectedIndex(-1);
118
    }
119

    
120
    
121
}