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 / DefaultRasterManager.java @ 937

History | View | Annotate | Download (27 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;
23

    
24
import java.awt.geom.AffineTransform;
25
import java.awt.geom.Dimension2D;
26
import java.lang.reflect.Constructor;
27
import java.lang.reflect.InvocationTargetException;
28
import java.util.ArrayList;
29
import java.util.HashMap;
30

    
31
import org.cresques.cts.IProjection;
32
import org.gvsig.fmap.dal.DALLocator;
33
import org.gvsig.fmap.dal.DataStoreParameters;
34
import org.gvsig.fmap.dal.coverage.RasterLibrary;
35
import org.gvsig.fmap.dal.coverage.RasterManager;
36
import org.gvsig.fmap.dal.coverage.RasterService;
37
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
38
import org.gvsig.fmap.dal.coverage.datastruct.DataStructFactory;
39
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
40
import org.gvsig.fmap.dal.coverage.datastruct.GridExtent;
41
import org.gvsig.fmap.dal.coverage.datastruct.Params;
42
import org.gvsig.fmap.dal.coverage.datastruct.RasterLegend;
43
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
44
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
45
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
46
import org.gvsig.fmap.dal.coverage.exception.RasterBufferInvalidException;
47
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
48
import org.gvsig.fmap.dal.coverage.exception.RasterLegendIONotFound;
49
import org.gvsig.fmap.dal.coverage.grid.AbstractROI;
50
import org.gvsig.fmap.dal.coverage.grid.Grid;
51
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
52
import org.gvsig.fmap.dal.coverage.process.TaskEventManager;
53
import org.gvsig.fmap.dal.coverage.process.overview.OverviewBuilder;
54
import org.gvsig.fmap.dal.coverage.process.vector.Vectorization;
55
import org.gvsig.fmap.dal.coverage.process.warp.Warp;
56
import org.gvsig.fmap.dal.coverage.store.DataServerWriter;
57
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
58
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
59
import org.gvsig.fmap.dal.coverage.store.RasterWriter;
60
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
61
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
62
import org.gvsig.fmap.dal.coverage.util.CRSUtils;
63
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
64
import org.gvsig.fmap.dal.coverage.util.FileUtils;
65
import org.gvsig.fmap.dal.coverage.util.Historical;
66
import org.gvsig.fmap.dal.coverage.util.MathUtils;
67
import org.gvsig.fmap.dal.coverage.util.ProviderServices;
68
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
69
import org.gvsig.fmap.dal.exception.InitializeException;
70
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
71
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
72
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
73
import org.gvsig.raster.impl.buffer.DefaultDataServerWriter;
74
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
75
import org.gvsig.raster.impl.buffer.RasterBuffer;
76
import org.gvsig.raster.impl.buffer.RasterMemoryBuffer;
77
import org.gvsig.raster.impl.buffer.cache.RasterCache;
78
import org.gvsig.raster.impl.buffer.cache.RasterReadOnlyBuffer;
79
import org.gvsig.raster.impl.datastruct.DefaultDataStructFactory;
80
import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
81
import org.gvsig.raster.impl.datastruct.legend.GimpGradients;
82
import org.gvsig.raster.impl.datastruct.legend.GimpPalettes;
83
import org.gvsig.raster.impl.datastruct.legend.LegendgvSIG;
84
import org.gvsig.raster.impl.datastruct.legend.RasterLegendIO;
85
import org.gvsig.raster.impl.grid.GridImpl;
86
import org.gvsig.raster.impl.grid.filter.DefaultRasterFilterList;
87
import org.gvsig.raster.impl.grid.roi.ROIStatistic;
88
import org.gvsig.raster.impl.process.DefaultTaskEventManager;
89
import org.gvsig.raster.impl.process.overview.GdalOverviewBuilder;
90
import org.gvsig.raster.impl.process.vector.PotraceVectorization;
91
import org.gvsig.raster.impl.process.warp.GdalWarpImpl;
92
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
93
import org.gvsig.raster.impl.provider.RasterProvider;
94
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
95
import org.gvsig.raster.impl.store.DefaultRasterStore;
96
import org.gvsig.raster.impl.store.ParamsImpl;
97
import org.gvsig.raster.impl.store.QueryableRaster;
98
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
99
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
100
import org.gvsig.raster.util.DefaultCRSUtils;
101
import org.gvsig.raster.util.DefaultColorConversion;
102
import org.gvsig.raster.util.DefaultFileUtils;
103
import org.gvsig.raster.util.DefaultHistorical;
104
import org.gvsig.raster.util.DefaultMathUtils;
105
import org.gvsig.raster.util.DefaultProviderServices;
106
import org.gvsig.raster.util.DefaultRasterUtils;
107
import org.gvsig.tools.ToolsLocator;
108
import org.gvsig.tools.extensionpoint.ExtensionPoint;
109
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
110
import org.gvsig.tools.service.ServiceException;
111
import org.slf4j.Logger;
112
import org.slf4j.LoggerFactory;
113

    
114
/**
115
 * Default {@link RasterManager} implementation.
116
 * 
117
 * @author gvSIG Team
118
 * @version $Id$
119
 */
120
public class DefaultRasterManager implements RasterManager {
121
        private static DefaultRasterManager internalInstance  = new DefaultRasterManager();
122
        private static final Logger         logger            = LoggerFactory.getLogger(DefaultRasterManager.class);
123
        private CRSUtils                    crs               = null;
124
        private FileUtils                   file              = null;
125
        private MathUtils                   math              = null;
126
        private RasterUtils                 util              = null;
127
        private ProviderServices            pInfo             = null;
128
        private DefaultColorConversion      colorConversion   = null;
129
        private DataStructFactory           dataStructFactory = null;
130
        private static Class<?>             tileclass         = null;
131
        private static ArrayList<Class<?>>  tiledProviders    = new ArrayList<Class<?>>(); 
132
        private static HashMap<String, ArrayList<Class<?>>>
133
                                        formatsRegistry   = new HashMap<String, ArrayList<Class<?>>>();
134
        
135
        /**
136
         * Gets an instance of this object for internal use.
137
         * @return DefaultRasterManager
138
         */
139
        public static DefaultRasterManager getInstance() {
140
                return internalInstance;
141
        }
142
        
143
        /*
144
         * (non-Javadoc)
145
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getDataStructFactory()
146
         */
147
        public DataStructFactory getDataStructFactory() {
148
                if(dataStructFactory == null)
149
                        dataStructFactory = new DefaultDataStructFactory();
150
                return dataStructFactory;
151
        }
152
        
153
        /*
154
         * (non-Javadoc)
155
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getProviderServices()
156
         */
157
        public ProviderServices getProviderServices() {
158
                if(pInfo == null)
159
                        pInfo = new DefaultProviderServices();
160
                return pInfo;
161
        }
162
        
163
        /*
164
         * (non-Javadoc)
165
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getCRSUtils()
166
         */
167
        public CRSUtils getCRSUtils() {
168
                if(crs == null)
169
                        crs = new DefaultCRSUtils();
170
                return crs;
171
        }
172
        
173
        /*
174
         * (non-Javadoc)
175
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getFileUtils()
176
         */
177
        public FileUtils getFileUtils() {
178
                if(file == null)
179
                        file = new DefaultFileUtils();
180
                return file;
181
        }
182
        
183
        /*
184
         * (non-Javadoc)
185
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getRasterUtils()
186
         */
187
        public RasterUtils getRasterUtils() {
188
                if(util == null)
189
                        util = new DefaultRasterUtils();
190
                return util;
191
        }
192
        
193
        /*
194
         * (non-Javadoc)
195
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getMathUtils()
196
         */
197
        public MathUtils getMathUtils() {
198
                if(math == null)
199
                        math = new DefaultMathUtils();
200
                return math;
201
        }
202
        
203
        /*
204
         * (non-Javadoc)
205
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getRasterService()
206
         */
207
    public RasterService getRasterService()
208
        throws ServiceException {
209
        RasterService fc = new DefaultRasterService(this);
210
        return fc;
211
    }
212
    
213
        /*
214
         * (non-Javadoc)
215
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getLegendFormats()
216
         */
217
        public String[] getLegendFormats() {
218
                return RasterLegendIO.formats;
219
        }
220
        
221
        /*
222
         * (non-Javadoc)
223
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getRasterLegendIO(java.lang.String)
224
         */
225
        public RasterLegend getRasterLegendIO(String formatName) throws RasterLegendIONotFound {
226
                if (formatName.equals(RasterLegendIO.formats[0]))
227
                        return new LegendgvSIG();
228

    
229
                if (formatName.equals(RasterLegendIO.formats[1]))
230
                        return new GimpGradients();
231

    
232
                if (formatName.equals(RasterLegendIO.formats[2]))
233
                        return new GimpPalettes();
234

    
235
                // Incluir mas formatos de la misma manera
236
                throw new RasterLegendIONotFound();
237
        }
238
        
239
        public DataServerWriter createDataServerWriter() {
240
                return new DefaultDataServerWriter();
241
        }
242
        
243
        /*
244
         * (non-Javadoc)
245
         * @see org.gvsig.fmap.dal.coverage.RasterManager#open(org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider, int)
246
         */
247
        public RasterDataStore open(CoverageStoreProvider prov, DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
248
                if(prov instanceof RasterProvider) {
249
                        DefaultRasterStore store = new DefaultRasterStore();
250
                        store.setProvider((RasterProvider)prov);
251
                        try {
252
                                store.intializePhase1(null, params);
253
                        } catch (InitializeException e) {
254
                                throw new RasterDriverException(e.getMessage());
255
                        }
256
                        return store;
257
                }
258
                return null;
259
        }
260
        
261
        /*
262
         * (non-Javadoc)
263
         * @see org.gvsig.fmap.dal.coverage.RasterManager#open(org.cresques.cts.IProjection, java.lang.Object)
264
         */
265
        public RasterDataStore open(DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
266
                if(params == null || !(params instanceof AbstractRasterDataParameters))
267
                        return null;
268
                DefaultRasterStore dSet = new DefaultRasterStore();
269
                DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
270
                try {
271
                        DefaultRasterProvider provider = (DefaultRasterProvider)dataManager.createProvider(dSet, (AbstractRasterDataParameters)params);
272
                        dSet.setProvider(provider);
273
                } catch (InitializeException e) {
274
                        throw new RasterDriverException("Error initializing provider", e);
275
                } catch (ProviderNotRegisteredException e) {
276
                        throw new RasterDriverException("Provider not register error", e);
277
                }
278
                return dSet;
279
        }
280
        
281
        /*
282
         * (non-Javadoc)
283
         * @see org.gvsig.fmap.dal.coverage.RasterManager#open(org.cresques.cts.IProjection, java.lang.Object)
284
         */
285
        public RasterDataStore open(Object datasetOpenParam) throws NotSupportedExtensionException, RasterDriverException {
286
                DefaultRasterStore dSet = new DefaultRasterStore();
287
                
288
                if (datasetOpenParam instanceof String) {
289
                        DefaultRasterProvider provider = DefaultRasterProvider.singleDatasetInstance(dSet, (String)datasetOpenParam);
290
                        dSet.setProvider(provider);
291
                        return dSet;
292
                }
293
                
294
                /*if (datasetOpenParam instanceof String[]) {
295
                        String[] param = (String[]) datasetOpenParam;
296
                        try {
297
                                for (int dataset = 0; dataset < param.length; dataset++) {
298
                                        dSet.addDataStore(DefaultRasterProvider.singleDatasetInstance(dSet, param[dataset]) );
299
                                }
300
                        } catch (OperationNotSupportedException e) {
301
                                return open(param[0]);
302
                        }
303
                        return dSet;
304
                } 
305
                
306
                if (datasetOpenParam instanceof Buffer[]) {
307
                        Buffer[] param = (Buffer[]) datasetOpenParam;
308
                        for (int dataset = 0; dataset < param.length; dataset++) {
309
                                dSet.addDataStore(DefaultRasterProvider.singleDatasetInstance(param[dataset]));
310
                        }
311
                        return dSet;
312
                }
313

314
                if(datasetOpenParam instanceof String[][]) {
315
                        String[][] param = (String[][])datasetOpenParam;
316
                        DefaultMultiRasterStore[][] mosaic = new DefaultMultiRasterStore[param.length][param[0].length];
317
                        for (int i = 0; i < param.length; i++)
318
                                for (int j = 0; j < param[i].length; j++)
319
                                        mosaic[i][j] = (DefaultMultiRasterStore)open(param[i][j]);
320
                        DefaultMosaicRasterStore cd;
321
                        try {
322
                                cd = new DefaultMosaicRasterStore(mosaic);
323
                        } catch (MosaicNotValidException e) {
324
                                return null;
325
                        }
326
                        return cd;
327
                }*/
328
                
329
                return null;
330
        }
331
        
332
        /*
333
         * (non-Javadoc)
334
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getQuery()
335
         */
336
        public RasterQuery createQuery() {
337
                return new DefaultRasterQuery();
338
        }
339
        
340
        /*
341
         * (non-Javadoc)
342
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getBuffer(int, int, int, int, boolean)
343
         */
344
        public Buffer createBuffer(int dataType, int width, int height, int bandNr, boolean malloc) {
345
                //Opci?n de cachear siempre activada (Solo DEBUG)
346
                if(RasterBuffer.forceToLoadInCache)
347
                        return new RasterCache(dataType, width, height, bandNr);
348
                if(RasterBuffer.forceToLoadInReadOnlyCache){
349
                return new RasterReadOnlyBuffer(dataType, width, height, bandNr);
350
                }
351
                        
352
                if(RasterBuffer.cacheOn){
353
                        long size = (long)((long)getRasterUtils().getBytesFromRasterBufType(dataType) * (long)width * (long)height * (long)bandNr) / 1024L;
354
                        long ms1 = RasterLibrary.cacheSize * 1024L;
355
                        if(size <= ms1)
356
                                return new RasterMemoryBuffer(dataType, width, height, bandNr, malloc);
357
                        else
358
                                return new RasterCache(dataType, width, height, bandNr);
359
                }else
360
                        return new RasterMemoryBuffer(dataType, width, height, bandNr, malloc);
361
        }
362
        
363
        /*
364
         * (non-Javadoc)
365
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getReadOnlyBuffer(int, int, int, int)
366
         */
367
        public Buffer createReadOnlyBuffer(int dataType, int width, int height, int bandNr) {
368
                return new RasterReadOnlyBuffer(dataType, width, height, bandNr);
369
        }
370
        
371
        /*
372
         * (non-Javadoc)
373
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getMemoryBuffer(int, int, int, int, boolean)
374
         */
375
        public Buffer createMemoryBuffer(int dataType, int width, int height, int bandNr, boolean malloc) {
376
                return new RasterMemoryBuffer(dataType, width, height, bandNr, malloc);
377
        }
378

    
379
        /*
380
         * (non-Javadoc)
381
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getWriter(java.lang.String)
382
         */
383
        @SuppressWarnings("unchecked")
384
        public RasterWriter createWriter(String fName) throws NotSupportedExtensionException, RasterDriverException {
385
                String ext = getFileUtils().getExtensionFromFileName(fName);
386
                DefaultRasterWriter grw = null;
387
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
388
                ExtensionPoint point = extensionPoints.get("RasterWriter");
389
//                ExtensionPoint extensionPoint = ExtensionPoint.getExtensionPoint("RasterWriter");
390

    
391
                if (!point.has(ext))
392
                        return grw;
393

    
394
                Class clase = point.get(ext).getExtension();
395
                Class[] args = { String.class };
396
                try {
397
                        Constructor hazNuevo = clase.getConstructor(args);
398
                        Object[] args2 = { fName };
399
                        grw = (DefaultRasterWriter) hazNuevo.newInstance(args2);
400
                } catch (SecurityException e) {
401
                        throw new RasterDriverException("Error SecurityException in open", e);
402
                } catch (NoSuchMethodException e) {
403
                        throw new RasterDriverException("Error NoSuchMethodException in open", e);
404
                } catch (IllegalArgumentException e) {
405
                        throw new RasterDriverException("Error IllegalArgumentException in open", e);
406
                } catch (InstantiationException e) {
407
                        throw new RasterDriverException("Error InstantiationException in open", e);
408
                } catch (IllegalAccessException e) {
409
                        throw new RasterDriverException("Error IllegalAccessException in open", e);
410
                } catch (InvocationTargetException e) {
411
                        throw new NotSupportedExtensionException("Error in open", e);
412
                }
413
                return grw;
414
        }
415

    
416
        /*
417
         * (non-Javadoc)
418
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getWriter(org.gvsig.fmap.dal.coverage.dataset.DataServerWriter, java.lang.String, int, java.awt.geom.AffineTransform, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.Params, org.cresques.cts.IProjection)
419
         */
420
        public RasterWriter createWriter(DataServerWriter dataWriter,
421
                                                                                                 String outFileName,
422
                                                                                                 int nBands,
423
                                                                                                 AffineTransform at,
424
                                                                                                 int outSizeX,
425
                                                                                                 int outSizeY,
426
                                                                                                 int dataType,
427
                                                                                                 Params params,
428
                                                                                                 IProjection proj) throws NotSupportedExtensionException, RasterDriverException {
429
                return createWriter(dataWriter, outFileName, nBands, at, outSizeX, outSizeY, dataType, params, proj, true);
430
        }
431

    
432
        /*
433
         * (non-Javadoc)
434
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getWriter(org.gvsig.fmap.dal.coverage.dataset.DataServerWriter, java.lang.String, int, java.awt.geom.AffineTransform, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.Params, org.cresques.cts.IProjection, boolean)
435
         */
436
        @SuppressWarnings("unchecked")
437
        public RasterWriter createWriter(DataServerWriter dataWriter,
438
                                                                                                 String outFileName,
439
                                                                                                 int nBands,
440
                                                                                                 AffineTransform at,
441
                                                                                                 int outSizeX,
442
                                                                                                 int outSizeY,
443
                                                                                                 int dataType,
444
                                                                                                 Params params,
445
                                                                                                 IProjection proj,
446
                                                                                                 boolean geo) throws NotSupportedExtensionException, RasterDriverException {
447
                String ext = outFileName.toLowerCase().substring(outFileName.lastIndexOf('.') + 1);
448
                DefaultRasterWriter grw = null;
449
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
450
                ExtensionPoint point = extensionPoints.get("RasterWriter");
451

    
452
                if (!point.has(ext))
453
                        return grw;
454

    
455
                Class clase = point.get(ext).getExtension();
456
                Class[] args = { DataServerWriter.class, String.class, Integer.class, AffineTransform.class, Integer.class, Integer.class, Integer.class, Params.class, IProjection.class, Boolean.class };
457
                try {
458
                        Constructor hazNuevo = clase.getConstructor(args);
459
                        Object [] args2 = {dataWriter, outFileName, new Integer(nBands), at,
460
                                                                new Integer(outSizeX), new Integer(outSizeY), new Integer(dataType),
461
                                                                params, proj, new Boolean(geo)};
462
                        grw = (DefaultRasterWriter) hazNuevo.newInstance(args2);
463
                } catch (SecurityException e) {
464
                        throw new RasterDriverException("Error SecurityException in open", e);
465
                } catch (NoSuchMethodException e) {
466
                        throw new RasterDriverException("Error NoSuchMethodException in open", e);
467
                } catch (IllegalArgumentException e) {
468
                        throw new RasterDriverException("Error IllegalArgumentException in open", e);
469
                } catch (InstantiationException e) {
470
                        throw new RasterDriverException("Error InstantiationException in open", e);
471
                } catch (IllegalAccessException e) {
472
                        throw new RasterDriverException("Error IllegalAccessException in open", e);
473
                } catch (InvocationTargetException e) {
474
                        throw new NotSupportedExtensionException("Error in open. Problemas con las librer?as nativas.", e);
475
                }
476
                return grw;
477
        }
478
        
479
        /*
480
         * (non-Javadoc)
481
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getWriterParams(java.lang.String)
482
         */
483
        public Params createWriterParams(String fileName) {
484
                try {
485
                        return createWriter(fileName).getParams();
486
                } catch (NotSupportedExtensionException e) {
487
                        return null;
488
                } catch (RasterDriverException e) {
489
                        return null;
490
                }
491
        }
492
        
493
        /**
494
         * Gets an object which vectorize a raster
495
         * @param dataStore
496
         * @return
497
         * @throws RasterDriverException
498
         * @throws ProcessInterruptedException
499
         *         When the object Vectorization is built the raster data buffer is loaded. 
500
         *         This operation can be interrupted
501
         */
502
        public Vectorization getVectorizeObject(QueryableRaster queryable) throws RasterDriverException, ProcessInterruptedException {
503
                return new PotraceVectorization(queryable);
504
        }
505
        
506
        /*
507
         * (non-Javadoc)
508
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getOverviewBuilder()
509
         */
510
        public OverviewBuilder createOverviewBuilder() {
511
                return new GdalOverviewBuilder();
512
        }
513

    
514
        /*
515
         * (non-Javadoc)
516
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createColorInterpretation()
517
         */
518
        public ColorInterpretation createColorInterpretation(String[] colorInterp) {
519
                return new DataStoreColorInterpretation(colorInterp);
520
        }
521
        
522
        /*
523
         * (non-Javadoc)
524
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createGrid(org.gvsig.fmap.dal.coverage.buffer.RasterDataSource, int[], org.gvsig.fmap.dal.coverage.datastruct.GridExtent)
525
         */
526
        public Grid createGrid(RasterDataStore datasource, int[] bands, GridExtent windowExtent) throws RasterBufferInvalidException {
527
                return new GridImpl(datasource, bands, windowExtent);
528
        }
529
        
530
        /*
531
         * (non-Javadoc)
532
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createGrid(org.gvsig.fmap.dal.coverage.buffer.RasterDataSource, int[])
533
         */
534
        public Grid createGrid(RasterDataStore datasource, int[] bands) throws RasterBufferInvalidException {
535
                return new GridImpl(datasource, bands);
536
        }
537
        
538
        /*
539
         * (non-Javadoc)
540
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createGrid(org.gvsig.fmap.dal.coverage.buffer.RasterDataSource)
541
         */
542
        public Grid createGrid(RasterDataStore datasource) throws RasterBufferInvalidException {
543
                return new GridImpl(datasource);
544
        }
545
        
546
        /*
547
         * (non-Javadoc)
548
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createGrid(org.gvsig.fmap.dal.coverage.datastruct.GridExtent, org.gvsig.fmap.dal.coverage.datastruct.GridExtent, int, int[])
549
         */
550
        public Grid createGrid(GridExtent layerExtent,
551
                        GridExtent windowExtent,
552
                        int dataType,
553
                        int[] bands) throws RasterBufferInvalidException {
554
                return new GridImpl(layerExtent, windowExtent, dataType, bands);
555
        }
556
        
557
        /*
558
         * (non-Javadoc)
559
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createGrid(org.gvsig.fmap.dal.coverage.buffer.Buffer, org.gvsig.fmap.dal.coverage.buffer.RasterDataSource, boolean)
560
         */
561
        public Grid createGrid(Buffer buf, RasterDataStore datasource, boolean notInterp) {
562
                return new GridImpl(buf, datasource, notInterp);
563
        }
564
        
565
        /*
566
         * (non-Javadoc)
567
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createWarp()
568
         */
569
        public Warp createWarp() {
570
                return new GdalWarpImpl();
571
        }
572
        
573
    /*
574
     * (non-Javadoc)
575
     * @see org.gvsig.fmap.dal.coverage.RasterManager#createHistoricalService()
576
     */
577
    public Historical createHistoricalService() {
578
            return new DefaultHistorical();
579
    }
580
    
581
    /*
582
     * (non-Javadoc)
583
     * @see org.gvsig.fmap.dal.coverage.RasterManager#createViewPortData(org.cresques.cts.IProjection, org.gvsig.fmap.dal.coverage.datastruct.Extent, java.awt.geom.Dimension2D)
584
     */
585
    public ViewPortData createViewPortData(IProjection proj, Extent extent, Dimension2D size) {
586
            return new DefaultViewPortData(proj, extent, size);
587
    }
588
    
589
    /*
590
     * (non-Javadoc)
591
     * @see org.gvsig.fmap.dal.coverage.RasterManager#createViewPortData()
592
     */
593
    public ViewPortData createViewPortData() {
594
            return new DefaultViewPortData();
595
    }
596
    
597
    /*
598
     * (non-Javadoc)
599
     * @see org.gvsig.fmap.dal.coverage.RasterManager#getColorConversion()
600
     */
601
    public ColorConversion getColorConversion() {
602
            if(colorConversion == null)
603
                    colorConversion = new DefaultColorConversion();
604
            return colorConversion;
605
    }
606
        
607
        /*
608
         * (non-Javadoc)
609
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getROIStatistics(org.gvsig.fmap.dal.coverage.grid.AbstractROI)
610
         */
611
        public Statistics createROIStatistics(AbstractROI roi) {
612
                return new ROIStatistic(roi);
613
        }
614
        
615
        /*
616
         * (non-Javadoc)
617
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createEmptyFilterList()
618
         */
619
        public RasterFilterList createEmptyFilterList(int type) {
620
                DefaultRasterFilterList fl = new DefaultRasterFilterList();
621
                fl.setInitDataType(type);
622
                return fl;
623
        }
624
        
625
        /*
626
         * (non-Javadoc)
627
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getRasterTask()
628
         */
629
        public TaskEventManager getRasterTask() {
630
                return DefaultTaskEventManager.get();
631
        }
632
        
633
        /*
634
         * (non-Javadoc)
635
         * @see org.gvsig.fmap.dal.coverage.RasterManager#createRasterTask(java.lang.Object)
636
         */
637
        public TaskEventManager createRasterTask(Object process) {
638
                return new DefaultTaskEventManager(process);
639
        }
640
        
641
        /**
642
         * Builds a new parameter object. These parameters represents the fieds of a filter
643
         * panel.
644
         * @param id
645
         * @param value
646
         * @param type
647
         * @param list
648
         * @return
649
         */
650
        public Params createParams(String id, Object value, int type, String[] list) {
651
                ParamsImpl params = new ParamsImpl();
652
                params.setParam(id, 
653
                                value, 
654
                                type, 
655
                                list);
656
                return params;
657
        }
658
        
659
        /*
660
         * (non-Javadoc)
661
         * @see org.gvsig.fmap.dal.coverage.RasterManager#registerTiledProviders(org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider)
662
         */
663
        public void registerFileProvidersTiled(Class<?> provider) {
664
                if(!tiledProviders.contains(provider))
665
                        tiledProviders.add(provider);
666
        }
667
        
668
        /*
669
         * (non-Javadoc)
670
         * @see org.gvsig.fmap.dal.coverage.RasterManager#registerTileProviderFormats(java.lang.Class)
671
         */
672
        public void registerTileProviderFormats(Class<?> c) {
673
                if(tileclass == null) {
674
                        if(RasterProvider.class.isAssignableFrom(c)) {
675
                                ArrayList<?> pList = getTiledProvidersInstance();
676
                                for (int i = 0; i < pList.size(); i++) {
677
                                        String[] fList = ((RasterProvider)pList.get(i)).getFormatList();
678
                                        for (int j = 0; j < fList.length; j++) {
679
                                                String value = fList[j];
680
                                                addFormat(value, c);
681
                                        }
682
                                }
683
                        }
684
                        tileclass = c;
685
                }
686
        }
687
        
688
        /*
689
         * (non-Javadoc)
690
         * @see org.gvsig.fmap.dal.coverage.RasterManager#getTiledProviders()
691
         */
692
        @SuppressWarnings("unchecked")
693
        private ArrayList<?> getTiledProvidersInstance() {
694
                ArrayList list = new ArrayList();
695
                for (int i = 0; i < tiledProviders.size(); i++) {
696
                        Class<?> provider = tiledProviders.get(i);
697
                        try {
698
                                Constructor c = provider.getConstructor();
699
                                list.add(c.newInstance());
700
                        } catch (SecurityException e) {
701
                                logger.info("Error SecurityException in open", e);
702
                        } catch (NoSuchMethodException e) {
703
                                logger.info("Error NoSuchMethodException in open", e);
704
                        } catch (IllegalArgumentException e) {
705
                                logger.info("Error IllegalArgumentException in open", e);
706
                        } catch (InstantiationException e) {
707
                                logger.info("Error InstantiationException in open", e);
708
                        } catch (IllegalAccessException e) {
709
                                logger.info("Error IllegalAccessException in open", e);
710
                        } catch (InvocationTargetException e) {
711
                                logger.info("Error in open. Problemas con las librer?as nativas.", e);
712
                        }
713
                }
714
                return list;
715
        }
716
        
717
        /*
718
         * (non-Javadoc)
719
         * @see org.gvsig.fmap.dal.coverage.RasterManager#addFormat(java.lang.String, java.lang.Class)
720
         */
721
        public void addFormat(String ext, Class<?> c) {
722
                ArrayList<Class<?>> list = formatsRegistry.get(ext);
723
                if(list == null) {
724
                        list = new ArrayList<Class<?>>();
725
                        list.add(c);
726
                        formatsRegistry.put(ext, list);
727
                } else {
728
                        if(!list.contains(c))
729
                                list.add(c);
730
                }
731
        }
732
        
733
        /*
734
         * (non-Javadoc)
735
         * @see org.gvsig.fmap.dal.coverage.RasterManager#isExtensionSupported(java.lang.String, java.lang.Class)
736
         */
737
        public boolean isExtensionSupported(String ext, Class<?> c) {
738
                String extension = getFileUtils().getExtensionFromFileName(ext);
739
                
740
                ArrayList<Class<?>> list = formatsRegistry.get(extension);
741
                if(list == null) {
742
                        return false;
743
                } else {
744
                        for (int i = 0; i < list.size(); i++) {
745
                                if(c == list.get(i))
746
                                        return true;
747
                        }
748
                }
749
                return false;
750
        }
751
        
752
        /*
753
         * (non-Javadoc)
754
         * @see org.gvsig.fmap.dal.coverage.RasterManager#isExtensionSupported(java.lang.String)
755
         */
756
        public boolean isExtensionSupported(String ext) {
757
                String extension = getFileUtils().getExtensionFromFileName(ext);
758
                
759
                ArrayList<Class<?>> list = formatsRegistry.get(extension);
760
                if(list == null) {
761
                        return false;
762
                } 
763
                
764
                return true;
765
        }
766
}