Revision 44100

View differences:

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
1 1
package org.gvsig.fmap.dal.swing.impl.featuretype;
2 2

  
3 3
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
4
import com.vividsolutions.jts.operation.distance.GeometryLocation;
5 4
import java.awt.event.ItemEvent;
6 5
import java.awt.event.ItemListener;
7 6
import java.util.ArrayList;
......
15 14
import javax.swing.event.ChangeListener;
16 15
import org.cresques.cts.IProjection;
17 16
import org.gvsig.expressionevaluator.Expression;
17
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
18
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
19
import org.gvsig.expressionevaluator.MutableSymbolTable;
18 20
import org.gvsig.expressionevaluator.swing.CalculatorController;
19 21
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
20 22
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
......
22 24
import org.gvsig.fmap.dal.DALLocator;
23 25
import org.gvsig.fmap.dal.DataManager;
24 26
import org.gvsig.fmap.dal.DataTypes;
27
import org.gvsig.fmap.dal.exception.DataException;
25 28
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
29
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
26 30
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
31
import org.gvsig.fmap.dal.feature.Feature;
27 32
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
28 33
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
34
import org.gvsig.fmap.dal.feature.FeatureStore;
29 35
import org.gvsig.fmap.dal.swing.DALSwingLocator;
30 36
import org.gvsig.fmap.dal.swing.DataSwingManager;
31 37
import org.gvsig.fmap.geom.Geometry;
......
60 66
    private CalculatorController<Integer> pickerSize;
61 67
    private CalculatorController<Integer> pickerPrecision;
62 68
    private CalculatorController<Object> pickerDefaultValue;
63
    private CalculatorController<String> pickerFieldName;
69
//    private CalculatorController<String> pickerFieldName;
64 70
    private PickerController<IProjection> pickerCRS;
65 71
    private ExpressionPickerController pickerVirtualField;
66 72

  
......
172 178
        this.pickerPrecision = evaluatorManager.createCalculatorController(
173 179
                this.txtPrecision, DataTypes.INT
174 180
        );
175
        this.pickerFieldName = evaluatorManager.createCalculatorController(
176
                this.txtFieldName, DataTypes.STRING
177
        );
181
//        this.pickerFieldName = evaluatorManager.createCalculatorController(
182
//                this.txtFieldName, DataTypes.STRING
183
//        );
178 184
        this.pickerDefaultValue = evaluatorManager.createCalculatorController(
179 185
                this.txtDefaultValue, DataTypes.OBJECT
180 186
        );
......
209 215
                }
210 216
            }
211 217
        });
218
        this.pickerPrecision.addChangeListener(new ChangeListener() {
219
            @Override
220
            public void stateChanged(ChangeEvent e) {
221
                doCheckSizeAndPrecision();
222
            }
223
        });
224
        this.pickerSize.addChangeListener(new ChangeListener() {
225
            @Override
226
            public void stateChanged(ChangeEvent e) {
227
                doCheckSizeAndPrecision();
228
            }
229
        });
212 230
    }
213 231

  
214 232
    @Override
......
273 291

  
274 292
    public void clean() {
275 293
        this.pickerDefaultValue.set(null);
276
        this.pickerFieldName.set(null);
294
        this.txtFieldName.setText("");
295
//        this.pickerFieldName.set(null);
277 296
        this.pickerIntervalEnd.set(null);
278 297
        this.pickerIntervalStart.set(null);
279 298
        this.pickerPrecision.set(null);
......
306 325
        }
307 326
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
308 327
                .createExpressionPickerController(txtVirtualField, btnVirtualField);
309
        if( descriptor.getFeatureType()!=null && descriptor.getFeatureType().getStore()!=null ) {
310
            this.pickerVirtualField.addElement(
311
                expressionSwingManager.createElement(
312
                        DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
313
                        this.pickerVirtualField,
314
                        descriptor.getFeatureType().getStore()
315
                )
316
            );
328
        if( descriptor.getFeatureType()!=null ) {
329
            FeatureStore store = descriptor.getFeatureType().getStore();
330
            if( store!=null ) {
331
                this.pickerVirtualField.addElement(
332
                    expressionSwingManager.createElement(
333
                            DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
334
                            this.pickerVirtualField,
335
                            store
336
                    )
337
                );
338
                Feature sampleFeature = null;
339
                try {
340
                    sampleFeature = store.getFeatureSelection().first();
341
                    if( sampleFeature == null ) {
342
                        sampleFeature = store.first();
343
                    }
344
                } catch (DataException ex) {
345
                }
346
                if( sampleFeature!=null ) {
347
                    FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
348
                    featureSymbolTable.setFeature(sampleFeature);
349
                    this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent());
350
                }
351
            }
317 352
        }
318 353
        if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
319 354
            this.setEditable(false);
320 355
        }
321 356
                
322 357
        this.pickerDefaultValue.set(descriptor.getDefaultValue());
323
        this.pickerFieldName.set(descriptor.getName());
358
        this.txtFieldName.setText(descriptor.getName());
359
//        this.pickerFieldName.set(descriptor.getName());
324 360
        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
325 361
        if (interval == null) {
326 362
            this.pickerIntervalEnd.set(null);
......
371 407
            if (fieldType == null) {
372 408
                fieldType = DataTypes.UNKNOWN;
373 409
            }
410
            if( fieldType != DataTypes.STRING ) {
411
                int maxsize = this.getMaxSizeOfType(fieldType);
412
                Integer size = this.pickerSize.get();
413
                if( maxsize>0 && size!=null && size>maxsize ) {
414
                    this.pickerSize.set(maxsize);
415
                }
416
            }
374 417
            switch (fieldType) {
375 418
                case DataTypes.GEOMETRY:
376 419
                    this.cboGeometryType.setEnabled(editable);
......
381 424
                    this.pickerIntervalEnd.setEditable(false);
382 425
                    this.tabAditionalFields.setEnabledAt(1, true);
383 426
                    this.tabAditionalFields.setEnabledAt(2, false);
427
                    this.pickerSize.set(null);
428
                    this.pickerPrecision.set(null);
429
                    this.pickerSize.setEnabled(false);
430
                    this.pickerPrecision.setEnabled(false);
384 431
                    break;
385 432
                case DataTypes.INSTANT:
386 433
                case DataTypes.INTERVAL:
......
392 439
                    this.pickerCRS.setEnabled(false);
393 440
                    this.cboDateFormat.setEnabled(editable);
394 441
                    this.pickerIntervalStart.setEnabled(editable);
395
                    this.pickerIntervalEnd.setEditable(editable);
442
                    this.pickerIntervalEnd.setEnabled(editable);
396 443
                    this.tabAditionalFields.setEnabledAt(1, false);
397 444
                    this.tabAditionalFields.setEnabledAt(2, true);
445
                    this.pickerSize.set(null);
446
                    this.pickerPrecision.set(null);
447
                    this.pickerSize.setEnabled(false);
448
                    this.pickerPrecision.setEnabled(false);
398 449
                    break;
450
                case DataTypes.BYTE:
451
                case DataTypes.INT:
452
                case DataTypes.LONG:                    
453
                case DataTypes.STRING:                    
454
                    this.cboGeometryType.setEnabled(false);
455
                    this.cboGeometrySubtype.setEnabled(false);
456
                    this.pickerCRS.setEnabled(false);
457
                    this.cboDateFormat.setEnabled(false);
458
                    this.pickerIntervalStart.setEnabled(false);
459
                    this.pickerIntervalEnd.setEditable(false);
460
                    this.tabAditionalFields.setEnabledAt(1, false);
461
                    this.tabAditionalFields.setEnabledAt(2, false);
462

  
463
                    this.pickerPrecision.set(null);
464
                    this.pickerSize.setEnabled(true);
465
                    this.pickerPrecision.setEnabled(false);
466
                    break;
467
                case DataTypes.FLOAT:
468
                case DataTypes.DOUBLE:
469
                    this.cboGeometryType.setEnabled(false);
470
                    this.cboGeometrySubtype.setEnabled(false);
471
                    this.pickerCRS.setEnabled(false);
472
                    this.cboDateFormat.setEnabled(false);
473
                    this.pickerIntervalStart.setEnabled(false);
474
                    this.pickerIntervalEnd.setEditable(false);
475
                    this.tabAditionalFields.setEnabledAt(1, false);
476
                    this.tabAditionalFields.setEnabledAt(2, false);
477

  
478
                    this.pickerSize.setEnabled(true);
479
                    this.pickerPrecision.setEnabled(true);
480
                    break;
399 481
                default:
400 482
                    this.cboGeometryType.setEnabled(false);
401 483
                    this.cboGeometrySubtype.setEnabled(false);
......
405 487
                    this.pickerIntervalEnd.setEditable(false);
406 488
                    this.tabAditionalFields.setEnabledAt(1, false);
407 489
                    this.tabAditionalFields.setEnabledAt(2, false);
490
                    this.pickerSize.set(null);
491
                    this.pickerPrecision.set(null);
492
                    this.pickerSize.setEnabled(false);
493
                    this.pickerPrecision.setEnabled(false);
408 494
            }
409 495
        } catch (Exception ex) {
410

  
496
            ex.printStackTrace();
411 497
        }
498
        
412 499
    }
413 500

  
414 501
    public void setEditable(boolean editable) {
415 502
        this.editable = editable;
416 503
        this.pickerDefaultValue.setEditable(editable);
417
        this.pickerFieldName.setEditable(editable);
504
        this.txtFieldName.setEditable(editable);
505
//        this.pickerFieldName.setEditable(editable);
418 506
        this.pickerIntervalEnd.setEditable(editable);
419 507
        this.pickerIntervalStart.setEditable(editable);
420 508
        this.pickerPrecision.setEditable(editable);
......
433 521
        this.cboGeometrySubtype.setEnabled(editable);
434 522

  
435 523
    }
524
    
525
    private int getMaxSizeOfType(int dataType) {
526
        switch(dataType) {
527
            case DataTypes.BOOLEAN:
528
                return 1;
529
            case DataTypes.BYTE:
530
                return 3;
531
            case DataTypes.INT:
532
                return 9;
533
            case DataTypes.LONG:
534
                return 19;
535
            case DataTypes.FLOAT:
536
                return 20;
537
            case DataTypes.DOUBLE:
538
                return 20;
539
            case DataTypes.DATE:
540
                return 8;
541
            default:
542
                return -1;
543
        }
544
    }
545

  
546
    private void doCheckSizeAndPrecision() {
547
        Integer size = this.pickerSize.get();
548
        if( size == null ) {
549
            return;
550
        }
551
        int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType));
552
        if( size<1 || (maxsize>0 && size>maxsize) ) {
553
            this.pickerSize.setWarning(true, "The size is not valid for the selected type");
554
        } else {
555
            this.pickerSize.setWarning(false);
556
        }
557
        if( this.pickerPrecision.isEnabled() ) {
558
            Integer precision = this.pickerPrecision.get();
559
            if( precision == null ) {
560
                return ;
561
            }
562
            if( precision < 0 ) {
563
                this.pickerPrecision.setWarning(true, "the precision can not have a negative value");
564
            } else if( precision>size ) {
565
                this.pickerPrecision.setWarning(true, "the precision can not have a value greater than the size");
566
            } else {
567
                this.pickerPrecision.setWarning(false);
568
            }
569
        }
570
    }
571

  
436 572
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFetureStore.java
733 733
        return null;
734 734
    }
735 735

  
736
    @Override
737
    public Feature first() throws DataException {
738
        return null;
739
    }
740

  
736 741
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java
297 297

  
298 298
    public List<Feature> getFeatures(Expression filter, String sortBy, boolean asc);
299 299

  
300
    public Feature first() throws DataException;
301

  
300 302
    public Feature findFirst(String filter) throws DataException;
301 303

  
302 304
    public Feature findFirst(String filter, String sortBy) throws DataException;
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/expressionevaluator/FeatureSymbolTable.java
1 1
package org.gvsig.fmap.dal.expressionevaluator;
2 2

  
3
import org.gvsig.expressionevaluator.MutableSymbolTable;
3 4
import org.gvsig.expressionevaluator.SymbolTable;
4 5
import org.gvsig.fmap.dal.feature.Feature;
5 6

  
......
13 14
    
14 15
    @Override
15 16
    public FeatureSymbolTable clone() throws CloneNotSupportedException;
17
    
18
    /**
19
     * Utility method that creates a mutable symbol table whose table 
20
     * delegated to this.
21
     * 
22
     * @return 
23
     */
24
    public MutableSymbolTable createParent();
16 25

  
17 26
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
1833 1833
    
1834 1834
    @Override
1835 1835
    public FeatureSet getFeatureSet(String filter, String sortBy, boolean asc) throws DataException {
1836
        FeatureQuery query = this.createFeatureQuery();
1836
        FeatureQuery query = null;
1837 1837
        if( !StringUtils.isEmpty(filter) ) {
1838
            query = this.createFeatureQuery();
1838 1839
            query.setFilter(filter);
1839 1840
        }
1840 1841
        if( !StringUtils.isEmpty(sortBy) ) {
1842
            if( query == null ) {
1843
                query = this.createFeatureQuery();
1844
            }
1841 1845
            query.getOrder().add(sortBy, asc);
1842 1846
        }
1847
        if( query == null ) {
1848
            return this.getFeatureSet();
1849
        }
1843 1850
        return this.getFeatureSet(query);
1844 1851
    }
1845 1852
    
......
1908 1915
    }
1909 1916

  
1910 1917
    @Override
1918
    public Feature first() throws DataException {
1919
        return this.findFirst((String)null, null, true);
1920
    }
1921
    
1922
    @Override
1911 1923
    public Feature findFirst(String filter) throws DataException {
1912 1924
        return this.findFirst(filter, null, true);
1913 1925
    }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/AbstractFeatureSet.java
89 89
            if( it == null ) {
90 90
                return null;
91 91
            }
92
            Feature f = (Feature) it.next();
93
            return f;
92
            if( it.hasNext() ) {
93
                Feature f = (Feature) it.next();
94
                return f;
95
            }
96
            return null;
94 97
        } finally {
95 98
            DisposeUtils.disposeQuietly(it);
96 99
        }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureSymbolTable.java
5 5
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
6 6
import org.gvsig.expressionevaluator.Function;
7 7
import org.gvsig.expressionevaluator.Interpreter;
8
import org.gvsig.expressionevaluator.MutableSymbolTable;
8 9
import org.gvsig.expressionevaluator.spi.AbstractFunction;
9 10
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable;
10 11
import org.gvsig.fmap.dal.DataManager;
......
149 150
        this.type = feature.getType();
150 151
    }
151 152

  
153
    @Override
154
    public MutableSymbolTable createParent() {
155
        ExpressionEvaluatorManager expManager = ExpressionEvaluatorLocator.getManager();
156

  
157
        MutableSymbolTable symbolTable = expManager.createSymbolTable();
158
        symbolTable.addSymbolTable(this);
159
        return symbolTable;
160
    }
161

  
162
    
152 163
    public static void selfRegister() {
153 164
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
154 165
        manager.registerSymbolTable(new DefaultFeatureSymbolTable(), false);

Also available in: Unified diff