gvsig-raster / org.gvsig.raster / trunk / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.impl / src / main / java / org / gvsig / raster / impl / store / DefaultRemoteRasterStore.java @ 8703
History | View | Annotate | Download (17.7 KB)
1 | 2443 | nbrodin | /* gvSIG. Geographic Information System of the Valencian Government
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2007-2008 Infrastructures and Transports Department
|
||
4 | * of the Valencian Government (CIT)
|
||
5 | *
|
||
6 | * This program is free software; you can redistribute it and/or
|
||
7 | * modify it under the terms of the GNU General Public License
|
||
8 | * as published by the Free Software Foundation; either version 2
|
||
9 | * of the License, or (at your option) any later version.
|
||
10 | *
|
||
11 | * This program is distributed in the hope that it will be useful,
|
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | * GNU General Public License for more details.
|
||
15 | *
|
||
16 | * You should have received a copy of the GNU General Public License
|
||
17 | * along with this program; if not, write to the Free Software
|
||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
19 | * MA 02110-1301, USA.
|
||
20 | *
|
||
21 | */
|
||
22 | package org.gvsig.raster.impl.store; |
||
23 | |||
24 | import java.awt.geom.Point2D; |
||
25 | |||
26 | import org.gvsig.fmap.dal.DALLocator; |
||
27 | import org.gvsig.fmap.dal.coverage.RasterLocator; |
||
28 | import org.gvsig.fmap.dal.coverage.RasterManager; |
||
29 | import org.gvsig.fmap.dal.coverage.datastruct.Extent; |
||
30 | import org.gvsig.fmap.dal.coverage.exception.CloneException; |
||
31 | import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
||
32 | import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters; |
||
33 | import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
||
34 | import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer; |
||
35 | import org.gvsig.fmap.dal.exception.InitializeException; |
||
36 | import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException; |
||
37 | import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
||
38 | import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider; |
||
39 | import org.gvsig.fmap.dal.spi.DataManagerProviderServices; |
||
40 | import org.gvsig.raster.impl.datastruct.BandListImpl; |
||
41 | import org.gvsig.raster.impl.provider.RasterProvider; |
||
42 | import org.gvsig.raster.impl.provider.TiledRasterProvider; |
||
43 | import org.gvsig.raster.impl.store.properties.MultiDataStoreMetadata; |
||
44 | import org.gvsig.tools.ToolsLocator; |
||
45 | import org.gvsig.tools.dynobject.DynStruct; |
||
46 | import org.gvsig.tools.persistence.PersistenceManager; |
||
47 | import org.gvsig.tools.persistence.PersistentState; |
||
48 | import org.gvsig.tools.persistence.exception.PersistenceException; |
||
49 | |||
50 | /**
|
||
51 | * This store represents a raster loaded from a remote service. This implements the interface
|
||
52 | * RemoteRasterServiceStore to provide enough methods for this kind of services.
|
||
53 | *
|
||
54 | * @author Nacho Brodin (nachobrodin@gmail.com)
|
||
55 | */
|
||
56 | public class DefaultRemoteRasterStore extends DefaultRasterStore { |
||
57 | public static final String PERSISTENT_NAME = "DefaultRemoteRasterStore_Persistent"; |
||
58 | public static final String PERSISTENT_DESCRIPTION = "DefaultRemoteRasterStore Persistent"; |
||
59 | private double fixedWidth = -1; |
||
60 | private double fixedHeight = -1; |
||
61 | private RasterManager rManager = RasterLocator.getManager();
|
||
62 | |||
63 | //When a image hasn't been loaded yet we need to know the extent
|
||
64 | |||
65 | public DefaultRemoteRasterStore() {
|
||
66 | super();
|
||
67 | } |
||
68 | |||
69 | /**
|
||
70 | * Crea un objeto RasterDataset nuevo con los mismos ficheros
|
||
71 | * que el actual.
|
||
72 | * @throws InitializeException
|
||
73 | */
|
||
74 | @Override
|
||
75 | public RasterDataStore newDataStore() {
|
||
76 | DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager(); |
||
77 | try {
|
||
78 | RemoteStoreParameters params = null;
|
||
79 | if(parameters instanceof RemoteStoreParameters) |
||
80 | params = ((RemoteStoreParameters)getParameters()).clone(); |
||
81 | DefaultRasterStore store = (DefaultRasterStore)dataman.openStore(params.getDataStoreName(), params); |
||
82 | ((RasterProvider)store.getProvider()).setStatus((RasterProvider)getProvider()); |
||
83 | return store;
|
||
84 | } catch (ValidateDataParametersException e) {
|
||
85 | return null; |
||
86 | } catch (ProviderNotRegisteredException e) {
|
||
87 | return null; |
||
88 | } catch (InitializeException e) {
|
||
89 | return null; |
||
90 | } |
||
91 | } |
||
92 | |||
93 | // @Override
|
||
94 | // protected Buffer setAreaOfInterestInWC(DefaultRasterQuery q)
|
||
95 | // throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
|
||
96 | // if(q.getType() == DefaultRasterQuery.TYPE_WCOORDS) {
|
||
97 | // q.setAdjustToExtent(currentQuery.isAdjustToExtent());
|
||
98 | // return getWindowWithoutResampling(q);
|
||
99 | // }
|
||
100 | //
|
||
101 | // if( q.getType() == DefaultRasterQuery.TYPE_WCOORDS_RESCALED ||
|
||
102 | // q.getType() == DefaultRasterQuery.TYPE_ONE_TILE) {
|
||
103 | // q.setAdjustToExtent(true);
|
||
104 | // return super.getWindowWithResampling(q);
|
||
105 | // /*if(getParameters() instanceof RemoteStoreParameters && ((RemoteStoreParameters)getParameters()).isSizeFixed()) {
|
||
106 | // q.setAdjustToExtent(true);
|
||
107 | // return super.getResampledWindow(q);
|
||
108 | // } else
|
||
109 | // return getWindow(q.getBBox().getULX(), q.getBBox().getULY(), q.getBBox().getLRX(), q.getBBox().getLRY(), q.getBufWidth(), q.getBufHeight(), true);*/
|
||
110 | // }
|
||
111 | //
|
||
112 | // return null;
|
||
113 | // }
|
||
114 | |||
115 | // public Buffer getWindowWC(DefaultRasterQuery q)
|
||
116 | // throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
|
||
117 | //
|
||
118 | // //Leemos pixels completos aunque el valor obtenido sea decimal. Esto se consigue redondeando
|
||
119 | // //por arriba el m?s alto y por abajo el menor y luego restandolos
|
||
120 | //
|
||
121 | // Point2D p1 = provider.worldToRaster(new Point2D.Double(q.getRequestBoundingBox().getULX(), q.getRequestBoundingBox().getULY()));
|
||
122 | // Point2D p2 = provider.worldToRaster(new Point2D.Double(q.getRequestBoundingBox().getLRX(), q.getRequestBoundingBox().getLRY()));
|
||
123 | //
|
||
124 | // //Para el valor mayor redondeamos por arriba. Para el valor menor redondeamos por abajo.
|
||
125 | // double p1X = (p1.getX() > p2.getX()) ? Math.ceil(p1.getX()) : Math.floor(p1.getX());
|
||
126 | // double p1Y = (p1.getY() > p2.getY()) ? Math.ceil(p1.getY()) : Math.floor(p1.getY());
|
||
127 | // double p2X = (p2.getX() > p1.getX()) ? Math.ceil(p2.getX()) : Math.floor(p2.getX());
|
||
128 | // double p2Y = (p2.getY() > p1.getY()) ? Math.ceil(p2.getY()) : Math.floor(p2.getY());
|
||
129 | //
|
||
130 | // int width = (int)Math.abs(p1X - p2X);
|
||
131 | // int height = (int)Math.abs(p1Y - p2Y);
|
||
132 | //
|
||
133 | // //Ajustamos por si nos hemos salido del raster
|
||
134 | // if(((int)(Math.min(p1X, p2X) + width)) > getWidth())
|
||
135 | // width = (int)(getWidth() - Math.min(p1X, p2X));
|
||
136 | // if(((int)(Math.min(p1Y, p2Y) + height)) > getHeight())
|
||
137 | // height = (int)(getHeight() - Math.min(p1Y, p2Y));
|
||
138 | //
|
||
139 | // if (p1X < 0)
|
||
140 | // p1X = 0;
|
||
141 | // if (p1Y < 0)
|
||
142 | // p1Y = 0;
|
||
143 | // if (p2X > getWidth())
|
||
144 | // p2X = getWidth();
|
||
145 | // if (p2Y > getHeight())
|
||
146 | // p2Y = getHeight();
|
||
147 | //
|
||
148 | // //Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
|
||
149 | // //equivalente a los pixeles redondeados.
|
||
150 | // Point2D wc1 = provider.rasterToWorld(new Point2D.Double(p1X, p1Y));
|
||
151 | // Point2D wc2 = provider.rasterToWorld(new Point2D.Double(p2X, p2Y));
|
||
152 | //
|
||
153 | // if(fixedWidth >= 0 && fixedHeight >= 0) {
|
||
154 | // width = (int)fixedWidth;
|
||
155 | // height = (int)fixedHeight;
|
||
156 | // }
|
||
157 | // Buffer buffer = DefaultRasterManager.getInstance().createMemoryBuffer(provider.getDataType()[0], width, height, provider.getBandCount(), true);
|
||
158 | // Extent ex = rManager.getDataStructFactory().createExtent(wc1.getX(), wc1.getY(), wc2.getX(), wc2.getY());
|
||
159 | // q.setRequestBoundingBox(ex);
|
||
160 | // q.setBandList(storeBandList);
|
||
161 | // q.setOutputBuffer(buffer);
|
||
162 | // return ((AbstractRasterProvider)provider).getDataSet(q);
|
||
163 | // }
|
||
164 | |||
165 | // public Buffer getWindowWithoutResampling(DefaultRasterQuery q)
|
||
166 | // throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
|
||
167 | // //El incremento o decremento de las X e Y depende de los signos de rotaci?n y escala en la matriz de transformaci?n. Por esto
|
||
168 | // //tenemos que averiguar si lrx es x + w o x -w, asi como si lry es y + h o y - h
|
||
169 | // Extent ext = getExtent();
|
||
170 | // Point2D pInit = provider.rasterToWorld(new Point2D.Double(0, 0));
|
||
171 | // Point2D pEnd = provider.rasterToWorld(new Point2D.Double((int)getWidth(), (int)getHeight()));
|
||
172 | // double wRaster = Math.abs(pEnd.getX() - pInit.getX());
|
||
173 | // double hRaster = Math.abs(pEnd.getY() - pInit.getY());
|
||
174 | // double lrx = (((int)(ext.getULX() - wRaster)) == ((int)ext.getLRX())) ? (q.getX() - q.getW()) : (q.getX() + q.getW());
|
||
175 | // double lry = (((int)(ext.getULY() - hRaster)) == ((int)ext.getLRY())) ? (q.getY() - q.getH()) : (q.getY() + q.getH());
|
||
176 | //
|
||
177 | // //Leemos pixels completos aunque el valor obtenido sea decimal. Esto se consigue redondeando
|
||
178 | // //por arriba el m?s alto y por abajo el menor y luego restandolos
|
||
179 | //
|
||
180 | // Point2D p1 = provider.worldToRaster(new Point2D.Double(q.getX(), q.getY()));
|
||
181 | // Point2D p2 = provider.worldToRaster(new Point2D.Double(lrx, lry));
|
||
182 | // int width = (int)Math.abs(Math.ceil(p2.getX()) - Math.floor(p1.getX()));
|
||
183 | // int height = (int)Math.abs(Math.floor(p1.getY()) - Math.ceil(p2.getY()));
|
||
184 | //
|
||
185 | // //Ajustamos por si nos hemos salido del raster
|
||
186 | // if(((int)(p1.getX() + width)) > getWidth())
|
||
187 | // width = (int)(getWidth() - p1.getX());
|
||
188 | // if(((int)(p1.getY() + height)) > getHeight())
|
||
189 | // height = (int)(getHeight() - p1.getY());
|
||
190 | //
|
||
191 | // if (p1.getX() < 0)
|
||
192 | // p1.setLocation(0, p1.getY());
|
||
193 | // if (p1.getY() < 0)
|
||
194 | // p1.setLocation(p1.getX(), 0);
|
||
195 | // if (p2.getX() > getWidth())
|
||
196 | // p2.setLocation(getWidth(), p2.getY());
|
||
197 | // if (p2.getY() > getHeight())
|
||
198 | // p2.setLocation(p2.getX(), getHeight());
|
||
199 | //
|
||
200 | // if(fixedWidth >= 0 && fixedHeight >= 0) {
|
||
201 | // width = (int)fixedWidth;
|
||
202 | // height = (int)fixedHeight;
|
||
203 | // }
|
||
204 | //
|
||
205 | // //Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
|
||
206 | // //equivalente a los pixeles redondeados.
|
||
207 | // Point2D wc1 = provider.rasterToWorld(new Point2D.Double(Math.floor(p1.getX()), Math.floor(p1.getY())));
|
||
208 | // Point2D wc2 = provider.rasterToWorld(new Point2D.Double(Math.ceil(p2.getX()), Math.ceil(p2.getY())));
|
||
209 | // Buffer buffer = DefaultRasterManager.getInstance().createMemoryBuffer(provider.getDataType()[0], width, height, provider.getBandCount(), true);
|
||
210 | // q.setAreaOfInterest(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()));
|
||
211 | // q.setBandList(storeBandList);
|
||
212 | // q.setOutputBuffer(buffer);
|
||
213 | // return ((AbstractRasterProvider)provider).getDataSet(q);
|
||
214 | // }
|
||
215 | |||
216 | // public void getWindowTiled(DefaultRasterQuery q)
|
||
217 | // throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
|
||
218 | // ((AbstractRasterProvider)provider).getDataSet(q);
|
||
219 | // }
|
||
220 | |||
221 | // public Buffer getWindowWithResampling(DefaultRasterQuery q)
|
||
222 | // throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
|
||
223 | // int mallocNBands = 0;
|
||
224 | // if(storeBandList.getDrawableBands() != null)
|
||
225 | // mallocNBands = storeBandList.getDrawableBands().length;
|
||
226 | // else
|
||
227 | // mallocNBands = storeBandList.getDrawableBandsCount();
|
||
228 | //
|
||
229 | // int dataType = provider.getDataType()[0];
|
||
230 | // Buffer buffer = DefaultRasterManager.getInstance().createMemoryBuffer(dataType, q.getBufWidth(), q.getBufHeight(), mallocNBands, true);
|
||
231 | // q.setBandList(storeBandList);
|
||
232 | // q.setOutputBuffer(buffer);
|
||
233 | // return ((AbstractRasterProvider)provider).getDataSet(q);
|
||
234 | // }
|
||
235 | |||
236 | // public Buffer getWindowPx(DefaultRasterQuery q)
|
||
237 | // throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
|
||
238 | // if(q.getPixelX() < 0 || q.getPixelY() < 0 || q.getPixelW() > getWidth() || q.getPixelH() > getHeight())
|
||
239 | // throw new InvalidSetViewException("Out of image");
|
||
240 | //
|
||
241 | // if( q.getType() == DefaultRasterQuery.TYPE_PX ||
|
||
242 | // q.getType() == DefaultRasterQuery.TYPE_ENTIRE ||
|
||
243 | // q.getBufWidth() <= 0 || q.getBufHeight() <= 0) {
|
||
244 | // q.setBufWidth(q.getPixelW());
|
||
245 | // q.setBufHeight(q.getPixelH());
|
||
246 | // //TODO: Pruebas con SizeFixed
|
||
247 | // /*if(((RemoteStoreParameters)getParameters()).isSizeFixed())
|
||
248 | // return super.getWindow(q.getPixelX(), q.getPixelY(), q.getPixelW(), q.getPixelH());
|
||
249 | // else
|
||
250 | // return getWindow(q.getPixelX(), q.getPixelY(), q.getPixelW(), q.getPixelH());*/
|
||
251 | // }
|
||
252 | //
|
||
253 | // Buffer buffer = DefaultRasterManager.getInstance().createMemoryBuffer(provider.getDataType()[0],
|
||
254 | // q.getBufWidth(), q.getBufHeight(), provider.getBandCount(), true);
|
||
255 | //
|
||
256 | // q.setBandList(storeBandList);
|
||
257 | // q.setOutputBuffer(buffer);
|
||
258 | // return ((AbstractRasterProvider)provider).getDataSet(q);
|
||
259 | // }
|
||
260 | |||
261 | |||
262 | //******************************
|
||
263 | //Setters and Getters
|
||
264 | //******************************
|
||
265 | |||
266 | /**
|
||
267 | * Calcula el tama?o de los ficheros en disco
|
||
268 | * @return tama?o en bytes de todos los ficheros de la lista
|
||
269 | */
|
||
270 | @Override
|
||
271 | public long getFileSize() { |
||
272 | return 0; |
||
273 | } |
||
274 | |||
275 | /*
|
||
276 | * (non-Javadoc)
|
||
277 | * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getHeight()
|
||
278 | */
|
||
279 | @Override
|
||
280 | public double getHeight() { |
||
281 | return provider.getHeight();
|
||
282 | } |
||
283 | |||
284 | /*
|
||
285 | * (non-Javadoc)
|
||
286 | * @see org.gvsig.raster.dataset.IRasterDataSource#getWidth()
|
||
287 | */
|
||
288 | @Override
|
||
289 | public double getWidth() { |
||
290 | return provider.getWidth();
|
||
291 | } |
||
292 | |||
293 | /*
|
||
294 | * (non-Javadoc)
|
||
295 | * @see org.gvsig.fmap.dal.coverage.dataset.RasterDataStore#getDataType()
|
||
296 | */
|
||
297 | @Override
|
||
298 | public int[] getDataType() { |
||
299 | if(provider != null) |
||
300 | return provider.getDataType();
|
||
301 | return null; |
||
302 | } |
||
303 | |||
304 | /**
|
||
305 | * Obtiene la coordenada X m?nima de toda la lista
|
||
306 | * @return Coordenada X m?nima
|
||
307 | */
|
||
308 | @Override
|
||
309 | public double getMinX() { |
||
310 | return provider.getExtent().getMin().getX();
|
||
311 | } |
||
312 | |||
313 | /**
|
||
314 | * Obtiene la coordenada Y m?nima de toda la lista
|
||
315 | * @return Coordenada Y m?nima
|
||
316 | */
|
||
317 | @Override
|
||
318 | public double getMinY() { |
||
319 | return provider.getExtent().getMin().getY();
|
||
320 | } |
||
321 | |||
322 | /**
|
||
323 | * Obtiene la coordenada Y m?xima de toda la lista
|
||
324 | * @return Coordenada Y m?xima
|
||
325 | */
|
||
326 | @Override
|
||
327 | public double getMaxX() { |
||
328 | return provider.getExtent().getMax().getX();
|
||
329 | } |
||
330 | |||
331 | /**
|
||
332 | * Obtiene la coordenada Y m?xima de toda la lista
|
||
333 | * @return Coordenada Y m?xima
|
||
334 | */
|
||
335 | @Override
|
||
336 | public double getMaxY() { |
||
337 | return provider.getExtent().getMax().getY();
|
||
338 | } |
||
339 | |||
340 | /**
|
||
341 | * Obtiene la paleta correspondiente a uno de los ficheros que forman el GeoMultiRasterFile
|
||
342 | * @param i Posici?n del raster
|
||
343 | * @return Paleta asociada a este o null si no tiene
|
||
344 | */
|
||
345 | @Override
|
||
346 | public ColorTable getColorTable(int i) { |
||
347 | return provider.getColorTable();
|
||
348 | } |
||
349 | |||
350 | /**
|
||
351 | * Obtiene la paleta correspondiente al nombre del fichero pasado por par?metro.
|
||
352 | * @param fileName Nombre del fichero
|
||
353 | * @return Paleta o null si no la tiene
|
||
354 | */
|
||
355 | @Override
|
||
356 | public ColorTable getColorTable(String fileName){ |
||
357 | return provider.getColorTable();
|
||
358 | } |
||
359 | |||
360 | /*
|
||
361 | * (non-Javadoc)
|
||
362 | * @see org.gvsig.raster.dataset.IRasterDataSource#isGeoreferenced()
|
||
363 | */
|
||
364 | @Override
|
||
365 | public boolean isGeoreferenced() { |
||
366 | return provider.isGeoreferenced();
|
||
367 | } |
||
368 | |||
369 | /*
|
||
370 | * (non-Javadoc)
|
||
371 | * @see org.gvsig.raster.impl.dataset.QueryableRaster#getDataset()
|
||
372 | */
|
||
373 | @Override
|
||
374 | public RasterDataStore getDataStore() {
|
||
375 | return this; |
||
376 | } |
||
377 | |||
378 | /*
|
||
379 | * (non-Javadoc)
|
||
380 | * @see org.gvsig.fmap.dal.coverage.store.RasterDataStore#cloneDataStore()
|
||
381 | */
|
||
382 | @Override
|
||
383 | public RasterDataStore cloneDataStore() throws CloneException { |
||
384 | DefaultRemoteRasterStore ds = new DefaultRemoteRasterStore();
|
||
385 | |||
386 | int[] bands = new int[]{provider.getBandCount()}; |
||
387 | ds.metadata = new MultiDataStoreMetadata(bands);
|
||
388 | |||
389 | RasterProvider prov = provider.cloneProvider(); |
||
390 | ds.provider = prov; |
||
391 | ds.metadata = provider.getMetadata(); |
||
392 | |||
393 | ds.storeBandList = (BandListImpl)storeBandList.clone(); |
||
394 | return ds;
|
||
395 | } |
||
396 | |||
397 | /*
|
||
398 | * (non-Javadoc)
|
||
399 | * @see org.gvsig.fmap.dal.coverage.store.RasterDataStore#getHistogram()
|
||
400 | */
|
||
401 | @Override
|
||
402 | public HistogramComputer getHistogramComputer() {
|
||
403 | if(provider != null) |
||
404 | return provider.getHistogramComputer();
|
||
405 | return null; |
||
406 | } |
||
407 | |||
408 | /**
|
||
409 | * Returns true if the size is fixed
|
||
410 | * @return
|
||
411 | */
|
||
412 | public boolean isFixedSize() { |
||
413 | return ((RemoteStoreParameters)getParameters()).isSizeFixed();
|
||
414 | } |
||
415 | |||
416 | public CoverageStoreProvider getProvider() {
|
||
417 | return provider;
|
||
418 | } |
||
419 | |||
420 | /*
|
||
421 | * (non-Javadoc)
|
||
422 | * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getCoordsInTheNearestLevel(org.gvsig.fmap.dal.coverage.datastruct.Extent, int, int)
|
||
423 | */
|
||
424 | public Extent getCoordsInTheNearestLevel(Extent extent, int w, int h) { |
||
425 | try {
|
||
426 | return ((TiledRasterProvider)getProvider()).getCoordsInTheNearestLevel(extent, w, h);
|
||
427 | } catch (ClassCastException e) { |
||
428 | return null; |
||
429 | } |
||
430 | } |
||
431 | |||
432 | /*
|
||
433 | * (non-Javadoc)
|
||
434 | * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getCoordsInLevel(java.awt.geom.Point2D, int, int, int)
|
||
435 | */
|
||
436 | public Extent getCoordsInLevel(Point2D viewCenter, int level, int w, int h) { |
||
437 | try {
|
||
438 | return ((TiledRasterProvider)getProvider()).getCoordsInLevel(viewCenter, level, w, h);
|
||
439 | } catch (ClassCastException e) { |
||
440 | return null; |
||
441 | } |
||
442 | } |
||
443 | |||
444 | /*
|
||
445 | * (non-Javadoc)
|
||
446 | * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getZoomLevels()
|
||
447 | */
|
||
448 | public int getZoomLevels() { |
||
449 | try {
|
||
450 | return ((TiledRasterProvider)getProvider()).getZoomLevels();
|
||
451 | } catch (ClassCastException e) { |
||
452 | return -1; |
||
453 | } |
||
454 | } |
||
455 | |||
456 | /*
|
||
457 | * (non-Javadoc)
|
||
458 | * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getNearestLevel(double)
|
||
459 | */
|
||
460 | public int getNearestLevel(double pixelSize) { |
||
461 | try {
|
||
462 | return ((TiledRasterProvider)getProvider()).getNearestLevel(pixelSize);
|
||
463 | } catch (ClassCastException e) { |
||
464 | return -1; |
||
465 | } |
||
466 | } |
||
467 | |||
468 | /*
|
||
469 | * (non-Javadoc)
|
||
470 | * @see org.gvsig.raster.impl.store.AbstractRasterDataStore#loadFromState(org.gvsig.tools.persistence.PersistentState)
|
||
471 | */
|
||
472 | public void loadFromState(PersistentState state) |
||
473 | throws PersistenceException {
|
||
474 | super.loadFromState(state);
|
||
475 | } |
||
476 | |||
477 | /*
|
||
478 | * (non-Javadoc)
|
||
479 | * @see org.gvsig.raster.impl.store.AbstractRasterDataStore#saveToState(org.gvsig.tools.persistence.PersistentState)
|
||
480 | */
|
||
481 | public void saveToState(PersistentState state) throws PersistenceException { |
||
482 | super.saveToState(state);
|
||
483 | } |
||
484 | |||
485 | public static void registerPersistence() { |
||
486 | PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
||
487 | DynStruct definition = manager.getDefinition(PERSISTENT_NAME); |
||
488 | if( definition == null ) { |
||
489 | if (manager.getDefinition(DefaultRasterStore.class) == null) { |
||
490 | DefaultRasterStore.registerPersistence(); |
||
491 | } |
||
492 | |||
493 | definition = manager.addDefinition( |
||
494 | DefaultRemoteRasterStore.class, |
||
495 | PERSISTENT_NAME, |
||
496 | PERSISTENT_DESCRIPTION, |
||
497 | null,
|
||
498 | null
|
||
499 | ); |
||
500 | |||
501 | definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, DefaultRasterStore.PERSISTENT_NAME); |
||
502 | } |
||
503 | } |
||
504 | } |