Revision 36207 branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java

View differences:

DefaultFeatureStore.java
143 143
import org.gvsig.tools.visitor.Visitor;
144 144

  
145 145
public final class DefaultFeatureStore extends AbstractDisposable implements
146
    DataStoreInitializer, FeatureStoreProviderServices, FeatureStore,
147
    Observer {
146
    DataStoreInitializer, FeatureStoreProviderServices, FeatureStore, Observer {
148 147

  
149
    final static private Logger logger =
150
        LoggerFactory.getLogger(DefaultFeatureStore.class);
148
    private static final Logger LOG = LoggerFactory
149
        .getLogger(DefaultFeatureStore.class);
151 150

  
152 151
    private static final String PERSISTENCE_DEFINITION_NAME = "FeatureStore";
153 152

  
......
210 209
            (DelegatedDynObject) dynManager.createDynObject(
211 210
                METADATA_DEFINITION_NAME, MetadataManager.METADATA_NAMESPACE);
212 211

  
213
        this.dataManager = (DefaultDataManager)dataManager;
212
        this.dataManager = (DefaultDataManager) dataManager;
214 213

  
215 214
        this.parameters = parameters;
216 215
        this.transforms = new DefaultFeatureStoreTransforms(this);
......
360 359
    public FeatureProvider createDefaultFeatureProvider(FeatureType type)
361 360
        throws DataException {
362 361
        if (type.hasOID()) {
363
            return new DefaultFeatureProvider(type, this.provider
364
                .createNewOID());
362
            return new DefaultFeatureProvider(type,
363
                this.provider.createNewOID());
365 364
        }
366 365
        return new DefaultFeatureProvider(type);
367 366
    }
368 367

  
369 368
    public void saveToState(PersistentState state) throws PersistenceException {
370 369
        if (this.mode != FeatureStore.MODE_QUERY) {
371
            throw new PersistenceException(new IllegalStateException(this
372
                .getName()));
370
            throw new PersistenceException(new IllegalStateException(
371
                this.getName()));
373 372
        }
374 373
        state.set("dataStoreName", this.getName());
375 374
        state.set("parameters", this.parameters);
......
451 450
                        }
452 451
                    }
453 452
                    if (fTypePos < 0) {
454
                        throw new PersistenceCantFindFeatureTypeException(this
455
                            .getName(), (String) entry.getKey());
453
                        throw new PersistenceCantFindFeatureTypeException(
454
                            this.getName(), (String) entry.getKey());
456 455
                    }
457 456
                    DefaultEditableFeatureType eType =
458 457
                        (DefaultEditableFeatureType) type.getEditable();
......
499 498
            definition.addDynFieldString("dataStoreName").setMandatory(true)
500 499
                .setPersistent(true);
501 500

  
502
            definition.addDynFieldObject("parameters").setClassOfValue(
503
                DynObject.class).setMandatory(true).setPersistent(true);
501
            definition.addDynFieldObject("parameters")
502
                .setClassOfValue(DynObject.class).setMandatory(true)
503
                .setPersistent(true);
504 504

  
505
            definition.addDynFieldObject("selection").setClassOfValue(
506
                FeatureSelection.class).setMandatory(false).setPersistent(true);
507

  
508
            definition.addDynFieldObject("transforms").setClassOfValue(
509
                DefaultFeatureStoreTransforms.class).setMandatory(true)
505
            definition.addDynFieldObject("selection")
506
                .setClassOfValue(FeatureSelection.class).setMandatory(false)
510 507
                .setPersistent(true);
511 508

  
512
            definition.addDynFieldMap("evaluatedAttributes").setClassOfItems(
513
                List.class) // List<DefaultFeatureAttributeDescriptor>
509
            definition.addDynFieldObject("transforms")
510
                .setClassOfValue(DefaultFeatureStoreTransforms.class)
511
                .setMandatory(true).setPersistent(true);
512

  
513
            definition.addDynFieldMap("evaluatedAttributes")
514
                .setClassOfItems(List.class) // List<DefaultFeatureAttributeDescriptor>
514 515
                .setMandatory(false).setPersistent(true);
515 516

  
516
            definition.addDynFieldString("defaultFeatureTypeId").setMandatory(
517
                true).setPersistent(true);
517
            definition.addDynFieldString("defaultFeatureTypeId")
518
                .setMandatory(true).setPersistent(true);
518 519
        }
519 520
    }
520 521

  
......
639 640
        try {
640 641
            notifyChange(notification, createFeature(data));
641 642
        } catch (DataException ex) {
642
            logger.error("Error notifying about the notification: "
643
                + notification + ", with the data: " + data, ex);
643
            LOG.error("Error notifying about the notification: " + notification
644
                + ", with the data: " + data, ex);
644 645
        }
645 646
    }
646 647

  
......
679 680

  
680 681
    public FeatureLocks getLocks() throws DataException {
681 682
        if (!this.provider.isLocksSupported()) {
682
            logger.warn("Locks not supporteds");
683
            LOG.warn("Locks not supporteds");
683 684
            return null;
684 685
        }
685 686
        if (locks == null) {
......
868 869
    }
869 870

  
870 871
    private void invalidateIndexes() {
871
        setIndexesStatus(false);
872
        setIndexesValidStatus(false);
872 873
    }
873 874

  
874
    private void validateIndexes() {
875
        setIndexesStatus(true);
876
    }
877

  
878
    private void setIndexesStatus(boolean valid) {
875
    private void setIndexesValidStatus(boolean valid) {
879 876
        FeatureIndexes indexes = getIndexes();
880 877
        for (Iterator iterator = indexes.iterator(); iterator.hasNext();) {
881 878
            FeatureIndex index = (FeatureIndex) iterator.next();
......
885 882
        }
886 883
    }
887 884

  
888
    private void fillIndexes() throws FeatureIndexException {
885
    private void updateIndexes() throws FeatureIndexException {
889 886
        FeatureIndexes indexes = getIndexes();
890 887
        for (Iterator iterator = indexes.iterator(); iterator.hasNext();) {
891 888
            FeatureIndex index = (FeatureIndex) iterator.next();
892
            if (index instanceof DefaultFeatureIndex) {
893
                ((DefaultFeatureIndex) index).fill();
889
            if (index instanceof FeatureIndexProviderServices) {
890
                FeatureIndexProviderServices indexServices =
891
                    (FeatureIndexProviderServices) index;
892
                indexServices.setValid(false);
893
                indexServices.fill();
894
                indexServices.setValid(true);
894 895
            }
895 896
        }
896 897
    }
......
1084 1085
            if (clearSelection) {
1085 1086
                ((FeatureSelection) this.getSelection()).deselectAll();
1086 1087
            }
1087
            fillIndexes();
1088
            validateIndexes();
1088
            updateIndexes();
1089 1089
            notifyChange(FeatureStoreNotification.AFTER_CANCELEDITING);
1090 1090
        } catch (Exception e) {
1091 1091
            throw new StoreCancelEditingException(e, this.getName());
......
1102 1102
                notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING);
1103 1103
                provider.endAppend();
1104 1104
                exitEditingMode();
1105
                fillIndexes();
1106
                validateIndexes();
1105
                updateIndexes();
1107 1106
                notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING);
1108 1107
                break;
1109 1108

  
......
1116 1115
                if (hasStrongChanges) {
1117 1116
                    validateFeatures(Feature.FINISH_EDITING);
1118 1117
                    provider.performChanges(featureManager.getDeleted(),
1119
                        featureManager.getInserted(), featureManager
1120
                            .getUpdated(), featureTypeManager
1121
                            .getFeatureTypesChanged());
1118
                        featureManager.getInserted(),
1119
                        featureManager.getUpdated(),
1120
                        featureTypeManager.getFeatureTypesChanged());
1122 1121
                }
1123 1122
                exitEditingMode();
1124
                fillIndexes();
1125
                validateIndexes();
1123
                updateIndexes();
1126 1124
                notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING);
1127 1125
                break;
1128 1126
            }
......
1267 1265
        DefaultFeatureType fType =
1268 1266
            (DefaultFeatureType) this.getFeatureType(featureQuery
1269 1267
                .getFeatureTypeId());
1270
        if ((featureQuery.getAttributeNames() != null) && (featureQuery.getAttributeNames().length > 0)) {
1268
        if ((featureQuery.getAttributeNames() != null)
1269
            && (featureQuery.getAttributeNames().length > 0)) {
1271 1270
            return fType.getSubtype(featureQuery.getAttributeNames());
1272 1271
        }
1273 1272
        return fType;
......
1318 1317
            query = new DefaultFeatureQuery(this.getDefaultFeatureType());
1319 1318
        }
1320 1319
        LoadInBackGround task = new LoadInBackGround(this, query, observer);
1321
        Thread thread = new Thread(task);
1322
        thread.run();
1320
        Thread thread = new Thread(task, "Load Feature Set in background");
1321
        thread.start();
1323 1322
    }
1324 1323

  
1325 1324
    public Feature getFeatureByReference(FeatureReference reference)
......
1353 1352
            }
1354 1353
        }
1355 1354
        DefaultFeature feature =
1356
            new DefaultFeature(this, this.provider
1357
                .getFeatureProviderByReference(
1355
            new DefaultFeature(this,
1356
                this.provider.getFeatureProviderByReference(
1358 1357
                    (FeatureReferenceProviderServices) reference, featureType));
1359 1358

  
1360 1359
        if (!this.transforms.isEmpty()) {
......
1652 1651
    public FeatureIndex createIndex(String indexTypeName,
1653 1652
        FeatureType featureType, String attributeName, String indexName)
1654 1653
        throws DataException {
1654

  
1655
        return createIndex(indexTypeName, featureType, attributeName,
1656
            indexName, false, null);
1657
    }
1658

  
1659
    public FeatureIndex createIndex(FeatureType featureType,
1660
        String attributeName, String indexName, Observer observer)
1661
        throws DataException {
1662
        return createIndex(null, featureType, attributeName, indexName,
1663
            observer);
1664
    }
1665

  
1666
    public FeatureIndex createIndex(String indexTypeName,
1667
        FeatureType featureType, String attributeName, String indexName,
1668
        final Observer observer) throws DataException {
1669

  
1670
        return createIndex(indexTypeName, featureType, attributeName,
1671
            indexName, true, observer);
1672
    }
1673

  
1674
    private FeatureIndex createIndex(String indexTypeName,
1675
        FeatureType featureType, String attributeName, String indexName,
1676
        boolean background, final Observer observer) throws DataException {
1677

  
1655 1678
        checkNotInAppendMode();
1656 1679
        FeatureIndexProviderServices index = null;
1657 1680
        index =
1658 1681
            dataManager.createFeatureIndexProvider(indexTypeName, this,
1659
                featureType, indexName, featureType
1660
                    .getAttributeDescriptor(attributeName));
1682
                featureType, indexName,
1683
                featureType.getAttributeDescriptor(attributeName));
1684

  
1685
        if (observer != null) {
1686
            index.addObserver(observer);
1687
        }
1661 1688
        try {
1662
            index.fill();
1689
            index.fill(background);
1663 1690
        } catch (FeatureIndexException e) {
1664 1691
            throw new InitializeException(index.getName(), e);
1665 1692
        }
1693

  
1666 1694
        ((DefaultFeatureIndexes) getIndexes()).addIndex(index);
1667 1695
        return index;
1668 1696
    }
1669 1697

  
1670
    public FeatureIndex createIndex(FeatureType featureType,
1671
        String attributeName, String indexName, Observer observer) {
1672
        return createIndex(null, featureType, attributeName, indexName,
1673
            observer);
1674
    }
1675

  
1676
    public FeatureIndex createIndex(String indexTypeName,
1677
        FeatureType featureType, String attributeName, String indexName,
1678
        Observer observer) {
1679
        // TODO Implement observer interaction
1680
        throw new UnsupportedOperationException();
1681
    }
1682

  
1683 1698
    //
1684 1699
    // ====================================================================
1685 1700
    // Transforms related methods

Also available in: Unified diff