Revision 32880 branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
DefaultFeatureStore.java | ||
---|---|---|
31 | 31 |
import java.util.ArrayList; |
32 | 32 |
import java.util.Collections; |
33 | 33 |
import java.util.HashMap; |
34 |
import java.util.HashSet; |
|
34 | 35 |
import java.util.Iterator; |
35 | 36 |
import java.util.List; |
36 | 37 |
import java.util.Map; |
... | ... | |
47 | 48 |
import org.gvsig.fmap.dal.DataStore; |
48 | 49 |
import org.gvsig.fmap.dal.DataStoreNotification; |
49 | 50 |
import org.gvsig.fmap.dal.DataStoreParameters; |
50 |
import org.gvsig.fmap.dal.DataTypes; |
|
51 | 51 |
import org.gvsig.fmap.dal.exception.CloseException; |
52 | 52 |
import org.gvsig.fmap.dal.exception.CreateException; |
53 | 53 |
import org.gvsig.fmap.dal.exception.DataException; |
... | ... | |
87 | 87 |
import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException; |
88 | 88 |
import org.gvsig.fmap.dal.feature.exception.NoNewFeatureInsertException; |
89 | 89 |
import org.gvsig.fmap.dal.feature.exception.NullFeatureTypeException; |
90 |
import org.gvsig.fmap.dal.feature.exception.PersistenceCantFindDefaultFeatureTypeException; |
|
91 |
import org.gvsig.fmap.dal.feature.exception.PersistenceCantFindFeatureTypeException; |
|
92 |
import org.gvsig.fmap.dal.feature.exception.PersistenceStoreAlreadyLoadedException; |
|
90 | 93 |
import org.gvsig.fmap.dal.feature.exception.SelectionNotAllowedException; |
91 | 94 |
import org.gvsig.fmap.dal.feature.exception.StoreCancelEditingException; |
92 | 95 |
import org.gvsig.fmap.dal.feature.exception.StoreDeleteEditableFeatureException; |
... | ... | |
113 | 116 |
import org.gvsig.fmap.dal.resource.Resource; |
114 | 117 |
import org.gvsig.fmap.dal.spi.DataStoreProvider; |
115 | 118 |
import org.gvsig.fmap.geom.primitive.Envelope; |
119 |
import org.gvsig.metadata.MetadataLocator; |
|
120 |
import org.gvsig.metadata.MetadataManager; |
|
121 |
import org.gvsig.metadata.exceptions.MetadataException; |
|
116 | 122 |
import org.gvsig.tools.ToolsLocator; |
117 | 123 |
import org.gvsig.tools.dispose.impl.AbstractDisposable; |
118 | 124 |
import org.gvsig.tools.dynobject.DelegatedDynObject; |
119 | 125 |
import org.gvsig.tools.dynobject.DynClass; |
120 | 126 |
import org.gvsig.tools.dynobject.DynObject; |
121 | 127 |
import org.gvsig.tools.dynobject.DynObjectManager; |
128 |
import org.gvsig.tools.dynobject.DynStruct; |
|
122 | 129 |
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException; |
123 | 130 |
import org.gvsig.tools.dynobject.exception.DynMethodException; |
124 | 131 |
import org.gvsig.tools.exception.BaseException; |
... | ... | |
126 | 133 |
import org.gvsig.tools.observer.Observable; |
127 | 134 |
import org.gvsig.tools.observer.Observer; |
128 | 135 |
import org.gvsig.tools.observer.impl.DelegateWeakReferencingObservable; |
129 |
import org.gvsig.tools.persistence.PersistenceException;
|
|
136 |
import org.gvsig.tools.persistence.PersistenceManager;
|
|
130 | 137 |
import org.gvsig.tools.persistence.Persistent; |
131 | 138 |
import org.gvsig.tools.persistence.PersistentState; |
139 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
|
132 | 140 |
import org.gvsig.tools.task.Executor; |
133 | 141 |
import org.gvsig.tools.undo.RedoException; |
134 | 142 |
import org.gvsig.tools.undo.UndoException; |
... | ... | |
144 | 152 |
final static private Logger logger = LoggerFactory |
145 | 153 |
.getLogger(DefaultFeatureStore.class); |
146 | 154 |
|
155 |
private static final String PERSISTENCE_DEFINITION_NAME = "FeatureStore"; |
|
156 |
|
|
147 | 157 |
private DataStoreParameters parameters = null; |
148 | 158 |
private FeatureSelection selection; |
149 | 159 |
private FeatureLocks locks; |
... | ... | |
172 | 182 |
private DefaultFeatureStoreTransforms transforms; |
173 | 183 |
|
174 | 184 |
private DelegatedDynObject metadata; |
185 |
private Set metadataChildren; |
|
175 | 186 |
|
176 | 187 |
private Long featureCount = null; |
177 | 188 |
|
... | ... | |
198 | 209 |
DynObjectManager dynManager = ToolsLocator.getDynObjectManager(); |
199 | 210 |
|
200 | 211 |
this.metadata = (DelegatedDynObject) dynManager |
201 |
.createDynObject(dynManager.get(DataStore.DYNCLASS_NAME)); |
|
212 |
.createDynObject( |
|
213 |
METADATA_DEFINITION_NAME, |
|
214 |
MetadataManager.METADATA_NAMESPACE |
|
215 |
); |
|
216 |
|
|
217 |
|
|
202 | 218 |
this.dataManager = dataManager; |
203 | 219 |
|
204 | 220 |
this.parameters = parameters; |
... | ... | |
214 | 230 |
public void intializePhase2(DataStoreProvider provider) { |
215 | 231 |
this.provider = (FeatureStoreProvider) provider; |
216 | 232 |
this.delegate(provider); |
233 |
this.metadataChildren = new HashSet(); |
|
234 |
this.metadataChildren.add(provider); |
|
217 | 235 |
} |
218 | 236 |
|
237 |
|
|
219 | 238 |
public String getName() { |
220 | 239 |
return this.parameters.getDataStoreName(); |
221 | 240 |
} |
... | ... | |
317 | 336 |
return this.provider.getExplorer(); |
318 | 337 |
} |
319 | 338 |
|
320 |
/* |
|
321 |
public Metadata getMetadata() throws MetadataNotFoundException { |
|
322 |
// TODO: |
|
323 |
// Si el provider devuelbe null habria que ver de construir aqui |
|
324 |
// los metadatos basicos, como el Envelope y el SRS. |
|
325 |
|
|
326 |
// TODO: Estando en edicion el Envelope deberia de |
|
327 |
// actualizarse usando el spatialManager |
|
328 |
return this.provider.getMetadata(); |
|
329 |
} |
|
330 |
*/ |
|
331 |
|
|
332 | 339 |
public Envelope getEnvelope() throws DataException { |
333 | 340 |
if (this.mode == MODE_FULLEDIT) { |
334 | 341 |
return this.spatialManager.getEnvelope(); |
... | ... | |
405 | 412 |
|
406 | 413 |
public void loadFromState(PersistentState state) throws PersistenceException { |
407 | 414 |
if (this.provider != null) { |
408 |
throw new PersistenceException("Provider allready set");
|
|
415 |
throw new PersistenceStoreAlreadyLoadedException(this.getName());
|
|
409 | 416 |
} |
410 | 417 |
if (this.getManager() == null) { |
411 | 418 |
this.dataManager = (DefaultDataManager) DALLocator.getDataManager(); |
... | ... | |
417 | 424 |
|
418 | 425 |
this.dataManager.intializeDataStore(this, params); |
419 | 426 |
this.selection = (FeatureSelection) state.get("selection"); |
420 |
this.transforms = (DefaultFeatureStoreTransforms) state |
|
421 |
.get("transforms"); |
|
427 |
this.transforms = (DefaultFeatureStoreTransforms) state.get("transforms"); |
|
422 | 428 |
Map evaluatedAttributes = (Map) state.get("evaluatedAttributes"); |
423 | 429 |
if (evaluatedAttributes != null && !evaluatedAttributes.isEmpty()) { |
424 | 430 |
List attrs; |
... | ... | |
440 | 446 |
} |
441 | 447 |
} |
442 | 448 |
if (fTypePos < 0){ |
443 |
throw new PersistenceException("FeatureType not found:" |
|
444 |
+ entry.getKey()); |
|
449 |
throw new PersistenceCantFindFeatureTypeException(this.getName(), (String)entry.getKey()); |
|
445 | 450 |
} |
446 | 451 |
DefaultEditableFeatureType eType = (DefaultEditableFeatureType) type |
447 | 452 |
.getEditable(); |
... | ... | |
465 | 470 |
|
466 | 471 |
ftype = getFeatureType(defFTypeid); |
467 | 472 |
if (ftype == null) { |
468 |
throw new PersistenceException( |
|
469 |
"Default Feature type not found: " + defFTypeid); |
|
473 |
throw new PersistenceCantFindDefaultFeatureTypeException(this.getName(), defFTypeid); |
|
470 | 474 |
} |
471 | 475 |
this.defaultFeatureType = ftype; |
472 | 476 |
} |
... | ... | |
480 | 484 |
|
481 | 485 |
} |
482 | 486 |
|
483 |
public static void registerPersistent() { |
|
484 |
DynObjectManager dynMan = ToolsLocator.getDynObjectManager(); |
|
485 |
DynClass dynClass = dynMan.add( |
|
486 |
"DefaultFeatureStore_Persistent", |
|
487 |
"DefaultFeatureStore Persistent definition"); |
|
487 |
public static void registerPersistenceDefinition() { |
|
488 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
|
489 |
if( manager.getDefinition(PERSISTENCE_DEFINITION_NAME)==null ) { |
|
490 |
DynStruct definition = manager.addDefinition( |
|
491 |
DefaultFeatureStore.class, |
|
492 |
PERSISTENCE_DEFINITION_NAME, |
|
493 |
PERSISTENCE_DEFINITION_NAME+" Persistent definition", |
|
494 |
null, |
|
495 |
null |
|
496 |
); |
|
497 |
definition.addDynFieldString("dataStoreName") |
|
498 |
.setMandatory(true) |
|
499 |
.setPersistent(true); |
|
500 |
|
|
501 |
definition.addDynFieldObject("parameters") |
|
502 |
.setMandatory(true) |
|
503 |
.setPersistent(true); |
|
504 |
|
|
505 |
definition.addDynFieldObject("selection") |
|
506 |
.setMandatory(true) |
|
507 |
.setPersistent(true); |
|
508 |
|
|
509 |
definition.addDynFieldObject("transforms") |
|
510 |
.setMandatory(true) |
|
511 |
.setPersistent(true); |
|
512 |
|
|
513 |
definition.addDynFieldMap("evaluatedAttributes") |
|
514 |
.setMandatory(true) |
|
515 |
.setPersistent(true); |
|
516 |
|
|
517 |
definition.addDynFieldString("defaultFeatureTypeId") |
|
518 |
.setMandatory(true) |
|
519 |
.setPersistent(true); |
|
520 |
} |
|
521 |
} |
|
488 | 522 |
|
489 |
dynClass.addDynFieldSingle("dataStoreName", DataTypes.STRING, null, |
|
490 |
true, true); |
|
491 |
dynClass.addDynFieldSingle("parameters", DataTypes.PERSISTENT, null, |
|
492 |
true, true); |
|
493 |
dynClass.addDynFieldSingle("selection", DataTypes.PERSISTENT, null, |
|
494 |
true, true); |
|
495 |
|
|
496 |
dynClass.addDynFieldSingle("transforms", DataTypes.PERSISTENT, null, |
|
497 |
true, |
|
498 |
true); |
|
499 |
|
|
500 |
dynClass.addDynFieldSingle("evaluatedAttributes", DataTypes.MAP, null, |
|
501 |
true, true); |
|
502 |
dynClass.addDynFieldSingle("defaultFeatureTypeId", DataTypes.STRING, |
|
503 |
null, true, true); |
|
504 |
|
|
505 |
|
|
506 |
ToolsLocator.getPersistenceManager().registerClass( |
|
507 |
DefaultFeatureStore.class, dynClass); |
|
523 |
public static void registerMetadataDefinition() throws MetadataException { |
|
524 |
MetadataManager manager = MetadataLocator.getMetadataManager(); |
|
525 |
if( manager.getDefinition(METADATA_DEFINITION_NAME)==null ) { |
|
526 |
DynStruct metadataDefinition = manager.addDefinition( |
|
527 |
METADATA_DEFINITION_NAME, |
|
528 |
null |
|
529 |
); |
|
530 |
metadataDefinition.extend( |
|
531 |
manager.getDefinition( |
|
532 |
DataStore.METADATA_DEFINITION_NAME |
|
533 |
) |
|
534 |
); |
|
535 |
} |
|
508 | 536 |
} |
537 |
|
|
509 | 538 |
// |
510 | 539 |
// ==================================================================== |
511 | 540 |
// Gestion de la seleccion |
... | ... | |
1093 | 1122 |
} |
1094 | 1123 |
|
1095 | 1124 |
|
1096 |
public void export(DataServerExplorer explorer, NewFeatureStoreParameters params) |
|
1125 |
public void export(DataServerExplorer explorer, String provider, NewFeatureStoreParameters params)
|
|
1097 | 1126 |
throws DataException { |
1098 | 1127 |
|
1099 | 1128 |
if (this.getFeatureTypes().size() != 1) { |
... | ... | |
1111 | 1140 |
params.setDefaultFeatureType(type.getEditable()); |
1112 | 1141 |
|
1113 | 1142 |
} |
1114 |
explorer.add(params, true); |
|
1143 |
explorer.add(provider, params, true);
|
|
1115 | 1144 |
|
1116 | 1145 |
DataManager manager = DALLocator.getDataManager(); |
1117 |
target = (FeatureStore) manager |
|
1118 |
.createStore(params); |
|
1146 |
target = (FeatureStore) manager.openStore(provider, params); |
|
1119 | 1147 |
FeatureType targetType = target.getDefaultFeatureType(); |
1120 | 1148 |
|
1121 | 1149 |
target.edit(MODE_APPEND); |
... | ... | |
1685 | 1713 |
} |
1686 | 1714 |
|
1687 | 1715 |
public Object getDynValue(String name) throws DynFieldNotFoundException { |
1716 |
if( this.metadata.hasDynValue(name) ) { |
|
1717 |
return this.metadata.getDynValue(name); |
|
1718 |
} |
|
1719 |
if( METADATA_PROVIDER.equalsIgnoreCase(name) ) { |
|
1720 |
return this.provider.getName(); |
|
1721 |
} else if( METADATA_CONTAINERNAME.equalsIgnoreCase(name) ) { |
|
1722 |
return this.provider.getSourceId(); |
|
1723 |
} else if( METADATA_FEATURETYPE.equalsIgnoreCase(name) ) { |
|
1724 |
try { |
|
1725 |
return this.getDefaultFeatureType(); |
|
1726 |
} catch (DataException e) { |
|
1727 |
return null; |
|
1728 |
} |
|
1729 |
} |
|
1688 | 1730 |
return this.metadata.getDynValue(name); |
1689 | 1731 |
} |
1690 | 1732 |
|
... | ... | |
1708 | 1750 |
|
1709 | 1751 |
public void setDynValue(String name, Object value) |
1710 | 1752 |
throws DynFieldNotFoundException { |
1711 |
this.setDynValue(name, value); |
|
1753 |
this.metadata.setDynValue(name, value);
|
|
1712 | 1754 |
|
1713 | 1755 |
} |
1714 | 1756 |
|
... | ... | |
1718 | 1760 |
* @see org.gvsig.metadata.Metadata#getMetadataChildren() |
1719 | 1761 |
*/ |
1720 | 1762 |
public Set getMetadataChildren() { |
1721 |
return null;
|
|
1763 |
return this.metadataChildren;
|
|
1722 | 1764 |
} |
1723 | 1765 |
|
1724 | 1766 |
/* |
... | ... | |
1798 | 1840 |
} |
1799 | 1841 |
} |
1800 | 1842 |
|
1843 |
public String getProviderName() { |
|
1844 |
return this.provider.getName(); |
|
1845 |
} |
|
1801 | 1846 |
} |
Also available in: Unified diff