Revision 2316 org.gvsig.raster/branches/org.gvsig.raster_dataaccess_refactoring/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/DefaultRasterStore.java

View differences:

DefaultRasterStore.java
13 13
import org.gvsig.compat.net.ICancellable;
14 14
import org.gvsig.fmap.crs.CRSFactory;
15 15
import org.gvsig.fmap.dal.DALLocator;
16
import org.gvsig.fmap.dal.DataManager;
17
import org.gvsig.fmap.dal.DataServerExplorer;
18
import org.gvsig.fmap.dal.DataServerExplorerParameters;
16 19
import org.gvsig.fmap.dal.DataStoreParameters;
17 20
import org.gvsig.fmap.dal.coverage.RasterLocator;
18 21
import org.gvsig.fmap.dal.coverage.RasterManager;
......
23 26
import org.gvsig.fmap.dal.coverage.datastruct.Params;
24 27
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
25 28
import org.gvsig.fmap.dal.coverage.exception.CloneException;
29
import org.gvsig.fmap.dal.coverage.exception.ConnectException;
26 30
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
27 31
import org.gvsig.fmap.dal.coverage.exception.FilterManagerException;
28 32
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException;
......
39 43
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
40 44
import org.gvsig.fmap.dal.coverage.grid.RasterFilterListManager;
41 45
import org.gvsig.fmap.dal.coverage.grid.render.Render;
46
import org.gvsig.fmap.dal.coverage.store.RasterDataServerExplorer;
42 47
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
43 48
import org.gvsig.fmap.dal.coverage.store.parameter.MultiDimensionalStoreParameters;
44 49
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
50
import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters;
51
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
45 52
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
46 53
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
47 54
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
......
102 109
	 * de que la lista de ROIs sea muy grande. Adem?s deber?a optimizarse el acceso isInside para que las
103 110
	 * operaciones con ROIs asociados sean lo m?s r?pidas posible.
104 111
	 */
105
	private List<ROI>               rois                           = null;
112
	private List<ROI>                        rois                           = null;
106 113
	
107
	//protected boolean                       forceToMemory = false;
108
	
109 114
	public DefaultRasterStore() {
110 115
		super();
111 116
	}
......
387 392
		getBands().addDrawableBand(posRasterBuf, imageBand);
388 393
	}
389 394

  
390
	/*public boolean isReadOnly() {
391
		return readOnly;
392
	}
393

  
394
	public void setReadOnly(boolean readOnly) {
395
		this.readOnly = readOnly;
396
		if(readOnly)
397
			this.forceToMemory = false;
398
	}
399

  
400
	public void setMemoryBuffer(boolean memory) {
401
		this.forceToMemory = memory;
402
		if(memory)
403
			this.readOnly = false;
404
	}
405

  
406
	public boolean isMemoryBuffer() {
407
		return forceToMemory;
408
	}*/
409
	
410 395
	public void deleteLayerFromCache() {
411 396
		provider.deleteLayerFromCache();
412 397
	}
......
950 935
	public List<File> getROIsFiles() throws RmfSerializerException {
951 936
		return getDataStore().getROIFileListFromRmf();
952 937
	}
953

  
938
	
939
	public void close() {
940
		if(provider != null)
941
			provider.close();
942
		if(storeBandList != null)
943
			storeBandList.clear();
944
		provider = null;
945
		storeBandList = null;
946
		super.close();
947
		try {
948
			finalize();
949
		} catch (Throwable e) {
950
		}
951
	}
952
	
953
	protected void finalize() throws Throwable {
954
		provider               = null;
955
		storeBandList               = null;
956
		metadata               = null;
957
		if(rois != null) {
958
			rois.clear();
959
			rois = null;
960
		}
961
		super.finalize();
962
	}
963
	
964
	//******************************
965
	//Persistence
966
	//******************************
967
	
968
	public static void registerPersistence() {
969
		PersistenceManager manager = ToolsLocator.getPersistenceManager();
970
		DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
971
		if( definition == null ) {
972
			definition = manager.addDefinition(
973
					DefaultRasterStore.class,
974
					PERSISTENT_NAME,
975
					PERSISTENT_DESCRIPTION,
976
					null, 
977
					null
978
			);
979
			
980
			definition.addDynFieldObject("parameters").setClassOfValue(RasterDataParameters.class).setMandatory(true);
981
			definition.addDynFieldString("explorername").setMandatory(false);
982
			
983
			definition.addDynFieldObject("bandList").setClassOfValue(BandList.class).setMandatory(false);
984
			definition.addDynFieldObject("metadata").setClassOfValue(Metadata.class).setMandatory(false);
985
			definition.addDynFieldObject("render").setClassOfValue(Render.class).setMandatory(true);
986
			
987
			definition.addDynFieldObject("filterList").setClassOfValue(RasterFilterList.class).setMandatory(false);
988
			definition.addDynFieldList("paramlist").setClassOfItems(PersistencyFilterParam.class).setMandatory(false);
989
		}
990
	}
991
	
954 992
	public void loadFromState(PersistentState state)
955 993
			throws PersistenceException {
956
		if(parameters == null)
957
			this.parameters = (RasterDataParameters)state.get("parameters");
958
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
994
		this.parameters = (RasterDataParameters)state.get("parameters");
995
		
996
		String explorerName = (String)state.get("explorername");
997
		if(explorerName != null) {
998
			if(initializePersistentParameters((RasterDataParameters)this.parameters, explorerName) == null) {
999
				throw new PersistenceException();
1000
			}
1001
		}
1002
		
959 1003
		try {
1004
			DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
960 1005
			this.provider = (AbstractRasterProvider)dataManager.createProvider(this, this.parameters);
961 1006
		} catch (InitializeException e) {
962
			//throw new PersistenceException(e);
1007
			throw new PersistenceException(e);
963 1008
		} catch (ProviderNotRegisteredException e) {
964 1009
			throw new PersistenceException(e);
965 1010
		}
1011
		
966 1012
		this.storeBandList = (BandListImpl)state.get("bandList");
967 1013
		if(parameters instanceof AbstractRasterFileDataParameters && !this.provider.isMultiFile()) {
968 1014
			//Esto solo es por si al cargar un proyecto se ha cambiado el fichero de sitio y el usuario
......
973 1019
			}
974 1020
		}
975 1021
		this.metadata = (Metadata)state.get("metadata");
976
		setRender((Render)state.get("render"));
977
		//ColorInterpretation ci = getRender().getRenderColorInterpretation(); //Evitamos que las bandas que fueron cargadas se machaquen ahora
1022
		
1023
		Render render = (Render)state.get("render");
1024
		if(render == null)
1025
			throw new PersistenceException();
1026
		setRender(render);
978 1027
		getRender().setDataStore(this);
979
		//getRender().setRenderColorInterpretation(ci);
980 1028
		if(getRender().getRenderingTransparency() != null)
981 1029
			getRender().getRenderingTransparency().setNoData(getNoDataValue());
982 1030
		
983 1031
		loadFiltersFromProject(state);
984
		
985 1032
	}
986 1033
	
987 1034
	@SuppressWarnings("unchecked")
......
1015 1062
	}
1016 1063

  
1017 1064
	public void saveToState(PersistentState state) throws PersistenceException {
1018
		state.set("parameters", provider.getDataParameters());		
1065
		state.set("parameters", provider.getDataParameters());	
1066
		RasterDataParameters provParams = getInternalDataParameterFromState(provider.getDataParameters());
1067
		state.set("explorername", provParams.getDataStoreName());
1019 1068
		state.set("bandList", storeBandList);
1020 1069
		state.set("metadata", metadata);
1021 1070
		state.set("render", getRender());
......
1033 1082
			filters.add(param);
1034 1083
		}
1035 1084
		state.set("paramlist", filters);
1036
		//state.set("rois", rois);
1037 1085
	}	
1038 1086
	
1039
	public static void registerPersistence() {
1040
		PersistenceManager manager = ToolsLocator.getPersistenceManager();
1041
		DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
1042
		if( definition == null ) {
1043
			definition = manager.addDefinition(
1044
					DefaultRasterStore.class,
1045
					PERSISTENT_NAME,
1046
					PERSISTENT_DESCRIPTION,
1047
					null, 
1048
					null
1049
			);
1087
	/**
1088
	 * Actions to initialize parameters before loaded more parts of the project
1089
	 * @param providerParams
1090
	 * @param explorerName
1091
	 * @return
1092
	 */
1093
	private RasterDataParameters initializePersistentParameters(RasterDataParameters providerParams, String explorerName) {
1094
		try {
1095
			if(!(getInternalDataParameterFromState(providerParams) instanceof RemoteStoreParameters))
1096
				return providerParams;
1050 1097
			
1051
			definition.addDynFieldObject("parameters").setClassOfValue(RasterDataParameters.class).setMandatory(true);
1052
			definition.addDynFieldObject("bandList").setClassOfValue(BandList.class).setMandatory(false);
1053
			definition.addDynFieldObject("metadata").setClassOfValue(Metadata.class).setMandatory(false);
1054
			definition.addDynFieldObject("render").setClassOfValue(Render.class).setMandatory(true);
1055
			
1056
			definition.addDynFieldObject("filterList").setClassOfValue(RasterFilterList.class).setMandatory(false);
1057
			definition.addDynFieldList("paramlist").setClassOfItems(PersistencyFilterParam.class).setMandatory(false);
1058
			
1059
			//definition.addDynFieldList("rois").setClassOfItems(ROI.class).setMandatory(false);
1098
			DataManager datamanager = DALLocator.getDataManager();
1099
			DataServerExplorerParameters explorerParams = null;
1100
			explorerParams = datamanager.createServerExplorerParameters(explorerName);
1101
			explorerParams.setDynValue("host", "");
1102
			explorerParams.setDynValue("axisorder", new Boolean(false));
1103
			DataServerExplorer e = datamanager.openServerExplorer(explorerName, explorerParams);
1104
			if(e instanceof RasterDataServerExplorer) {
1105
				RasterDataServerExplorer explorer = (RasterDataServerExplorer)e;
1106
				
1107
				explorerParams = explorer.getParameters();
1108
				explorerParams.setDynValue("host", providerParams.getURI());
1109
				
1110
				if(!explorer.isHostReachable()) {
1111
					return null;
1112
				}
1113
				
1114
				try {
1115
					explorer.connect(null);
1116
				} catch (ConnectException exc) {
1117
					return null;
1118
				}
1119
				
1120
				RasterDataParameters newParameters = getInternalDataParameterFromState(explorer.getStoredParameters());
1121
				newParameters.assignFields(getInternalDataParameterFromState(providerParams), explorer);
1122
				if(providerParams instanceof TileDataParameters)
1123
					((TileDataParameters)providerParams).setDataParameters(newParameters);
1124
				return providerParams;
1125
			}
1126
		} catch (Exception e) {
1127
			return null;
1060 1128
		}
1129
		return null;
1061 1130
	}
1062 1131
	
1063
	public void close() {
1064
		if(provider != null)
1065
			provider.close();
1066
		if(storeBandList != null)
1067
			storeBandList.clear();
1068
		provider = null;
1069
		storeBandList = null;
1070
		super.close();
1071
		try {
1072
			finalize();
1073
		} catch (Throwable e) {
1132
	private RasterDataParameters getInternalDataParameterFromState(Object obj) {
1133
		if(obj instanceof TileDataParameters) {
1134
			return (RasterDataParameters)((TileDataParameters) obj).getDataParameters();
1135
		} else {
1136
			return (RasterDataParameters)obj;
1074 1137
		}
1075 1138
	}
1076
	
1077
	protected void finalize() throws Throwable {
1078
		provider               = null;
1079
		storeBandList               = null;
1080
		metadata               = null;
1081
		if(rois != null) {
1082
			rois.clear();
1083
			rois = null;
1084
		}
1085
		super.finalize();
1086
	}
1087 1139
}

Also available in: Unified diff