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
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