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

History | View | Annotate | Download (13.3 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.Rectangle2D;
25
import java.io.File;
26
import java.util.Hashtable;
27

    
28
import org.gvsig.fmap.dal.coverage.exception.FileNotFoundInListException;
29
import org.gvsig.fmap.dal.coverage.exception.InvalidSourceException;
30
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
31
import org.gvsig.fmap.dal.coverage.exception.OperationNotSupportedException;
32
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
33
import org.gvsig.fmap.dal.coverage.exception.WMSException;
34
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
35
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
36
import org.gvsig.fmap.dal.coverage.store.props.Transparency;
37
import org.gvsig.fmap.dal.coverage.store.remote.RemoteLayerNode;
38
import org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore;
39
import org.gvsig.raster.impl.DefaultRasterManager;
40
import org.gvsig.raster.impl.datastruct.BandListImpl;
41
import org.gvsig.raster.impl.provider.RasterProvider;
42
import org.gvsig.raster.impl.provider.RemoteRasterProvider;
43
import org.gvsig.raster.impl.store.properties.MultiDataStoreHistogram;
44
import org.gvsig.raster.impl.store.properties.MultiDataStoreMetadata;
45
import org.gvsig.raster.impl.store.properties.MultiDataStoreStatistics;
46
import org.gvsig.remoteclient.wms.WMSStatus;
47
import org.gvsig.tools.task.Cancellable;
48

    
49
/**
50
 * This store represents a raster loaded from a remote service. This implements the interface
51
 * RemoteRasterServiceStore to provide enough methods for this kind of services.
52
 *
53
 * @author Nacho Brodin (nachobrodin@gmail.com)
54
 */
55
public class DefaultRemoteRasterStore extends DefaultMultiRasterStore implements RemoteRasterServiceStore {
56
        private RemoteRasterProvider provider = null;
57
        
58
        public DefaultRemoteRasterStore() {
59
                super();
60
        }
61

    
62
        /**
63
         * Crea un objeto MultiRasterDataset nuevo con los mismos ficheros
64
         * que el actual.
65
         * @return MultiRasterDataset
66
         */
67
        @Override
68
        public RasterDataStore newDataStore() {
69
                try {
70
                        String[] fileList = getNameDatasetStringList();
71
                        DefaultRemoteRasterStore multiRasterDataset = (DefaultRemoteRasterStore)DefaultRasterManager.getInstance().open(fileList[0]);
72
                        return multiRasterDataset;
73
                } catch (NotSupportedExtensionException e) {
74
                        return null;
75
                } catch (RasterDriverException e) {
76
                        return null;
77
                }
78
        }
79
        
80
        /**
81
         * Adds a provider
82
         * @param prov
83
         */
84
        public void addProvider(RemoteRasterProvider prov) {
85
                this.provider = prov;
86
        }
87

    
88
        /*
89
         * (non-Javadoc)
90
         * @see org.gvsig.fmap.dal.coverage.dataset.MultiRasterDataSet#addDataStore(org.gvsig.fmap.dal.coverage.buffer.RasterDataStore)
91
         */
92
        @Override
93
        public void addDataStore(RasterDataStore f)throws FileNotFoundInListException, InvalidSourceException, OperationNotSupportedException {
94
                throw new OperationNotSupportedException("Not supported for WMS");
95
        }
96

    
97
        /*
98
         * (non-Javadoc)
99
         * @see org.gvsig.fmap.dal.coverage.dataset.MultiRasterDataSet#addDataStore(java.lang.String[])
100
         */
101
        @Override
102
        public void addDataStore(RasterProvider provider) throws OperationNotSupportedException {
103
                throw new OperationNotSupportedException("Not supported for WMS");
104
        }
105
        
106
        /*
107
         * (non-Javadoc)
108
         * @see org.gvsig.fmap.dal.coverage.store.MultiRasterStore#addDataStore(java.lang.String[])
109
         */
110
        @Override
111
        public void addDataStore(String[] fileName) throws FileNotFoundInListException, NotSupportedExtensionException, RasterDriverException, OperationNotSupportedException {
112
                throw new OperationNotSupportedException("Not supported for WMS");
113
        }
114
        
115
        /*
116
         * (non-Javadoc)
117
         * @see org.gvsig.fmap.dal.coverage.store.MultiRasterStore#addDataStore(java.lang.String)
118
         */
119
        public void addDataStore(String fileName)throws FileNotFoundInListException, NotSupportedExtensionException, RasterDriverException, OperationNotSupportedException {
120
                throw new OperationNotSupportedException("Not supported for WMS");
121
        }
122
        
123

    
124
        /*
125
         * (non-Javadoc)
126
         * @see org.gvsig.fmap.dal.coverage.dataset.MultiRasterDataSet#removeDataStore(java.lang.String)
127
         */
128
        public void removeDataStore(String fileName) throws OperationNotSupportedException {
129
                throw new OperationNotSupportedException("Not supported for WMS");
130
        }
131

    
132
        /*
133
         * (non-Javadoc)
134
         * @see org.gvsig.fmap.dal.coverage.dataset.MultiRasterDataSet#removeDataStore(org.gvsig.fmap.dal.coverage.buffer.RasterDataStore)
135
         */
136
        public void removeDataStore(RasterDataStore file) throws OperationNotSupportedException {
137
                throw new OperationNotSupportedException("Not supported for WMS");
138
        }
139

    
140
        //******************************
141
        //Setters and Getters
142
        //******************************
143

    
144
        /**
145
         * Calcula el tama?o de los ficheros en disco
146
         * @return tama?o en bytes de todos los ficheros de la lista
147
         */
148
        @Override
149
        public long getFileSize() {
150
                return 0;
151
        }
152

    
153
        /*
154
         * (non-Javadoc)
155
         * @see org.gvsig.raster.impl.store.DefaultMultiRasterStore#getHeight()
156
         */
157
        @Override
158
        public double getHeight() {
159
                return providers.get(0).getHeight();
160
        }
161

    
162
        /*
163
         * (non-Javadoc)
164
         * @see org.gvsig.raster.dataset.IRasterDataSource#getWidth()
165
         */
166
        @Override
167
        public double getWidth() {
168
                return providers.get(0).getWidth();
169
        }
170

    
171
        /*
172
         * (non-Javadoc)
173
         * @see org.gvsig.fmap.dal.coverage.dataset.RasterDataStore#getDataType()
174
         */
175
        @Override
176
        public int[] getDataType() {
177
                return providers.get(0).getDataType();
178
        }
179

    
180
        /**
181
         * Obtiene la coordenada X m?nima de toda la lista
182
         * @return Coordenada X m?nima
183
         */
184
        @Override
185
        public double getMinX() {
186
                return providers.get(0).getExtent().getMin().getX();
187
        }
188

    
189
        /**
190
         * Obtiene la coordenada Y m?nima de toda la lista
191
         * @return Coordenada Y m?nima
192
         */
193
        @Override
194
        public double getMinY() {
195
                return providers.get(0).getExtent().getMin().getY();
196
        }
197

    
198
        /**
199
         * Obtiene la coordenada Y m?xima de toda la lista
200
         * @return Coordenada Y m?xima
201
         */
202
        @Override
203
        public double getMaxX() {
204
                return providers.get(0).getExtent().getMax().getX();
205
        }
206

    
207
        /**
208
         * Obtiene la coordenada Y m?xima de toda la lista
209
         * @return Coordenada Y m?xima
210
         */
211
        @Override
212
        public double getMaxY() {
213
                return providers.get(0).getExtent().getMax().getY();
214
        }
215

    
216
        /*
217
         * (non-Javadoc)
218
         * @see org.gvsig.fmap.dal.coverage.store.RasterDataStore#getTransparencyFilesStatus()
219
         */
220
        @Override
221
        public Transparency getTransparencyFilesStatus() {
222
                return providers.get(0).getTransparency();
223
        }
224

    
225
        /**
226
         * Obtiene la paleta correspondiente a uno de los ficheros que forman el GeoMultiRasterFile
227
         * @param i Posici?n del raster
228
         * @return Paleta asociada a este o null si no tiene
229
         */
230
        @Override
231
        public ColorTable getColorTable(int i) {
232
                return providers.get(0).getColorTable();
233
        }
234

    
235
        /**
236
         * Obtiene la lista de paletas correspondiente a todos los ficheros que forman el GeoMultiRasterFile
237
         * @return Paleta asociada a este o null si no tiene. Una posici?n null en el array tambi?n indica que
238
         * para ese fichero no hay paletas asociadas.
239
         */
240
        @Override
241
        public ColorTable[] getColorTables(){
242
                return new ColorTable[]{providers.get(0).getColorTable()};
243
        }
244

    
245
        /**
246
         * Obtiene la paleta correspondiente al nombre del fichero pasado por par?metro.
247
         * @param fileName Nombre del fichero
248
         * @return Paleta o null si no la tiene
249
         */
250
        @Override
251
        public ColorTable getColorTable(String fileName){
252
                return providers.get(0).getColorTable();
253
        }
254

    
255
        /*
256
         * (non-Javadoc)
257
         * @see org.gvsig.raster.dataset.IRasterDataSource#isGeoreferenced()
258
         */
259
        @Override
260
        public boolean isGeoreferenced() {
261
                return providers.get(0).isGeoreferenced();
262
        }
263

    
264
        /*
265
         * (non-Javadoc)
266
         * @see org.gvsig.raster.util.IHistogramable#getPercent()
267
         */
268
        @Override
269
        public int getPercent() {
270
                return 0;
271
        }
272

    
273
        /*
274
         * (non-Javadoc)
275
         * @see org.gvsig.raster.util.IHistogramable#resetPercent()
276
         */
277
        @Override
278
        public void resetPercent() {
279

    
280
        }
281
        
282
        /*
283
         * (non-Javadoc)
284
         * @see org.gvsig.raster.impl.dataset.QueryableRaster#getDataset()
285
         */
286
        @Override
287
        public RasterDataStore getDataStore() {
288
                return this;
289
        }
290

    
291
        /**
292
         * Obtiene el n?mero de dataset para un n?mero de banda y la posici?n de la banda dentro de
293
         * ese dataset.
294
         * @param bandNumber N?mero de banda
295
         * @return Dataset que corresponde a la banda pedida y n?mero de banda dentro del dataset (dataset, banda)
296
         */
297
        @Override
298
        public int[] getProviderFromBandNumber(int bandNumber) {
299
                if(bandNumber < 0 && bandNumber >= getBandCount())
300
                        return new int[]{0, bandNumber};
301
                return null;
302
        }
303

    
304
        /*
305
         * (non-Javadoc)
306
         * @see org.gvsig.fmap.dal.coverage.store.RasterDataStore#cloneDataStore()
307
         */
308
        @Override
309
        public RasterDataStore cloneDataStore() {
310
                DefaultRemoteRasterStore ds = new DefaultRemoteRasterStore();
311
                
312
                int[] bands = new int[]{providers.get(0).getBandCount()};
313
                ds.metadata = new MultiDataStoreMetadata(bands);
314
                
315
                RasterProvider prov = providers.get(0).cloneProvider();
316
                ds.providers.add(prov);
317
                ds.metadata.add(providers.get(0).getMetadata());
318
                
319
                ds.bandList = (BandListImpl)bandList.clone();
320
                ds.stats = new MultiDataStoreStatistics(ds.providers);
321
                ds.histogram = new MultiDataStoreHistogram(ds);
322
                return ds;
323
        }
324
        
325

    
326
        //******************************
327
        //Remote Requests
328
        //******************************
329
        
330
        private void loadProvider() {
331
                if(provider == null) {
332
                        if(providers.get(0) instanceof RemoteRasterProvider)
333
                                provider = (RemoteRasterProvider)providers.get(0);
334
                }
335
        }
336

    
337
        /*
338
         * (non-Javadoc)
339
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getAbstract()
340
         */
341
        public String getAbstract() {
342
                loadProvider();
343
                if(provider != null) {
344
                        return provider.getAbstract();
345
                }
346
                return null;
347
        }
348

    
349
        /*
350
         * (non-Javadoc)
351
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getFormats()
352
         */
353
        public String[] getFormats() {
354
                loadProvider();
355
                if(provider != null) {
356
                        return provider.getFormats();
357
                }
358
                return null;
359
        }
360

    
361
        /*
362
         * (non-Javadoc)
363
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getHost()
364
         */
365
        public String getHost() {
366
                loadProvider();
367
                if(provider != null) {
368
                        return provider.getHost();
369
                }
370
                return null;
371
        }
372

    
373
        /*
374
         * (non-Javadoc)
375
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getLayerTree()
376
         */
377
        public RemoteLayerNode getLayerTree() {
378
                loadProvider();
379
                if(provider != null) {
380
                        return provider.getLayerTree();
381
                }
382
                return null;
383
        }
384

    
385
        /*
386
         * (non-Javadoc)
387
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getServerType()
388
         */
389
        public String getServerType() {
390
                loadProvider();
391
                if(provider != null) {
392
                        return provider.getServerType();
393
                }
394
                return null;
395
        }
396

    
397
        /*
398
         * (non-Javadoc)
399
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getTitle()
400
         */
401
        public String getTitle() {
402
                return null;
403
        }
404

    
405
        /*
406
         * (non-Javadoc)
407
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getVersion()
408
         */
409
        public String getVersion() {
410
                loadProvider();
411
                if(provider != null) {
412
                        return provider.getVersion();
413
                }
414
                return null;
415
        }
416

    
417
        /*
418
         * (non-Javadoc)
419
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#connect(org.gvsig.tools.task.Cancellable)
420
         */
421
        public void connect(Cancellable cancellable) throws WMSException {
422
                loadProvider();
423
                if(provider != null) {
424
                        provider.connect(cancellable);
425
                }
426
        }
427
        
428
        /**
429
         * Gets the online resources
430
         * @return
431
         */
432
        @SuppressWarnings("unchecked")
433
        public Hashtable getOnlineResources() {
434
                loadProvider();
435
                if(provider != null) {
436
                        return provider.getOnlineResources();
437
                }
438
                return null;
439
        }
440
        
441
        /**
442
          * Gets the legend graphic of one layer
443
          */
444
        public File getLegendGraphic(WMSStatus status, String layerName, Cancellable cancel) throws WMSException {
445
                loadProvider();
446
                if(provider != null) {
447
                        return provider.getLegendGraphic(status, layerName, cancel);
448
                }
449
                return null;
450
        }
451
        
452
        /*
453
         * (non-Javadoc)
454
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getBoundingBox(java.lang.String[], java.lang.String)
455
         */
456
        public Rectangle2D getBoundingBox(String[] layerNames, String srs) {
457
                loadProvider();
458
                if(provider != null) {
459
                        return provider.getLayersExtent(layerNames, srs);
460
                }
461
                return null;
462
    }
463

    
464
        /*
465
         * (non-Javadoc)
466
         * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#isQueryable()
467
         */
468
    public boolean isQueryable() {
469
            loadProvider();
470
                if(provider != null) {
471
                        return provider.isQueryable();
472
                }
473
                return false;
474
    }
475
    
476
    /*
477
     * (non-Javadoc)
478
     * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteRasterServiceStore#getMap(org.gvsig.remoteclient.wms.WMSStatus, org.gvsig.tools.task.Cancellable)
479
     */
480
    public File getMap(WMSStatus status, Cancellable cancel) throws WMSException {
481
            loadProvider();
482
            if(provider != null) {
483
                    return provider.getMap(status, cancel);
484
            }
485
            return null;
486
    }
487
        
488
}