Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wmts / trunk / org.gvsig.raster.wmts / org.gvsig.raster.wmts.io / resources / TemplateRasterProvider.java @ 483

History | View | Annotate | Download (15.1 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.fmap.dal.coverage.dataset.io.netcdf;
23

    
24
import java.awt.geom.AffineTransform;
25

    
26
import org.gvsig.fmap.dal.DALFileLocator;
27
import org.gvsig.fmap.dal.DALLocator;
28
import org.gvsig.fmap.dal.DataStore;
29
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
30
import org.gvsig.fmap.dal.coverage.dataset.io.tile.downloader.FileTileServer;
31
import org.gvsig.fmap.dal.coverage.datastruct.BandList;
32
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
33
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
34
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
35
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
36
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
37
import org.gvsig.fmap.dal.coverage.exception.ParsingException;
38
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
39
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
40
import org.gvsig.fmap.dal.coverage.store.RasterFileStoreParameters;
41
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
42
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
43
import org.gvsig.metadata.MetadataLocator;
44
import org.gvsig.raster.cache.tile.provider.TileListener;
45
import org.gvsig.raster.cache.tile.provider.TileServer;
46
import org.gvsig.raster.impl.datastruct.ExtentImpl;
47
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
48
import org.gvsig.raster.impl.provider.RasterProvider;
49
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
50
import org.gvsig.raster.impl.store.AbstractRasterDataStore;
51
import org.gvsig.raster.impl.store.DefaultStoreFactory;
52
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
53
import org.gvsig.raster.impl.store.properties.DataStoreMetadata;
54
import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
55
import org.gvsig.tools.ToolsLocator;
56
import org.gvsig.tools.extensionpoint.ExtensionPoint;
57
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
58
/**
59
 * Data provider for ...
60
 *
61
 * @author Nacho Brodin (nachobrodin@gmail.com)
62
 */
63
public class NetCDFProvider extends DefaultRasterProvider {
64
        public static String        NAME                     = "Template Store";
65
        public static String        DESCRIPTION              = "Template Raster file";
66
        public final String         METADATA_DEFINITION_NAME = "TemplateStore";
67
        
68
        private static String[]     formatList               = new String[]{"*"};
69

    
70
        private Extent              viewRequest              = null;
71
        private TileServer          tileServer               = null;
72
        private boolean             open                     = false;
73

    
74
        public static void register() {
75
                DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
76
                if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
77
                        dataman.registerStoreProvider(NAME,
78
                                        NetCDFProvider.class, NetCDFDataParameters.class);
79
                }
80
                
81
                if(DALFileLocator.getFilesystemServerExplorerManager() != null)
82
                        DALFileLocator.getFilesystemServerExplorerManager().registerProvider(
83
                                        NAME, DESCRIPTION,
84
                                        NetCDFFilesystemServerExplorer.class);
85
                
86
                dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
87
        }
88

    
89
        /**
90
         * Returns true if the extension is supported and false if doesn't
91
         * @param ext
92
         * @return
93
         */
94
        public static boolean isExtensionSupported(String ext) {
95
                for (int i = 0; i < formatList.length; i++) {
96
                        if(formatList[i].compareTo(ext) == 0)
97
                                return true;
98
                }
99
                return false;
100
        }
101
        
102
        /**
103
         * Constructor. Abre el dataset.
104
         * @param proj Proyecci?n
105
         * @param fName Nombre del fichero
106
         * @throws NotSupportedExtensionException
107
         */
108
        public NetCDFProvider(String params) throws NotSupportedExtensionException {
109
                super(params);
110
                if(params instanceof String) {
111
                        NetCDFDataParameters p = new NetCDFDataParameters();
112
                        p.setURI((String)params);
113
                        super.init(p, null, ToolsLocator.getDynObjectManager()
114
                                        .createDynObject(
115
                                                        MetadataLocator.getMetadataManager().getDefinition(
116
                                                                        DataStore.METADATA_DEFINITION_NAME)));
117
                        init(p, null);
118
                }
119
        }
120
        
121
        public NetCDFProvider (NetCDFDataParameters params,
122
                        AbstractRasterDataStore storeServices) throws NotSupportedExtensionException {
123
                super(params, storeServices, ToolsLocator.getDynObjectManager()
124
                                .createDynObject(
125
                                                MetadataLocator.getMetadataManager().getDefinition(
126
                                                                DataStore.METADATA_DEFINITION_NAME)));
127
                init(params, storeServices);
128
        }
129

    
130
        /**
131
         * Crea las referencias al fichero y carga
132
         * las estructuras con la informaci?n y los metadatos.
133
         * @param proj Proyecci?n
134
         * @param param Parametros de carga
135
         * @throws NotSupportedExtensionException
136
         */
137
        public void init (AbstractRasterDataParameters params,
138
                        DataStoreProviderServices storeServices) throws NotSupportedExtensionException {
139
                //TODO:
140
                
141
                if(((RasterFileStoreParameters)params).getFile().exists()) {
142
                        setParam(params);
143
                        colorTable = null;
144
                        noData = 0;
145
                        wktProjection = null;
146
                        //CrsWkt crs = new CrsWkt(wktProjection);
147
                        //IProjection proj = CRSFactory.getCRS("EPSG:23030");
148
                        noDataEnabled = true;
149
                        ownTransformation = null;
150
                        externalTransformation = (AffineTransform)ownTransformation.clone();
151
                        load();
152
                } else
153
                        setParam(params);
154
                bandCount = 0;
155
                setDataType(null);
156
                super.init();
157

    
158
                try {
159
                        loadFromRmf(getRmfBlocksManager());
160
                } catch (ParsingException e) {
161
                        //No lee desde rmf
162
                }
163
        }
164
        
165
        /*
166
         * (non-Javadoc)
167
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#load()
168
         */
169
        public RasterProvider load() {
170
                return this;
171
        }
172
        
173
        /*
174
         * (non-Javadoc)
175
         * @see org.gvsig.raster.impl.provider.RasterProvider#isOpen()
176
         */
177
        public boolean isOpen() {
178
                return open;
179
        }
180

    
181
        /*
182
         * (non-Javadoc)
183
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#close()
184
         */
185
        public void close() {
186
                //TODO:
187
        }
188

    
189
        /*
190
         * (non-Javadoc)
191
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#translateFileName(java.lang.String)
192
         */
193
        public String translateFileName(String fileName) {
194
                return fileName;
195
        }
196

    
197
        /**
198
         * Asigna el extent de la vista actual. existe un fichero .rmf debemos hacer una transformaci?n
199
         * de la vista asignada ya que la petici?n viene en coordenadas del fichero .rmf y la vista (v)
200
         * ha de estar en coordenadas del fichero.
201
         */
202
        public void setView(Extent e) {
203
                viewRequest = new ExtentImpl(e);
204
        }
205

    
206
        /*
207
         * (non-Javadoc)
208
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getView()
209
         */
210
        public Extent getView() {
211
                return viewRequest;
212
        }
213

    
214
        /*
215
         * (non-Javadoc)
216
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWidth()
217
         */
218
        public double getWidth() {
219
                //TODO:
220
                return 0;
221
        }
222

    
223
        /*
224
         * (non-Javadoc)
225
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getHeight()
226
         */
227
        public double getHeight() {
228
                //TODO:
229
                return 0;
230
        }
231

    
232
        /**
233
         * Read a line from the file
234
         * @param line
235
         * @param band
236
         * @return
237
         * @throws InvalidSetViewException
238
         * @throws FileNotOpenException
239
         * @throws RasterDriverException
240
         * @Deprecated This operation is deprecated because is not useful and in the future
241
         * it will not be maintained. The abstract operation has dissapear
242
         */
243
        public Object readCompleteLine(int line, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
244
                if(line > this.getHeight() || band > this.getBandCount())
245
                        throw new InvalidSetViewException("Request out of grid");
246

    
247
                //TODO:
248
                return null;
249
        }
250

    
251
        /*
252
         *  (non-Javadoc)
253
         * @see org.gvsig.raster.dataset.RasterDataset#readBlock(int, int)
254
         */
255
        public Object readBlock(int pos, int blockHeight)
256
                throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
257
                if(pos < 0)
258
                        throw new InvalidSetViewException("Request out of grid");
259

    
260
                if((pos + blockHeight) > getHeight())
261
                        blockHeight = Math.abs(((int)getHeight()) - pos);
262
                
263
                //TODO:
264
                return null;
265
        }
266

    
267
        /*
268
         * (non-Javadoc)
269
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getData(int, int, int)
270
         */
271
        public Object getData(int x, int y, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
272
                if(x < 0 || y < 0 || x >= getWidth() || y >= getHeight())
273
                        throw new InvalidSetViewException("Request out of grid");
274
                
275
                //TODO
276
                return null;
277
        }
278

    
279
        /*
280
         * (non-Javadoc)
281
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.raster.cache.tile.provider.TileListener)
282
         */
283
        public void getWindow(Extent ex, int bufWidth, int bufHeight, 
284
                        BandList bandList, TileListener listener) throws ProcessInterruptedException, RasterDriverException {
285
                //TODO
286
        }
287

    
288
        /*
289
         * (non-Javadoc)
290
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(org.gvsig.fmap.dal.coverage.datastruct.Extent, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
291
         */
292
        public Buffer getWindow(Extent ex, BandList bandList, Buffer rasterBuf) 
293
                throws ProcessInterruptedException, RasterDriverException {
294
                //TODO
295

    
296
                return rasterBuf;
297
        }
298

    
299
        /*
300
         * (non-Javadoc)
301
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer, boolean)
302
         */
303
        public Buffer getWindow(double ulx, double uly, double w, double h, 
304
                        BandList bandList, Buffer rasterBuf, boolean adjustToExtent) throws ProcessInterruptedException, RasterDriverException {
305
                //TODO
306

    
307
                return rasterBuf;
308
        }
309

    
310
        /*
311
         * (non-Javadoc)
312
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer, boolean)
313
         */
314
        public Buffer getWindow(Extent extent, 
315
                        int bufWidth, int bufHeight, BandList bandList, Buffer rasterBuf, boolean adjustToExtent) throws ProcessInterruptedException, RasterDriverException {
316
                //TODO
317
                
318
                return rasterBuf;
319
        }
320

    
321
        /*
322
         * (non-Javadoc)
323
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(int, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
324
         */
325
        public Buffer getWindow(int x, int y, int w, int h, 
326
                        BandList bandList, Buffer rasterBuf) throws ProcessInterruptedException, RasterDriverException {
327
                //TODO
328
                
329
                return rasterBuf;
330
        }
331

    
332
        /*
333
         * (non-Javadoc)
334
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(int, int, int, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
335
         */
336
        public Buffer getWindow(int x, int y, int w, int h, 
337
                        int bufWidth, int bufHeight, BandList bandList, Buffer rasterBuf) throws ProcessInterruptedException, RasterDriverException {
338
                //TODO
339
                
340
                return rasterBuf;
341
        }
342

    
343
        /*
344
         * (non-Javadoc)
345
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getBlockSize()
346
         */
347
        public int getBlockSize(){
348
                //TODO
349
                
350
                return 0;
351
        }
352

    
353
        /*
354
         * (non-Javadoc)
355
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getMetadata()
356
         */
357
        public DataStoreMetadata getMetadata() {
358
                //TODO
359
                
360
                return null;
361
        }
362

    
363
        /*
364
         * (non-Javadoc)
365
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getColorInterpretation()
366
         */
367
        public DataStoreColorInterpretation getColorInterpretation(){
368
                //TODO
369
                
370
                return null;
371
        }
372

    
373
        /*
374
         * (non-Javadoc)
375
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#setColorInterpretation(org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation)
376
         */
377
        public void setColorInterpretation(DataStoreColorInterpretation colorInterpretation){
378
                //TODO
379
        }
380

    
381
        /*
382
         * (non-Javadoc)
383
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getTransparency()
384
         */
385
        public DataStoreTransparency getTransparency() {
386
                //TODO
387
                
388
                return null;
389
        }
390

    
391
        /*
392
         * (non-Javadoc)
393
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isGeoreferenced()
394
         */
395
        public boolean isGeoreferenced() {
396
                //TODO
397
                
398
                return false;
399
        }
400

    
401
        /**
402
         * Informa de si el driver ha supersampleado en el ?ltimo dibujado. Es el driver el que colocar?
403
         * el valor de esta variable cada vez que dibuja.
404
         * @return true si se ha supersampleado y false si no se ha hecho.
405
         */
406
        public boolean isSupersampling() {
407
                //TODO
408
                
409
                return false;
410
        }
411

    
412
        /*
413
         * (non-Javadoc)
414
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#setAffineTransform(java.awt.geom.AffineTransform)
415
         */
416
        public void setAffineTransform(AffineTransform t){
417
                super.setAffineTransform(t);
418
        }
419

    
420
        /*
421
         * (non-Javadoc)
422
         * @see org.gvsig.raster.impl.provider.RasterProvider#getOverviewCount(int)
423
         */
424
        public int getOverviewCount(int band) throws BandAccessException, RasterDriverException {
425
                if(band >= getBandCount())
426
                        throw new BandAccessException("Wrong band");
427
                //TODO
428
                
429
                return 0;
430
        }
431

    
432
        /*
433
         * (non-Javadoc)
434
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewWidth(int, int)
435
         */
436
        public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException {
437
                if (band >= getBandCount())
438
                        throw new BandAccessException("Wrong band");
439
                //TODO
440
                
441
                return 0;
442
        }
443

    
444
        /*
445
         * (non-Javadoc)
446
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewHeight(int, int)
447
         */
448
        public int getOverviewHeight(int band, int overview) throws BandAccessException, RasterDriverException {
449
                if (band >= getBandCount())
450
                        throw new BandAccessException("Wrong band");
451
                //TODO
452
                
453
                return 0;
454
        }
455

    
456
        /*
457
         * (non-Javadoc)
458
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#overviewsSupport()
459
         */
460
        public boolean overviewsSupport() {
461
                return true;
462
        }
463

    
464
        /*
465
         * (non-Javadoc)
466
         * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isReproyectable()
467
         */
468
        public boolean isReproyectable() {
469
                return true;
470
        }
471

    
472
        /*
473
         * (non-Javadoc)
474
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getName()
475
         */
476
        public String getName() {
477
                return NAME;
478
        }
479
        
480
        /*
481
         * (non-Javadoc)
482
         * @see org.gvsig.raster.impl.provider.RasterProvider#setStatus(org.gvsig.raster.impl.provider.RasterProvider)
483
         */
484
        public void setStatus(RasterProvider provider) {
485
                if(provider instanceof NetCDFProvider) {
486
                        //Not implemented yet
487
                }
488
        }
489
        
490
        /*
491
         * (non-Javadoc)
492
         * @see org.gvsig.raster.impl.provider.RasterProvider#getTileServer()
493
         */
494
        public TileServer getTileServer() {
495
                if(tileServer == null)
496
                        tileServer = new FileTileServer(this);
497
                return tileServer;
498
        }
499
}