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 / JLrsCreateRouteParamsController.java @ 16

History | View | Annotate | Download (23.4 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2015 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.lrs.swing.impl;
24

    
25
import java.awt.Component;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import java.awt.event.ItemEvent;
29
import java.awt.event.ItemListener;
30
import java.io.File;
31
import java.util.Locale;
32

    
33
import javax.swing.ComboBoxModel;
34
import javax.swing.DefaultComboBoxModel;
35
import javax.swing.DefaultListCellRenderer;
36
import javax.swing.JComponent;
37
import javax.swing.JLabel;
38
import javax.swing.JList;
39
import javax.swing.JOptionPane;
40
import javax.swing.ListCellRenderer;
41

    
42
import org.apache.commons.io.FileUtils;
43
import org.apache.commons.lang3.StringUtils;
44
import org.cresques.cts.IProjection;
45
import org.gvsig.fmap.dal.DALLocator;
46
import org.gvsig.fmap.dal.DataManager;
47
import org.gvsig.fmap.dal.DataParameters;
48
import org.gvsig.fmap.dal.DataServerExplorer;
49
import org.gvsig.fmap.dal.DataServerExplorerParameters;
50
import org.gvsig.fmap.dal.DataStoreParameters;
51
import org.gvsig.fmap.dal.NewDataStoreParameters;
52
import org.gvsig.fmap.dal.exception.DataException;
53
import org.gvsig.fmap.dal.exception.InitializeException;
54
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
55
import org.gvsig.fmap.dal.exception.ReadException;
56
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
57
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
58
import org.gvsig.fmap.dal.feature.EditableFeatureType;
59
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
60
import org.gvsig.fmap.dal.feature.FeatureStore;
61
import org.gvsig.fmap.dal.feature.FeatureType;
62
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
63
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
64
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters;
65
import org.gvsig.fmap.geom.DataTypes;
66
import org.gvsig.fmap.geom.Geometry;
67
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
68
import org.gvsig.fmap.geom.Geometry.TYPES;
69
import org.gvsig.fmap.geom.GeometryException;
70
import org.gvsig.fmap.geom.GeometryLocator;
71
import org.gvsig.fmap.mapcontext.layers.FLayer;
72
//import org.gvsig.fmap.mapcontext.layers.FLayers;
73
import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
74
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
75
import org.gvsig.lrs.lib.api.LrsAlgorithmParams;
76
import org.gvsig.lrs.lib.api.LrsAlgorithmsLocator;
77
import org.gvsig.lrs.lib.api.LrsAlgorithmsManager;
78
import org.gvsig.lrs.lib.api.LrsCalibrateRouteAlgorithmParams;
79
import org.gvsig.lrs.lib.api.LrsCoordinatesPriority;
80
import org.gvsig.lrs.lib.api.LrsCreateRouteAlgorithmParams;
81
import org.gvsig.lrs.lib.api.LrsSourceOfMeasures;
82
import org.gvsig.lrs.lib.api.exceptions.LrsGettingParametersException;
83
import org.gvsig.lrs.lib.api.exceptions.LrsNeededParameterException;
84
import org.gvsig.lrs.swing.api.JLrsAlgorithmParams;
85
import org.gvsig.tools.ToolsLocator;
86
import org.gvsig.tools.dynobject.DynClass;
87
import org.gvsig.tools.dynobject.DynObject;
88
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
89
import org.gvsig.tools.dynobject.exception.DynMethodException;
90
import org.gvsig.tools.exception.BaseException;
91
import org.gvsig.tools.i18n.I18nManager;
92
import org.gvsig.tools.locator.LocatorException;
93
import org.gvsig.tools.persistence.PersistentState;
94
import org.gvsig.tools.persistence.case1.model.Projection;
95
import org.gvsig.tools.persistence.exception.PersistenceException;
96
import org.gvsig.tools.swing.api.ActionListenerSupport;
97
import org.gvsig.tools.swing.api.ToolsSwingLocator;
98
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
99
import org.slf4j.Logger;
100
import org.slf4j.LoggerFactory;
101

    
102
/**
103
 * @author fdiaz
104
 *
105
 */
106
public class JLrsCreateRouteParamsController extends JLrsCreateRouteParamsView implements JLrsAlgorithmParams {
107

    
108
    /**
109
     *
110
     */
111
    private static final long serialVersionUID = 273909136196706713L;
112

    
113
    private static final Logger logger = LoggerFactory.getLogger(JLrsCreateRouteParamsController.class);
114

    
115
    private boolean canceled;
116
    private ActionListenerSupport listeners = ToolsSwingLocator.getToolsSwingManager().createActionListenerSupport();
117

    
118
    private LayerCollection layers;
119

    
120
    /**
121
     * @param layers
122
     * @throws LrsNeededParameterException
123
     *
124
     */
125
    public JLrsCreateRouteParamsController(LayerCollection layers, LrsAlgorithmParams params) throws LrsNeededParameterException {
126
        super();
127
        this.layers = layers;
128
        initComponents();
129
        translate();
130
        setParams(params);
131
    }
132

    
133
    public void addActionListener(ActionListener listener) {
134
        listeners.addActionListener(listener);
135
    }
136

    
137
    public void removeActionListener(ActionListener listener) {
138
        listeners.removeActionListener(listener);
139
    }
140

    
141
    private void translate() {
142
        I18nManager i18nManager = ToolsLocator.getI18nManager();
143

    
144
        lblInputLayer.setText(i18nManager.getTranslation(lblInputLayer.getText()));
145
        lblIdRouteField.setText(i18nManager.getTranslation(lblIdRouteField.getText()));
146
        lblOutputFile.setText(i18nManager.getTranslation(lblOutputFile.getText()));
147
        lblMeasureSource.setText(i18nManager.getTranslation(lblMeasureSource.getText()));
148
        lblFromMeasureField.setText(i18nManager.getTranslation(lblFromMeasureField.getText()));
149
        lblToMeasureField.setText(i18nManager.getTranslation(lblToMeasureField.getText()));
150
        lblCoordinatesPriority.setText(i18nManager.getTranslation(lblCoordinatesPriority.getText()));
151
        lblMeasureFactor.setText(i18nManager.getTranslation(lblMeasureFactor.getText()));
152
        lblMeasureOffset.setText(i18nManager.getTranslation(lblMeasureOffset.getText()));
153
        chkIgnoreSpatialGaps.setText(i18nManager.getTranslation(chkIgnoreSpatialGaps.getText()));
154
        btnBrowser.setText("\u2026");
155
        btnAccept.setText(i18nManager.getTranslation(btnAccept.getText()));
156
        btnCancel.setText(i18nManager.getTranslation(btnCancel.getText()));
157

    
158
    }
159

    
160
    /**
161
     *
162
     */
163
    public void setLocate(Locale locale) {
164
        Locale l = super.getLocale();
165
        if (!l.equals(locale)) {
166
            translate();
167
        }
168
        super.setLocale(locale);
169
    }
170

    
171
    /**
172
     * Validates the layers:
173
     *  - At least 1 curve layer with at least 1 non-geometrical field
174
     *  if they are not correct throws an exception
175
     * @throws LrsNeededParameterException
176
     */
177
    public static void validateLayers(LayerCollection layers)throws LrsNeededParameterException {
178
        logger.debug("Validating layers for Create Route");
179
        if (layers==null||layers.getLayersCount()<1){
180
            logger.error("Al least one layer is needed");
181
            throw new LrsNeededParameterException("at_least_one_layer_needed", null);
182
        }
183

    
184
        if (!JLrsUtilsController.validateOneCurveLyrOneNonGeomField(layers)){
185
            logger.error("Impossible to find the layer needed");
186
            throw new LrsNeededParameterException("impossible_to_find_needed_layer",null);
187
        }
188
    }
189

    
190
    /**
191
     * @throws LrsNeededParameterException
192
     */
193
    private void initComponents() throws LrsNeededParameterException {
194

    
195
        validateLayers(layers);
196

    
197
        // Modelos de los combos
198
        FLayersComboBoxModel inputLayerModel = new FLayersComboBoxModel(this.layers);
199
        FeatureAttributeDescriptorsComboBoxModel idRouteFieldComboBoxModel =
200
            new FeatureAttributeDescriptorsComboBoxModel();
201
        FeatureAttributeDescriptorsComboBoxModel fromMeasureFieldComboBoxModel =
202
            new FeatureAttributeDescriptorsComboBoxModel();
203
        FeatureAttributeDescriptorsComboBoxModel toMeasureFieldComboBoxModel =
204
            new FeatureAttributeDescriptorsComboBoxModel();
205

    
206
        // Renderer para los combos de attributeDescriptors
207
        ListCellRenderer featureAttributeDescriptorCellRenderer = new FLayersAttributeDescriptorCellRenderer();
208
        // asignaci?n de renderers y modelos
209
        cmbIdRouteField.setRenderer(featureAttributeDescriptorCellRenderer);
210
        cmbFromMeasureField.setRenderer(featureAttributeDescriptorCellRenderer);
211
        cmbToMeasureField.setRenderer(featureAttributeDescriptorCellRenderer);
212
        cmbIdRouteField.setModel(idRouteFieldComboBoxModel);
213
        cmbFromMeasureField.setModel(fromMeasureFieldComboBoxModel);
214
        cmbToMeasureField.setModel(toMeasureFieldComboBoxModel);
215

    
216
        // renderer para el combo de capas
217
        ListCellRenderer layerNameCellRenderer=new FLayersLayerNameCellRenderer();
218
        // renderer para el combo de capas
219
        cmbInputLayer.setRenderer(layerNameCellRenderer);
220

    
221
        // asignaci?n modelo al combo de capas
222
        cmbInputLayer.setModel(inputLayerModel);
223
        // listener del combo de capas para que actualice el resto de
224
        // componentes
225
        cmbInputLayer.addItemListener(new ItemListener() {
226

    
227
            public void itemStateChanged(ItemEvent e) {
228
                Object item = e.getItem();
229
                if (item instanceof FLyrVect) {
230
                    FLyrVect layer = (FLyrVect) item;
231
                    updateLayer(layer);
232
                }
233
            }
234
        });
235

    
236
        ComboBoxModel<LrsSourceOfMeasures> measureSourceModel =
237
            new DefaultComboBoxModel<LrsSourceOfMeasures>(LrsSourceOfMeasures.values());
238

    
239
        cmbMeasureSource.setModel(measureSourceModel);
240
        cmbMeasureSource.addItemListener(new ItemListener() {
241

    
242
            public void itemStateChanged(ItemEvent event) {
243
                if (event.getStateChange() == ItemEvent.SELECTED) {
244
                    LrsSourceOfMeasures item = (LrsSourceOfMeasures) event.getItem();
245
                    updateSourceOfMeasures(item);
246
                }
247
            }
248
        });
249

    
250
        ComboBoxModel<LrsCoordinatesPriority> coordinatePriorityModel =
251
            new DefaultComboBoxModel<LrsCoordinatesPriority>(LrsCoordinatesPriority.values());
252

    
253
        cmbCoordinatePriority.setModel(coordinatePriorityModel);
254

    
255
        txtMeasureFactor.setValue(new Double(1));
256
        txtMeasureOffset.setValue(new Double(0));
257

    
258
        this.btnBrowser.addActionListener(new ActionListener() {
259

    
260
            public void actionPerformed(ActionEvent e) {
261
                doSelectOuputFile();
262
            }
263
        });
264

    
265
        this.btnAccept.addActionListener(new ActionListener() {
266

    
267
            public void actionPerformed(ActionEvent e) {
268
                canceled = false;
269
                doClose();
270
                listeners.fireActionEvent(new ActionEvent(JLrsCreateRouteParamsController.this, 0, "accept"));
271

    
272
            }
273
        });
274

    
275
        this.btnCancel.addActionListener(new ActionListener() {
276

    
277
            public void actionPerformed(ActionEvent e) {
278
                canceled = true;
279
                doClose();
280
                listeners.fireActionEvent(new ActionEvent(JLrsCreateRouteParamsController.this, 0, "cancel"));
281
            }
282
        });
283

    
284
        setVisibleAceptCancel(false);
285
        canceled = false;
286
    }
287

    
288
    private void doSelectOuputFile() {
289
        final I18nManager i18nManager = ToolsLocator.getI18nManager();
290
        ThreadSafeDialogsManager manager = ToolsSwingLocator.getThreadSafeDialogsManager();
291
        File[] files = manager.showSaveFileDialog(i18nManager.getTranslation("output_file"), null);
292
        if (files != null && files.length > 0) {
293
            File file = files[0];
294
            String absolutePath = file.getAbsolutePath();
295
            if(!StringUtils.endsWithIgnoreCase(absolutePath, ".shp")){
296
                absolutePath = new StringBuilder().append(absolutePath).append(".shp").toString();
297
            }
298
            File outputFile = FileUtils.getFile(absolutePath);
299
            if(outputFile.exists()) {
300
                int resp = JOptionPane.showOptionDialog(
301
                    this.asJComponent(),
302
                    i18nManager.getTranslation("file_already_exists_do_you_want_overwrite_it"),
303
                    i18nManager.getTranslation("output_file"),
304
                    JOptionPane.OK_CANCEL_OPTION,
305
                    JOptionPane.QUESTION_MESSAGE,
306
                    null,
307
                    null,
308
                    JOptionPane.OK_OPTION);
309
                if (resp == JOptionPane.OK_OPTION){
310
                    this.txtOutputFile.setText(absolutePath);
311
                } else {
312
                    doSelectOuputFile();
313
                }
314
            } else {
315
                this.txtOutputFile.setText(absolutePath);
316
            }
317
        }
318

    
319
    }
320

    
321
    private void doClose() {
322
        this.setVisible(false);
323
    }
324

    
325
    public boolean isCanceled() {
326
        return this.canceled;
327
    }
328

    
329
    public void setVisibleAceptCancel(boolean visible) {
330
        this.btnAccept.setVisible(visible);
331
        this.btnCancel.setVisible(visible);
332
    }
333

    
334
    public boolean getVisibleAceptCancel() {
335
        return this.btnAccept.isVisible();
336
    }
337

    
338
    public JComponent asJComponent() {
339
        return this;
340
    }
341

    
342
    public LrsAlgorithmParams getParams() throws LrsGettingParametersException, LrsNeededParameterException {
343
        LrsAlgorithmsManager manager = LrsAlgorithmsLocator.getLrsAlgorithmsManager();
344
        LrsCreateRouteAlgorithmParams params = manager.createLrsCreateRouteAlgorithmParams();
345
        // Recorrer todo del interfaz y rellenar los parametros
346

    
347
      //cmbInputLayer
348
        if (!(this.cmbInputLayer.getSelectedItem() instanceof FLyrVect)){
349
            logger.error("Error getting selected item from cmbInputLayer");
350
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null);
351
        }
352
        FLyrVect fLyrVect = (FLyrVect) this.cmbInputLayer.getSelectedItem();
353
        IProjection projection= fLyrVect.getProjection();
354
        if (!(fLyrVect.getFeatureStore() instanceof FeatureStore)){
355
            logger.error("Error getting selected item from cmbInputLayer");
356
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null);
357
        }
358
        FeatureStore sourceFeatureStore = (FeatureStore)fLyrVect.getFeatureStore();
359
        if (sourceFeatureStore == null) {
360
            throw new LrsNeededParameterException("need_to_select_a_source_layer", null);
361
        }
362
        params.setSourceFeatureStore(sourceFeatureStore);
363

    
364
        //cmbIdRouteField
365
        if (!(this.cmbIdRouteField.getSelectedItem() instanceof FeatureAttributeDescriptor)){
366
            logger.error("Error getting selected item from cmbIdRouteField");
367
            throw new LrsGettingParametersException("error_getting_selected_item_from_cmbIdRouteField", null);
368
        }
369
        FeatureAttributeDescriptor idRouteField = (FeatureAttributeDescriptor) this.cmbIdRouteField.getSelectedItem();
370
        if (idRouteField == null) {
371
            throw new LrsNeededParameterException("need_to_select_a_route_identifier_field", null);
372
        }
373
        params.setIdRouteField(idRouteField);
374

    
375
        //OutputStore
376
        String outputLayerPathFile = this.txtOutputFile.getText();
377
        if(StringUtils.isEmpty(outputLayerPathFile)){
378
            throw new LrsNeededParameterException("need_to_fill_the_target_path", null);
379
        }
380
        try {
381
            NewFeatureStoreParameters newFeatureStoreParams=JLrsUtilsController.createFeatureStoreParams(outputLayerPathFile, projection);
382
            params.setNewFeatureStoreParameters(newFeatureStoreParams);
383
        } catch (Exception e) {
384
            throw new LrsNeededParameterException("error_creating_outputStore", e);
385
        }
386

    
387
        LrsSourceOfMeasures measureSources = (LrsSourceOfMeasures) this.cmbMeasureSource.getSelectedItem();
388
        FeatureAttributeDescriptor fromMeasureField = (FeatureAttributeDescriptor) this.cmbFromMeasureField.getSelectedItem();
389
        FeatureAttributeDescriptor toMeasureField = (FeatureAttributeDescriptor) this.cmbToMeasureField.getSelectedItem();
390
        params.setSourceOfMeasures(measureSources);
391
        switch (measureSources) {
392
        case ONE_FIELD:
393
            if (fromMeasureField == null) {
394
                throw new LrsNeededParameterException("need_to_select_a_length_measure_field", null);
395
            }
396
            params.setFromMeasureField((FeatureAttributeDescriptor) this.cmbFromMeasureField.getSelectedItem());
397
            params.setToMeasureField(null);
398
            break;
399
        case TWO_FIELDS:
400
            if (fromMeasureField == null) {
401
                throw new LrsNeededParameterException("need_to_select_a_from_measure_field", null);
402
            }
403
            params.setFromMeasureField((FeatureAttributeDescriptor) this.cmbFromMeasureField.getSelectedItem());
404
            if (toMeasureField == null) {
405
                throw new LrsNeededParameterException("need_to_select_a_to_measure_field", null);
406
            }
407
            params.setToMeasureField((FeatureAttributeDescriptor) this.cmbToMeasureField.getSelectedItem());
408
            break;
409
        case LENGTH:
410
        default:
411
            params.setFromMeasureField(null);
412
            params.setToMeasureField(null);
413
            break;
414
        }
415
        params.setCoordinatePriority((LrsCoordinatesPriority) this.cmbCoordinatePriority.getSelectedItem());
416

    
417
        Object measureFactor = this.txtMeasureFactor.getValue();
418
        if (measureFactor!=null && measureFactor instanceof Double){
419
            params.setMeasureFactor((Double)measureFactor);
420
        }else {
421
            params.setMeasureFactor(0);
422
        }
423
        Object measureOffset = this.txtMeasureOffset.getValue();
424
        if (measureOffset!=null && measureOffset instanceof Double){
425
            params.setMeasureOffset((Double)measureOffset);
426
        }else {
427
            params.setMeasureOffset(0);
428
        }
429

    
430
        params.setIgnoreSpatialGaps(this.chkIgnoreSpatialGaps.isSelected());
431

    
432
        return params;
433
    }
434

    
435
    public void setParams(LrsAlgorithmParams params) {
436
        if (params == null) {
437
            clear();
438
            return;
439
        }
440
        // Rellena los campos con los valores de params
441
        LrsCreateRouteAlgorithmParams parameters = (LrsCreateRouteAlgorithmParams) params;
442

    
443
        this.cmbMeasureSource.setSelectedItem(parameters.getSourceOfMeasures());
444
        this.cmbCoordinatePriority.setSelectedItem(parameters.getCoordinatePriority());
445

    
446
        FeatureStore sourceFeatureStore = parameters.getSourceFeatureStore();
447
        if(layers!=null && sourceFeatureStore!=null){
448
            FLayer layer = layers.getLayer(sourceFeatureStore.getName());
449
            this.cmbInputLayer.setSelectedItem(layer);
450
        }
451

    
452
        NewFeatureStoreParameters newFeatureStoreParameters = parameters.getNewFeatureStoreParameters();
453
        if(newFeatureStoreParameters instanceof SHPNewStoreParameters){
454
            this.txtOutputFile.setText(((SHPNewStoreParameters)newFeatureStoreParameters).getSHPFile().getAbsolutePath());
455
        }
456

    
457
        this.cmbIdRouteField.setSelectedItem(parameters.getIdRouteField());
458
        this.cmbFromMeasureField.setSelectedItem(parameters.getFromMeasureField());
459
        this.cmbToMeasureField.setSelectedItem(parameters.getToMeasureField());
460
        this.txtMeasureFactor.setValue(parameters.getMeasureFactor());
461
        this.txtMeasureOffset.setValue(parameters.getMeasureOffset());
462

    
463
    }
464

    
465
    public void clear() {
466
        this.txtOutputFile.setText("");
467
        this.txtMeasureFactor.setValue(1.0);
468
        this.txtMeasureOffset.setValue(0.0);
469
        this.cmbMeasureSource.setSelectedIndex(0);
470
        this.cmbFromMeasureField.setEnabled(false);
471
        this.cmbToMeasureField.setEnabled(false);
472
        this.cmbCoordinatePriority.setSelectedIndex(0);
473
        Object inputLayerSelected = this.cmbInputLayer.getSelectedItem();
474
        if (inputLayerSelected != null) {
475
            this.updateLayer((FLyrVect) inputLayerSelected);
476
        }
477
        Object measureSourceSelected = this.cmbMeasureSource.getSelectedItem();
478
        if (measureSourceSelected != null) {
479
            this.updateSourceOfMeasures((LrsSourceOfMeasures) measureSourceSelected);
480
        }
481

    
482
    }
483

    
484
    private void updateLayer(FLyrVect layer) {
485
        logger.info(new StringBuilder().append("Setting layer ").append(layer.getName()).toString());
486
        FeatureStore featureStore = layer.getFeatureStore();
487
        try {
488
            FeatureType type = featureStore.getDefaultFeatureType();
489
            // Se renuevan los combos de attributeDescriptors
490
            FeatureAttributeDescriptorsComboBoxModel idRouteFieldComboBoxModel =
491
                new FeatureAttributeDescriptorsComboBoxModel();
492
            FeatureAttributeDescriptorsComboBoxModel fromMeasureFieldComboBoxModel =
493
                new FeatureAttributeDescriptorsComboBoxModel();
494
            FeatureAttributeDescriptorsComboBoxModel toMeasureFieldComboBoxModel =
495
                new FeatureAttributeDescriptorsComboBoxModel();
496

    
497
            this.cmbIdRouteField.setModel(idRouteFieldComboBoxModel);
498
            this.cmbFromMeasureField.setModel(fromMeasureFieldComboBoxModel);
499
            this.cmbToMeasureField.setModel(toMeasureFieldComboBoxModel);
500

    
501
            FeatureAttributeDescriptor[] attributeDescriptors = type.getAttributeDescriptors();
502
            for (int i = 0; i < attributeDescriptors.length; i++) {
503
                FeatureAttributeDescriptor featureAttributeDescriptor = attributeDescriptors[i];
504
                if (featureAttributeDescriptor.getDataType().getType() != DataTypes.GEOMETRY) {
505
                    logger.info(new StringBuilder().append("Adding field ")
506
                        .append(featureAttributeDescriptor.getName()).toString());
507

    
508
                    JLrsCreateRouteParamsController.this.cmbIdRouteField.addItem(featureAttributeDescriptor);
509
                    if (featureAttributeDescriptor.getDataType().isNumeric()) {
510
                        JLrsCreateRouteParamsController.this.cmbFromMeasureField.addItem(featureAttributeDescriptor);
511
                        JLrsCreateRouteParamsController.this.cmbToMeasureField.addItem(featureAttributeDescriptor);
512
                    }
513
                }
514
            }
515
            this.cmbIdRouteField.invalidate();
516
            this.cmbFromMeasureField.invalidate();
517
            this.cmbToMeasureField.invalidate();
518

    
519
        } catch (DataException e1) {
520
            logger.warn(
521
                new StringBuilder().append("Error getting default feature type from layer ").append(layer.getName())
522
                    .toString(), e1);
523
        }
524
    }
525

    
526
    private void updateSourceOfMeasures(LrsSourceOfMeasures item) {
527
        switch (item) {
528
        case LENGTH:
529
            cmbFromMeasureField.setEnabled(false);
530
            cmbToMeasureField.setEnabled(false);
531
            chkIgnoreSpatialGaps.setEnabled(true);
532
            break;
533
        case ONE_FIELD:
534
            cmbFromMeasureField.setEnabled(true);
535
            cmbToMeasureField.setEnabled(false);
536
            chkIgnoreSpatialGaps.setEnabled(true);
537
            break;
538
        case TWO_FIELDS:
539
            cmbFromMeasureField.setEnabled(true);
540
            cmbToMeasureField.setEnabled(true);
541
            chkIgnoreSpatialGaps.setEnabled(false);
542
            break;
543
        default:
544
            break;
545
        }
546
    }
547
}