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 / DefaultFeatureTypeAttributePanel.java @ 44079

History | View | Annotate | Download (11.9 KB)

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

    
3
import java.util.ArrayList;
4
import java.util.Comparator;
5
import java.util.List;
6
import javax.swing.DefaultComboBoxModel;
7
import javax.swing.JComponent;
8
import org.cresques.cts.IProjection;
9
import org.gvsig.expressionevaluator.Expression;
10
import org.gvsig.expressionevaluator.swing.CalculatorController;
11
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
12
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
13
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
14
import org.gvsig.fmap.dal.DataTypes;
15
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
16
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
18
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
19
import org.gvsig.fmap.dal.swing.DALSwingLocator;
20
import org.gvsig.fmap.geom.Geometry;
21
import org.gvsig.timesupport.RelativeInterval;
22
import org.gvsig.tools.ToolsLocator;
23
import org.gvsig.tools.dataTypes.DataTypesManager;
24
import org.gvsig.tools.swing.api.ListElement;
25
import org.gvsig.tools.swing.api.ToolsSwingLocator;
26
import org.gvsig.tools.swing.api.ToolsSwingManager;
27
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
28
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
29

    
30
/**
31
 *
32
 * @author jjdelcerro
33
 */
34
public class DefaultFeatureTypeAttributePanel 
35
        extends FeatureTypeAttributePanelView 
36
        implements FeatureTypeAttributePanel 
37
    {
38

    
39
    private final List<ListElement<Integer>> fieldTypes;
40
    private final List<ListElement<Integer>> geometryTypes;
41
    private final List<ListElement<Integer>> geometrySubtypes;
42
    
43
    private DatePickerController pickerIntervalEnd;
44
    private DatePickerController pickerIntervalStart;
45
    private CalculatorController<Integer> pickerSize;
46
    private CalculatorController<Integer> pickerPrecision;
47
    private CalculatorController<Object> pickerDefaultValue;
48
    private CalculatorController<String> pickerFieldName;
49
    private PickerController<IProjection> pickerCRS;
50
    private ExpressionPickerController pickerVirtualField;
51

    
52

    
53
    public DefaultFeatureTypeAttributePanel() {
54
        DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
55
        this.fieldTypes = new ArrayList<>();
56
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BOOLEAN), DataTypes.BOOLEAN));
57
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DATE), DataTypes.DATE));
58
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.TIME), DataTypes.TIME));
59
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.TIMESTAMP), DataTypes.TIMESTAMP));
60
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INT), DataTypes.INT));
61
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DOUBLE), DataTypes.DOUBLE));
62
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.LONG), DataTypes.LONG));
63
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INTERVAL), DataTypes.INTERVAL));
64
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DOUBLE), DataTypes.DOUBLE));
65
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.STRING), DataTypes.STRING));
66
        this.fieldTypes.sort(new Comparator<ListElement<Integer>>() {
67
            @Override
68
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
69
                return o1.toString().compareTo(o2.toString());
70
            }
71
        });
72

    
73
        this.geometryTypes = new ArrayList<>();
74
        this.geometryTypes.add(new ListElement("Point", Geometry.TYPES.POINT));
75
        this.geometryTypes.add(new ListElement("Line", Geometry.TYPES.LINE));
76
        this.geometryTypes.add(new ListElement("Polygon", Geometry.TYPES.POLYGON));
77
        this.geometryTypes.add(new ListElement("MultiPoint", Geometry.TYPES.MULTIPOINT));
78
        this.geometryTypes.add(new ListElement("MultiLine", Geometry.TYPES.MULTILINE));
79
        this.geometryTypes.add(new ListElement("MultiPolygon", Geometry.TYPES.MULTIPOLYGON));
80
        this.geometryTypes.sort(new Comparator<ListElement<Integer>>() {
81
            @Override
82
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
83
                return o1.toString().compareTo(o2.toString());
84
            }
85
        });
86
        
87
        this.geometrySubtypes = new ArrayList<>();
88
        this.geometrySubtypes.add(new ListElement("2D", Geometry.SUBTYPES.GEOM2D));
89
        this.geometrySubtypes.add(new ListElement("2DM", Geometry.SUBTYPES.GEOM3D));
90
        this.geometrySubtypes.add(new ListElement("3D", Geometry.SUBTYPES.GEOM2DM));
91
        this.geometrySubtypes.add(new ListElement("3DM", Geometry.SUBTYPES.GEOM3DM));
92
        this.geometrySubtypes.sort(new Comparator<ListElement<Integer>>() {
93
            @Override
94
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
95
                return o1.toString().compareTo(o2.toString());
96
            }
97
        });
98
        
99
        this.initComponents();
100
    }
101
    
102
    private void initComponents() {
103
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
104
        ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager();
105

    
106
        DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>();
107
        for (ListElement<Integer> element : fieldTypes) {
108
            modelTypes.addElement(element);
109
        }
110
        this.cboFieldType.setModel(modelTypes);
111

    
112
        DefaultComboBoxModel<ListElement<Integer>> modelGeomTypes = new DefaultComboBoxModel<>();
113
        for (ListElement<Integer> element : this.geometryTypes) {
114
            modelGeomTypes.addElement(element);
115
        }
116
        this.cboGeometryType.setModel(modelGeomTypes);
117

    
118
        DefaultComboBoxModel<ListElement<Integer>> modelGeomSubtypes = new DefaultComboBoxModel<>();
119
        for (ListElement<Integer> element : this.geometrySubtypes) {
120
            modelGeomSubtypes.addElement(element);
121
        }
122
        this.cboGeometryType.setModel(modelGeomSubtypes);
123
        
124
        swingManager.addClearButton(this.txtDefaultValue);
125
        swingManager.addClearButton(this.txtFieldName);
126
        swingManager.addClearButton(this.txtIntervalEnd);
127
        swingManager.addClearButton(this.txtIntervalStart);
128
        swingManager.addClearButton(this.txtPrecision);
129
        swingManager.addClearButton(this.txtSize);
130
        
131
        swingManager.setDefaultPopupMenu(this.txtDefaultValue);
132
        swingManager.setDefaultPopupMenu(this.txtFieldName);
133
        swingManager.setDefaultPopupMenu(this.txtIntervalEnd);
134
        swingManager.setDefaultPopupMenu(this.txtIntervalStart);
135
        swingManager.setDefaultPopupMenu(this.txtPrecision);
136
        swingManager.setDefaultPopupMenu(this.txtSize);
137
        swingManager.setDefaultPopupMenu(this.cboDateFormat);
138
        swingManager.setDefaultPopupMenu(this.cboFieldType);
139
        swingManager.setDefaultPopupMenu(this.cboGeometrySubtype);
140
        swingManager.setDefaultPopupMenu(this.cboGeometryType);
141
        
142
        this.pickerIntervalEnd = swingManager.createDatePickerController(
143
                this.txtIntervalEnd, 
144
                this.btnIntervalEnd
145
        );
146
        this.pickerIntervalStart = swingManager.createDatePickerController(
147
                this.txtIntervalStart, 
148
                this.btnIntervalStart
149
        );
150
        this.pickerSize = evaluatorManager.createCalculatorController(
151
                this.txtSize,DataTypes.INT
152
        );
153
        this.pickerPrecision = evaluatorManager.createCalculatorController(
154
                this.txtPrecision,DataTypes.INT
155
        );
156
        this.pickerFieldName = evaluatorManager.createCalculatorController(
157
                this.txtFieldName,DataTypes.STRING
158
        );
159
        this.pickerDefaultValue = evaluatorManager.createCalculatorController(
160
                this.txtDefaultValue,DataTypes.OBJECT
161
        );
162
        
163
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
164
                .createExpressionPickerController(txtVirtualField, btnVirtualField);
165

    
166
        this.pickerCRS = DALSwingLocator.getSwingManager()
167
                .createProjectionPickerController(this.txtCRS, this.btnCRS);
168
        
169
    }
170
    
171
    @Override
172
    public JComponent asJComponent() {
173
        return this;
174
    }
175

    
176
    @Override
177
    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) {
178
        return descriptor;
179
    }
180

    
181
    public void clean() {
182
        this.pickerDefaultValue.set(null);
183
        this.pickerFieldName.set(null);
184
        this.pickerIntervalEnd.set(null);
185
        this.pickerIntervalStart.set(null);
186
        this.pickerPrecision.set(null);
187
        this.pickerSize.set(null);
188

    
189
        this.chkAllowNulls.setSelected(false);
190
        this.chkIsAutomatic.setSelected(false);
191
        this.chkIsPrimaryKey.setSelected(false);
192
        
193
        this.chkVirtualField.setSelected(false);
194
        this.chkVirtualField.setEnabled(true);
195
        this.pickerVirtualField.setEnabled(false);
196
        this.pickerVirtualField.set(null);
197

    
198
        ListElement.setSelected(cboFieldType, null);
199
        ListElement.setSelected(cboGeometryType, null);
200
        ListElement.setSelected(cboGeometrySubtype, null);
201
    }
202
    
203
    @Override
204
    public void put(FeatureAttributeDescriptor descriptor) {
205
        if( descriptor == null ) {
206
            this.clean();
207
            return;
208
        }
209
        this.pickerDefaultValue.set(descriptor.getDefaultValue());
210
        this.pickerFieldName.set(descriptor.getName());
211
        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
212
        if( interval==null ) {
213
//            this.pickerIntervalEnd.set(null);
214
//            this.pickerIntervalStart.set(null);
215
        } else {
216
            this.pickerIntervalEnd.set(interval.getEnd().toDate());
217
            this.pickerIntervalStart.set(interval.getStart().toDate());
218
        }
219
        this.pickerPrecision.set(descriptor.getPrecision());
220
        this.pickerSize.set(descriptor.getSize());
221
        
222
        this.chkAllowNulls.setSelected(descriptor.allowNull());
223
        this.chkIsAutomatic.setSelected(descriptor.isAutomatic());
224
        this.chkIsPrimaryKey.setSelected(descriptor.isPrimaryKey());
225
        
226
        FeatureAttributeEmulator attrEmulator = descriptor.getFeatureAttributeEmulator();
227
        if( attrEmulator instanceof FeatureAttributeEmulatorExpression ) {
228
            Expression expression = ((FeatureAttributeEmulatorExpression) attrEmulator).getExpression();
229
            this.chkVirtualField.setEnabled(true);
230
            this.chkVirtualField.setSelected(true);
231
            this.pickerVirtualField.set(expression);
232
            this.pickerVirtualField.setEnabled(true);
233
        } else if( descriptor.isComputed() ) {
234
            this.chkVirtualField.setSelected(true);
235
            this.chkVirtualField.setEnabled(false);
236
            this.pickerVirtualField.setEnabled(false);
237
            this.pickerVirtualField.set(null);
238
        } else {
239
            this.chkVirtualField.setSelected(false);
240
            this.chkVirtualField.setEnabled(true);
241
            this.pickerVirtualField.setEnabled(false);
242
            this.pickerVirtualField.set(null);
243
        }
244
        
245
        this.pickerCRS.set(descriptor.getSRS());
246
        
247
        ListElement.setSelected(cboFieldType, descriptor.getType());
248
        if( descriptor.getType()==DataTypes.GEOMETRY ) {
249
            ListElement.setSelected(cboGeometryType, descriptor.getGeomType().getType());
250
            ListElement.setSelected(cboGeometrySubtype, descriptor.getGeomType().getSubType());
251
            this.cboGeometryType.setEnabled(true);
252
            this.cboGeometrySubtype.setEnabled(true);
253
        } else {
254
            this.cboGeometryType.setEnabled(false);
255
            this.cboGeometrySubtype.setEnabled(false);
256
        }
257
        
258
    }
259

    
260
    public void setReadonly(boolean readonly) {
261
        
262
    }
263
}