Statistics
| Revision:

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

History | View | Annotate | Download (19.2 KB)

1
/* 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.compat.net.ICancellable;
27
import org.gvsig.fmap.dal.DALLocator;
28
import org.gvsig.fmap.dal.coverage.RasterLocator;
29
import org.gvsig.fmap.dal.coverage.RasterManager;
30
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
31
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
32
import org.gvsig.fmap.dal.coverage.exception.CloneException;
33
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
34
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
35
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
36
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
37
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
38
import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters;
39
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
40
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
41
import org.gvsig.fmap.dal.exception.InitializeException;
42
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
43
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
44
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
45
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
46
import org.gvsig.raster.impl.DefaultRasterManager;
47
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
48
import org.gvsig.raster.impl.datastruct.BandListImpl;
49
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
50
import org.gvsig.raster.impl.provider.RasterProvider;
51
import org.gvsig.raster.impl.provider.RemoteRasterProvider;
52
import org.gvsig.raster.impl.provider.TiledRasterProvider;
53
import org.gvsig.raster.impl.store.properties.MultiDataStoreMetadata;
54
import org.gvsig.tools.ToolsLocator;
55
import org.gvsig.tools.dynobject.DynStruct;
56
import org.gvsig.tools.persistence.PersistenceManager;
57
import org.gvsig.tools.persistence.PersistentState;
58
import org.gvsig.tools.persistence.exception.PersistenceException;
59

    
60
/**
61
 * This store represents a raster loaded from a remote service. This implements the interface
62
 * RemoteRasterServiceStore to provide enough methods for this kind of services.
63
 *
64
 * @author Nacho Brodin (nachobrodin@gmail.com)
65
 */
66
public class DefaultRemoteRasterStore extends DefaultRasterStore {
67
        public static final String   PERSISTENT_NAME        = "DefaultRemoteRasterStore_Persistent";
68
    public static final String   PERSISTENT_DESCRIPTION = "DefaultRemoteRasterStore Persistent";
69
        private double               fixedWidth  = -1;
70
        private double               fixedHeight = -1;
71
        private RasterManager        rManager    = RasterLocator.getManager();
72
        
73
        //When a image hasn't been loaded yet we need to know the extent
74
        
75
        public DefaultRemoteRasterStore() {
76
                super();
77
        }
78

    
79
        /**
80
         * Crea un objeto MultiRasterDataset nuevo con los mismos ficheros
81
         * que el actual.
82
         * @return MultiRasterDataset
83
         * @throws InitializeException 
84
         */
85
        @Override
86
        public RasterDataStore newDataStore() {
87
                DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
88
                try {
89
                        RemoteStoreParameters params = null;
90
                        if(parameters instanceof RemoteStoreParameters)
91
                                params = ((RemoteStoreParameters)getParameters()).clone();
92
                        DefaultRasterStore store = (DefaultRasterStore)dataman.openStore(params.getDataStoreName(), params);
93
                        ((RasterProvider)store.getProvider()).setStatus((RasterProvider)getProvider());
94
                        return store;
95
                } catch (ValidateDataParametersException e) {
96
                        return null;
97
                } catch (ProviderNotRegisteredException e) {
98
                        return null;
99
                } catch (InitializeException e) {
100
                        return null;
101
                }
102
        }
103
        
104
        /*
105
         * (non-Javadoc)
106
         * @see org.gvsig.raster.impl.store.AbstractRasterDataStore#setAreaOfInterest(double, double, double, double)
107
         */
108
        @Override
109
        protected Buffer setAreaOfInterestInWC(DefaultRasterQuery q)
110
                throws RasterDriverException, InvalidSetViewException, ProcessInterruptedException {
111
                if(q.getType() == DefaultRasterQuery.TYPE_COORDS) {
112
                        q.setAdjustToExtent(currentQuery.isAdjustToExtent());
113
                        return getWindowWithoutResampling(q);
114
                }
115
                
116
                if(        q.getType() == DefaultRasterQuery.TYPE_COORDS_SIZE || 
117
                        q.getType() == DefaultRasterQuery.TYPE_ONE_TILE) {
118
                        q.setAdjustToExtent(true);
119
                        return super.getWindowWithResampling(q);
120
                        /*if(getParameters() instanceof RemoteStoreParameters && ((RemoteStoreParameters)getParameters()).isSizeFixed()) {
121
                                q.setAdjustToExtent(true);
122
                                return super.getResampledWindow(q);
123
                        } else
124
                                return getWindow(q.getBBox().getULX(), q.getBBox().getULY(), q.getBBox().getLRX(), q.getBBox().getLRY(), q.getBufWidth(), q.getBufHeight(), true);*/
125
                }
126
                
127
                return null;
128
        }
129

    
130
        /*
131
         * (non-Javadoc)
132
         * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double)
133
         */
134
        public Buffer getWindowWC(DefaultRasterQuery q)
135
                throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
136

    
137
                //Leemos pixels completos aunque el valor obtenido sea decimal. Esto se consigue redondeando
138
                //por arriba el m?s alto y por abajo el menor y luego restandolos
139

    
140
                Point2D p1 = provider.worldToRaster(new Point2D.Double(q.getBBox().getULX(), q.getBBox().getULY()));
141
                Point2D p2 = provider.worldToRaster(new Point2D.Double(q.getBBox().getLRX(), q.getBBox().getLRY()));
142

    
143
                //Para el valor mayor redondeamos por arriba. Para el valor menor redondeamos por abajo.
144
                double p1X = (p1.getX() > p2.getX()) ? Math.ceil(p1.getX()) : Math.floor(p1.getX());
145
                double p1Y = (p1.getY() > p2.getY()) ? Math.ceil(p1.getY()) : Math.floor(p1.getY());
146
                double p2X = (p2.getX() > p1.getX()) ? Math.ceil(p2.getX()) : Math.floor(p2.getX());
147
                double p2Y = (p2.getY() > p1.getY()) ? Math.ceil(p2.getY()) : Math.floor(p2.getY());
148

    
149
                int width = (int)Math.abs(p1X - p2X);
150
                int height = (int)Math.abs(p1Y - p2Y);
151

    
152
                //Ajustamos por si nos hemos salido del raster
153
                if(((int)(Math.min(p1X, p2X) + width)) > getWidth())
154
                        width = (int)(getWidth() - Math.min(p1X, p2X));
155
                if(((int)(Math.min(p1Y, p2Y) + height)) > getHeight())
156
                        height = (int)(getHeight() - Math.min(p1Y, p2Y));
157

    
158
                if (p1X < 0)
159
                        p1X = 0;
160
                if (p1Y < 0)
161
                        p1Y = 0;
162
                if (p2X > getWidth())
163
                        p2X = getWidth();
164
                if (p2Y > getHeight())
165
                        p2Y = getHeight();
166

    
167
                //Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
168
                //equivalente a los pixeles redondeados.
169
                Point2D wc1 = provider.rasterToWorld(new Point2D.Double(p1X, p1Y));
170
                Point2D wc2 = provider.rasterToWorld(new Point2D.Double(p2X, p2Y));
171
                
172
                if(fixedWidth >= 0 && fixedHeight >= 0) {
173
                        width = (int)fixedWidth;
174
                        height = (int)fixedHeight;
175
                }
176
                Buffer buffer =  DefaultRasterManager.getInstance().createMemoryBuffer(provider.getDataType()[0], width, height, provider.getBandCount(), true);
177
                Extent ex = rManager.getDataStructFactory().createExtent(wc1.getX(), wc1.getY(), wc2.getX(), wc2.getY());
178
                q.setBBox(ex);
179
                q.setBandList(bandList);
180
                q.setBuffer(buffer);
181
                return ((DefaultRasterProvider)provider).getDataSet(q);
182
        }
183

    
184
        /*
185
         * (non-Javadoc)
186
         * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, boolean)
187
         */
188
        public Buffer getWindowWithoutResampling(DefaultRasterQuery q)
189
                throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
190
                //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
191
                //tenemos que averiguar si lrx es x + w o x -w, asi como si lry es y + h o y - h
192
                Extent ext = getExtent();
193
                Point2D pInit = provider.rasterToWorld(new Point2D.Double(0, 0));
194
                Point2D pEnd = provider.rasterToWorld(new Point2D.Double((int)getWidth(), (int)getHeight()));
195
                double wRaster = Math.abs(pEnd.getX() - pInit.getX());
196
                double hRaster = Math.abs(pEnd.getY() - pInit.getY());
197
                double lrx = (((int)(ext.getULX() - wRaster)) == ((int)ext.getLRX())) ? (q.getX() - q.getW()) : (q.getX() + q.getW());
198
                double lry = (((int)(ext.getULY() - hRaster)) == ((int)ext.getLRY())) ? (q.getY() - q.getH()) : (q.getY() + q.getH());
199

    
200
                //Leemos pixels completos aunque el valor obtenido sea decimal. Esto se consigue redondeando
201
                //por arriba el m?s alto y por abajo el menor y luego restandolos
202

    
203
                Point2D p1 = provider.worldToRaster(new Point2D.Double(q.getX(), q.getY()));
204
                Point2D p2 = provider.worldToRaster(new Point2D.Double(lrx, lry));
205
                int width = (int)Math.abs(Math.ceil(p2.getX()) - Math.floor(p1.getX()));
206
                int height = (int)Math.abs(Math.floor(p1.getY()) - Math.ceil(p2.getY()));
207

    
208
                //Ajustamos por si nos hemos salido del raster
209
                if(((int)(p1.getX() + width)) > getWidth())
210
                        width = (int)(getWidth() - p1.getX());
211
                if(((int)(p1.getY() + height)) > getHeight())
212
                        height = (int)(getHeight() - p1.getY());
213

    
214
                if (p1.getX() < 0)
215
                        p1.setLocation(0, p1.getY());
216
                if (p1.getY() < 0)
217
                        p1.setLocation(p1.getX(), 0);
218
                if (p2.getX() > getWidth())
219
                        p2.setLocation(getWidth(), p2.getY());
220
                if (p2.getY() > getHeight())
221
                        p2.setLocation(p2.getX(), getHeight());
222

    
223
                if(fixedWidth >= 0 && fixedHeight >= 0) {
224
                        width = (int)fixedWidth;
225
                        height = (int)fixedHeight;
226
                }
227
                
228
                //Si hemos redondeado los pixeles de la petici?n (p1 y p2) por arriba y por abajo deberemos calcular un extent mayor
229
                //equivalente a los pixeles redondeados.
230
                Point2D wc1 = provider.rasterToWorld(new Point2D.Double(Math.floor(p1.getX()), Math.floor(p1.getY())));
231
                Point2D wc2 = provider.rasterToWorld(new Point2D.Double(Math.ceil(p2.getX()), Math.ceil(p2.getY())));
232
                Buffer buffer =  DefaultRasterManager.getInstance().createMemoryBuffer(provider.getDataType()[0], width, height, provider.getBandCount(), true);
233
                q.setAreaOfInterest(wc1.getX(), wc1.getY(), Math.abs(wc2.getX() - wc1.getX()), Math.abs(wc2.getY() - wc1.getY()));
234
                q.setBandList(bandList);
235
                q.setBuffer(buffer);
236
                return ((DefaultRasterProvider)provider).getDataSet(q);
237
        }
238
        
239
        /*
240
         * (non-Javadoc)
241
         * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.grid.render.TileListener, int)
242
         */
243
        public void getWindowTiled(DefaultRasterQuery q)
244
                throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {                
245
                ((DefaultRasterProvider)provider).getDataSet(q);
246
        }
247

    
248
        /*
249
         * (non-Javadoc)
250
         * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(double, double, double, double, int, int, boolean)
251
         */
252
        public Buffer getWindowWithResampling(DefaultRasterQuery q)
253
                throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
254
                int mallocNBands = 0;
255
                if(bandList.getDrawableBands() != null)
256
                        mallocNBands = bandList.getDrawableBands().length;
257
                else
258
                        mallocNBands = bandList.getDrawableBandsCount();
259
                
260
                int dataType = provider.getDataType()[0];
261
                Buffer buffer =  DefaultRasterManager.getInstance().createMemoryBuffer(dataType, q.getBufWidth(), q.getBufHeight(), mallocNBands, true);
262
                q.setBandList(bandList);
263
                q.setBuffer(buffer);
264
                return ((DefaultRasterProvider)provider).getDataSet(q);
265
        }
266

    
267
        /*
268
         * (non-Javadoc)
269
         * @see org.gvsig.raster.impl.store.QueryableRaster#getWindowRaster(int, int, int, int, int, int)
270
         */
271
        public Buffer getWindowPx(DefaultRasterQuery q)
272
                throws InvalidSetViewException, ProcessInterruptedException, RasterDriverException {
273
                if(q.getPixelX() < 0 || q.getPixelY() < 0 || q.getPixelW() > getWidth() || q.getPixelH() > getHeight())
274
                        throw new InvalidSetViewException("Out of image");
275
                
276
                if(        q.getType() == DefaultRasterQuery.TYPE_PX || 
277
                        q.getType() == DefaultRasterQuery.TYPE_ENTIRE || 
278
                        q.getBufWidth() <= 0 || q.getBufHeight() <= 0) {
279
                        q.setBufWidth(q.getPixelW());
280
                        q.setBufHeight(q.getPixelH());
281
                        //TODO: Pruebas con SizeFixed
282
                        /*if(((RemoteStoreParameters)getParameters()).isSizeFixed())
283
                                return super.getWindow(q.getPixelX(), q.getPixelY(), q.getPixelW(), q.getPixelH());
284
                        else
285
                                return getWindow(q.getPixelX(), q.getPixelY(), q.getPixelW(), q.getPixelH());*/
286
                }
287
                
288
                Buffer buffer =  DefaultRasterManager.getInstance().createMemoryBuffer(provider.getDataType()[0], 
289
                                q.getBufWidth(), q.getBufHeight(), provider.getBandCount(), true);
290
                
291
                q.setBandList(bandList);
292
                q.setBuffer(buffer);
293
                return ((DefaultRasterProvider)provider).getDataSet(q);
294
        }
295

    
296

    
297
        //******************************
298
        //Setters and Getters
299
        //******************************
300

    
301
        /**
302
         * Calcula el tama?o de los ficheros en disco
303
         * @return tama?o en bytes de todos los ficheros de la lista
304
         */
305
        @Override
306
        public long getFileSize() {
307
                return 0;
308
        }
309

    
310
        /*
311
         * (non-Javadoc)
312
         * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getHeight()
313
         */
314
        @Override
315
        public double getHeight() {
316
                return provider.getHeight();
317
        }
318

    
319
        /*
320
         * (non-Javadoc)
321
         * @see org.gvsig.raster.dataset.IRasterDataSource#getWidth()
322
         */
323
        @Override
324
        public double getWidth() {
325
                return provider.getWidth();
326
        }
327
        
328
        /*
329
         * (non-Javadoc)
330
         * @see org.gvsig.fmap.dal.coverage.dataset.RasterDataStore#getDataType()
331
         */
332
        @Override
333
        public int[] getDataType() {
334
                return provider.getDataType();
335
        }
336

    
337
        /**
338
         * Obtiene la coordenada X m?nima de toda la lista
339
         * @return Coordenada X m?nima
340
         */
341
        @Override
342
        public double getMinX() {
343
                return provider.getExtent().getMin().getX();
344
        }
345

    
346
        /**
347
         * Obtiene la coordenada Y m?nima de toda la lista
348
         * @return Coordenada Y m?nima
349
         */
350
        @Override
351
        public double getMinY() {
352
                return provider.getExtent().getMin().getY();
353
        }
354

    
355
        /**
356
         * Obtiene la coordenada Y m?xima de toda la lista
357
         * @return Coordenada Y m?xima
358
         */
359
        @Override
360
        public double getMaxX() {
361
                return provider.getExtent().getMax().getX();
362
        }
363

    
364
        /**
365
         * Obtiene la coordenada Y m?xima de toda la lista
366
         * @return Coordenada Y m?xima
367
         */
368
        @Override
369
        public double getMaxY() {
370
                return provider.getExtent().getMax().getY();
371
        }
372

    
373
        /**
374
         * Obtiene la paleta correspondiente a uno de los ficheros que forman el GeoMultiRasterFile
375
         * @param i Posici?n del raster
376
         * @return Paleta asociada a este o null si no tiene
377
         */
378
        @Override
379
        public ColorTable getColorTable(int i) {
380
                return provider.getColorTable();
381
        }
382

    
383
        /**
384
         * Obtiene la paleta correspondiente al nombre del fichero pasado por par?metro.
385
         * @param fileName Nombre del fichero
386
         * @return Paleta o null si no la tiene
387
         */
388
        @Override
389
        public ColorTable getColorTable(String fileName){
390
                return provider.getColorTable();
391
        }
392

    
393
        /*
394
         * (non-Javadoc)
395
         * @see org.gvsig.raster.dataset.IRasterDataSource#isGeoreferenced()
396
         */
397
        @Override
398
        public boolean isGeoreferenced() {
399
                return provider.isGeoreferenced();
400
        }
401
        
402
        /*
403
         * (non-Javadoc)
404
         * @see org.gvsig.raster.impl.dataset.QueryableRaster#getDataset()
405
         */
406
        @Override
407
        public RasterDataStore getDataStore() {
408
                return this;
409
        }
410

    
411
        /*
412
         * (non-Javadoc)
413
         * @see org.gvsig.fmap.dal.coverage.store.RasterDataStore#cloneDataStore()
414
         */
415
        @Override
416
        public RasterDataStore cloneDataStore() throws CloneException {
417
                DefaultRemoteRasterStore ds = new DefaultRemoteRasterStore();
418
                
419
                int[] bands = new int[]{provider.getBandCount()};
420
                ds.metadata = new MultiDataStoreMetadata(bands);
421
                
422
                RasterProvider prov = provider.cloneProvider();
423
                ds.provider = prov;
424
                ds.metadata = provider.getMetadata();
425
                
426
                ds.bandList = (BandListImpl)bandList.clone();
427
                return ds;
428
        }
429
        
430
        /*
431
         * (non-Javadoc)
432
         * @see org.gvsig.fmap.dal.coverage.store.RasterDataStore#getHistogram()
433
         */
434
        @Override
435
        public HistogramComputer getHistogramComputer() {
436
                if(provider != null)
437
                        return provider.getHistogramComputer();
438
                return null;
439
        }
440
        
441
        /**
442
         * Returns true if the size is fixed
443
         * @return
444
         */
445
        public boolean isFixedSize() {
446
                return ((RemoteStoreParameters)getParameters()).isSizeFixed();
447
        }
448
        
449
        public CoverageStoreProvider getProvider() {
450
                return provider;
451
        }
452
        
453
        /*
454
         * (non-Javadoc)
455
         * @see org.gvsig.fmap.dal.coverage.store.RemoteRasterStore#getInfoByPoint(double, double)
456
         */
457
        public String getInfoByPoint(double x, double y, ICancellable cancellable) throws RemoteServiceException {
458
                return ((RasterProvider)getProvider()).getInfoByPoint(x, y, cancellable);
459
        }
460
        
461
        public String getInfoByPoint(double x, double y, Extent bbox, int w, int h, ICancellable cancellable) throws RemoteServiceException {
462
                return ((RemoteRasterProvider)getProvider()).getInfoByPoint((int)x, (int)y, bbox, w, h, cancellable);
463
        }
464
        
465
        /*
466
         * (non-Javadoc)
467
         * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getCoordsInTheNearestLevel(org.gvsig.fmap.dal.coverage.datastruct.Extent, int, int)
468
         */
469
        public Extent getCoordsInTheNearestLevel(Extent extent, int w, int h) {
470
                try {
471
                        return ((TiledRasterProvider)getProvider()).getCoordsInTheNearestLevel(extent, w, h);
472
                } catch (ClassCastException e) {
473
                        return null;
474
                }
475
        }
476

    
477
        /*
478
         * (non-Javadoc)
479
         * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getCoordsInLevel(java.awt.geom.Point2D, int, int, int)
480
         */
481
        public Extent getCoordsInLevel(Point2D viewCenter, int level, int w, int h) {
482
                try {
483
                        return ((TiledRasterProvider)getProvider()).getCoordsInLevel(viewCenter, level, w, h);
484
                } catch (ClassCastException e) {
485
                        return null;
486
                }
487
        }
488

    
489
        /*
490
         * (non-Javadoc)
491
         * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getZoomLevels()
492
         */
493
        public int getZoomLevels() {
494
                try {
495
                        return ((TiledRasterProvider)getProvider()).getZoomLevels();
496
                } catch (ClassCastException e) {
497
                        return -1;
498
                }
499
        }
500

    
501
        /*
502
         * (non-Javadoc)
503
         * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getNearestLevel(double)
504
         */
505
        public int getNearestLevel(double pixelSize) {
506
                try {
507
                        return ((TiledRasterProvider)getProvider()).getNearestLevel(pixelSize);
508
                } catch (ClassCastException e) {
509
                        return -1;
510
                }
511
        }
512
        
513
        /*
514
         * (non-Javadoc)
515
         * @see org.gvsig.raster.impl.store.AbstractRasterDataStore#loadFromState(org.gvsig.tools.persistence.PersistentState)
516
         */
517
        public void loadFromState(PersistentState state)
518
                        throws PersistenceException {
519
                super.loadFromState(state);
520
        }
521

    
522
        /*
523
         * (non-Javadoc)
524
         * @see org.gvsig.raster.impl.store.AbstractRasterDataStore#saveToState(org.gvsig.tools.persistence.PersistentState)
525
         */
526
        public void saveToState(PersistentState state) throws PersistenceException {
527
                super.saveToState(state);
528
        }        
529
        
530
        public static void registerPersistence() {
531
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
532
                DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
533
                if( definition == null ) {
534
                        if (manager.getDefinition(DefaultRasterStore.class) == null) {
535
                                DefaultRasterStore.registerPersistence();
536
                        }
537
                        
538
                        definition = manager.addDefinition(
539
                                        DefaultRemoteRasterStore.class,
540
                                        PERSISTENT_NAME,
541
                                        PERSISTENT_DESCRIPTION,
542
                                        null, 
543
                                        null
544
                        );
545
                        
546
                        definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, DefaultRasterStore.PERSISTENT_NAME);
547
                }
548
        }
549
}