Revision 36207 branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
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