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

View differences:

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