Statistics
| Revision:

gvsig-lrs / org.gvsig.lrs / trunk / org.gvsig.lrs / org.gvsig.lrs.swing / org.gvsig.lrs.swing.impl / src / main / java / org / gvsig / lrs / swing / impl / JLrsEditRouteCalibrationSelectIdRouteController.java @ 11

History | View | Annotate | Download (11.2 KB)

1
/*
2
 * Copyright 2015 DiSiD Technologies S.L.L. All rights reserved.
3
 *
4
 * Project  : DiSiD org.gvsig.lrs.swing.impl
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.lrs.swing.impl;
8

    
9
import java.awt.event.ActionEvent;
10
import java.awt.event.ActionListener;
11
import java.util.Locale;
12

    
13
import javax.swing.JComponent;
14
import javax.swing.ListCellRenderer;
15

    
16
import org.gvsig.fmap.dal.exception.DataException;
17
import org.gvsig.fmap.dal.exception.ReadException;
18
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
19
import org.gvsig.fmap.dal.feature.FeatureStore;
20
import org.gvsig.fmap.dal.feature.FeatureType;
21
import org.gvsig.fmap.geom.DataTypes;
22
import org.gvsig.fmap.geom.Geometry;
23
import org.gvsig.fmap.mapcontext.layers.FLayer;
24
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
25
import org.gvsig.lrs.lib.api.LrsAlgorithmParams;
26
import org.gvsig.lrs.lib.api.LrsAlgorithmsLocator;
27
import org.gvsig.lrs.lib.api.LrsAlgorithmsManager;
28
import org.gvsig.lrs.lib.api.LrsEditRouteCalibrationAlgorithmParams;
29
import org.gvsig.lrs.lib.api.LrsEditRouteCalibrationSelectIdRouteAlgorithmParams;
30
import org.gvsig.lrs.lib.api.exceptions.LrsGettingParametersException;
31
import org.gvsig.lrs.lib.api.exceptions.LrsNeededParameterException;
32
import org.gvsig.lrs.swing.api.JLrsAlgorithmParams;
33
import org.gvsig.tools.ToolsLocator;
34
import org.gvsig.tools.i18n.I18nManager;
35
import org.gvsig.tools.swing.api.ActionListenerSupport;
36
import org.gvsig.tools.swing.api.ToolsSwingLocator;
37
import org.slf4j.Logger;
38
import org.slf4j.LoggerFactory;
39

    
40
public class JLrsEditRouteCalibrationSelectIdRouteController extends
41
    JLrsEditRouteCalibrationSelectIdRouteView implements JLrsAlgorithmParams {
42

    
43
    /**
44
     *
45
     */
46
    private static final long serialVersionUID = 7762321351616631999L;
47

    
48
    private static final Logger logger = LoggerFactory
49
        .getLogger(JLrsEditRouteCalibrationSelectIdRouteController.class);
50

    
51
    private boolean canceled;
52
    private ActionListenerSupport listeners =
53
        ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
54

    
55
    private FLayer layer;
56

    
57
    /**
58
     * @param layer
59
     * @throws LrsNeededParameterException
60
     *
61
     */
62
    public JLrsEditRouteCalibrationSelectIdRouteController(FLayer layer,
63
        LrsAlgorithmParams params) throws LrsNeededParameterException {
64
        super();
65
        this.layer = layer;
66
        initComponents();
67
        translate();
68
        setParams(params);
69
    }
70

    
71
    public void addActionListener(ActionListener listener) {
72
        listeners.addActionListener(listener);
73
    }
74

    
75
    public void removeActionListener(ActionListener listener) {
76
        listeners.removeActionListener(listener);
77
    }
78

    
79
    private void translate() {
80
        I18nManager i18nManager = ToolsLocator.getI18nManager();
81
        lblIdRouteField
82
            .setText(i18nManager.getTranslation(lblIdRouteField.getText()));
83
        btnAccept.setText(i18nManager.getTranslation(btnAccept.getText()));
84
        btnCancel.setText(i18nManager.getTranslation(btnCancel.getText()));
85

    
86
    }
87

    
88
    /**
89
    *
90
    */
91
    public void setLocate(Locale locale) {
92
        Locale l = super.getLocale();
93
        if (!l.equals(locale)) {
94
            translate();
95
        }
96
        super.setLocale(locale);
97
    }
98

    
99
    /**
100
     * Validates it is an editable curve layer with at least 1 non-geometric
101
     * field
102
     * if it is not correct throws an exception
103
     *
104
     * @throws LrsNeededParameterException
105
     * @throws ReadException
106
     */
107
    public static void validateLayer(FLayer layer)
108
        throws LrsNeededParameterException {
109
        logger.debug("Validating layer for Edit Route");
110
        if (layer == null) {
111
            logger.error("A layer is needed");
112
            throw new LrsNeededParameterException("a_layer_is_needed", null);
113
        }
114

    
115
        if (!layer.isEditing()) {
116
            logger.error("An editing layer is needed");
117
            throw new LrsNeededParameterException("an_editing_layer_is_needed",
118
                null);
119
        }
120

    
121
        if (!correctLayerFound(layer)) {
122
            logger.error("Impossible to find the layers needed");
123
            throw new LrsNeededParameterException(
124
                "impossible_to_find_needed_layer", null);
125
        }
126
    }
127

    
128
    /**
129
     * @throws LrsNeededParameterException
130
     */
131
    private void initComponents() throws LrsNeededParameterException {
132

    
133
        validateLayer(layer);
134

    
135
        if (layer instanceof FLyrVect) {
136
            initCmbIdRouteField((FLyrVect)layer);
137
        }
138

    
139
        this.btnAccept.addActionListener(new ActionListener() {
140

    
141
            public void actionPerformed(ActionEvent e) {
142
                canceled = false;
143
                doClose();
144
                listeners.fireActionEvent(new ActionEvent(
145
                    JLrsEditRouteCalibrationSelectIdRouteController.this, 0,
146
                    "accept"));
147

    
148
            }
149
        });
150

    
151
        this.btnCancel.addActionListener(new ActionListener() {
152

    
153
            public void actionPerformed(ActionEvent e) {
154
                canceled = true;
155
                doClose();
156
                listeners.fireActionEvent(new ActionEvent(
157
                    JLrsEditRouteCalibrationSelectIdRouteController.this, 0,
158
                    "cancel"));
159
            }
160
        });
161

    
162
        setVisibleAceptCancel(false);
163
        canceled = false;
164
    }
165

    
166
    private void initCmbIdRouteField(FLyrVect layer){
167
        // Modelos de los combos
168
        FeatureAttributeDescriptorsComboBoxModel idRouteFieldComboBoxModel =
169
            new FeatureAttributeDescriptorsComboBoxModel();
170

    
171
        // Renderer para los combos de attributeDescriptors
172
        ListCellRenderer featureAttributeDescriptorCellRenderer =
173
            new FLayersAttributeDescriptorCellRenderer();
174
        // asignaci?n de renderers y modelos
175
        cmbIdRouteField.setRenderer(featureAttributeDescriptorCellRenderer);
176
        cmbIdRouteField.setModel(idRouteFieldComboBoxModel);
177

    
178
        FeatureStore featureStore = layer.getFeatureStore();
179
        try {
180
            FeatureType type = featureStore.getDefaultFeatureType();
181
            FeatureAttributeDescriptor[] attributeDescriptors = type.getAttributeDescriptors();
182
            for (int i = 0; i < attributeDescriptors.length; i++) {
183
                FeatureAttributeDescriptor featureAttributeDescriptor = attributeDescriptors[i];
184
                if (featureAttributeDescriptor.getDataType().getType() != DataTypes.GEOMETRY) {
185
                    logger.info(new StringBuilder().append("Adding field ")
186
                        .append(featureAttributeDescriptor.getName()).toString());
187
                    cmbIdRouteField.addItem(featureAttributeDescriptor);
188
                }
189
            }
190

    
191
        } catch (DataException e1) {
192
            logger.warn(
193
                new StringBuilder().append("Error getting default feature type from layer ").append(layer.getName())
194
                    .toString(), e1);
195
        }
196
    }
197

    
198
    private void doClose() {
199
        this.setVisible(false);
200
    }
201

    
202
    public boolean isCanceled() {
203
        return this.canceled;
204
    }
205

    
206
    public void setVisibleAceptCancel(boolean visible) {
207
        this.btnAccept.setVisible(visible);
208
        this.btnCancel.setVisible(visible);
209
    }
210

    
211
    public boolean getVisibleAceptCancel() {
212
        return this.btnAccept.isVisible();
213
    }
214

    
215
    public JComponent asJComponent() {
216
        return this;
217
    }
218

    
219
    public LrsAlgorithmParams getParams()
220
        throws LrsGettingParametersException, LrsNeededParameterException {
221
        LrsAlgorithmsManager manager =
222
            LrsAlgorithmsLocator.getLrsAlgorithmsManager();
223
        LrsEditRouteCalibrationSelectIdRouteAlgorithmParams params =
224
            manager.createLrsEditRouteCalibrationSelectIdRouteAlgorithmParams();
225
            // Recorrer todo del interfaz y rellenar los parametros
226

    
227
        // cmbIdRouteField
228
        if (!(this.cmbIdRouteField
229
            .getSelectedItem() instanceof FeatureAttributeDescriptor)) {
230
            logger.error("Error getting selected item from cmbIdRouteField");
231
            throw new LrsGettingParametersException(
232
                "error_getting_selected_item_from_cmbIdRouteField", null);
233
        }
234
        FeatureAttributeDescriptor idRouteField =
235
            (FeatureAttributeDescriptor) this.cmbIdRouteField.getSelectedItem();
236
        if (idRouteField == null) {
237
            throw new LrsNeededParameterException(
238
                "need_to_select_a_route_identifier_field", null);
239
        }
240
        params.setIdRouteField(idRouteField);
241

    
242
        return params;
243
    }
244

    
245
    public void setParams(LrsAlgorithmParams params) {
246
        if (params == null) {
247
            clear();
248
            return;
249
        }
250
        // Rellena los campos con los valores de params
251
        LrsEditRouteCalibrationSelectIdRouteAlgorithmParams parameters =
252
            (LrsEditRouteCalibrationSelectIdRouteAlgorithmParams) params;
253

    
254
        this.cmbIdRouteField.setSelectedItem(parameters.getIdRouteField());
255

    
256
    }
257

    
258
    public void clear() {
259
        this.cmbIdRouteField.setSelectedIndex(0);
260
    }
261

    
262
    /**
263
     * Tries to find one curve M-layer with at least one non-geometrical field
264
     *
265
     * @param FLayer
266
     * @return
267
     * @throws ReadException
268
     */
269
    private static boolean correctLayerFound(FLayer layer) {
270
        boolean correctLayerFound = false;
271
        // Validates is FLyrVect
272
        FLyrVect lyrVect = null;
273
        if (layer instanceof FLyrVect) {
274
            lyrVect = (FLyrVect) layer;
275
        } else
276
            return false;
277

    
278
        try {
279
            if (lyrVect != null && (lyrVect.getGeometryType()
280
                .isTypeOf(Geometry.TYPES.CURVE)
281
                || lyrVect.getGeometryType().isTypeOf(Geometry.TYPES.MULTICURVE))) {
282
                //TODO M-geometry commented to test button
283
//                if (lyrVect.getGeometryType()
284
//                    .isSubTypeOf(Geometry.SUBTYPES.GEOM2DM) ||
285
//                    lyrVect.getGeometryType()
286
//                    .isSubTypeOf(Geometry.SUBTYPES.GEOM3DM)) {
287
                    FeatureStore featureStore = lyrVect.getFeatureStore();
288
                    try {
289
                        FeatureType type = featureStore.getDefaultFeatureType();
290

    
291
                        FeatureAttributeDescriptor[] attributeDescriptors =
292
                            type.getAttributeDescriptors();
293
                        for (int i = 0; i < attributeDescriptors.length; i++) {
294
                            FeatureAttributeDescriptor featureAttributeDescriptor =
295
                                attributeDescriptors[i];
296
                            if (featureAttributeDescriptor.getDataType()
297
                                .getType() != DataTypes.GEOMETRY) {
298
                                logger.debug("Correct curve layer found");
299
                                return true;
300
                            }
301
                        }
302
                        // type.getDefaultGeometryAttribute().getGeomType().isSubTypeOf(Geometry.SUBTYPES.GEOM2DM)
303

    
304
                    } catch (DataException e1) {
305
                        logger.warn(new StringBuilder()
306
                            .append(
307
                                "Error getting default feature type from layer ")
308
                            .append(lyrVect.getName()).toString(), e1);
309
                    }
310

    
311
                //}
312
            }
313
        } catch (Exception e) {
314
            logger.error("Can't get linear vector layers", e);
315
        }
316
        return correctLayerFound;
317
    }
318
}