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

History | View | Annotate | Download (27.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;
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.grid.render.ImageDrawer;
53
import org.gvsig.fmap.dal.coverage.process.TaskEventManager;
54
import org.gvsig.fmap.dal.coverage.process.overview.OverviewBuilder;
55
import org.gvsig.fmap.dal.coverage.process.vector.Vectorization;
56
import org.gvsig.fmap.dal.coverage.process.warp.Warp;
57
import org.gvsig.fmap.dal.coverage.store.DataServerWriter;
58
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
59
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
60
import org.gvsig.fmap.dal.coverage.store.RasterWriter;
61
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
62
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
63
import org.gvsig.fmap.dal.coverage.util.CRSUtils;
64
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
65
import org.gvsig.fmap.dal.coverage.util.FileUtils;
66
import org.gvsig.fmap.dal.coverage.util.Historical;
67
import org.gvsig.fmap.dal.coverage.util.MathUtils;
68
import org.gvsig.fmap.dal.coverage.util.ProviderServices;
69
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
70
import org.gvsig.fmap.dal.exception.InitializeException;
71
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
72
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
73
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
74
import org.gvsig.raster.impl.buffer.DefaultDataServerWriter;
75
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
76
import org.gvsig.raster.impl.buffer.RasterBuffer;
77
import org.gvsig.raster.impl.buffer.RasterMemoryBuffer;
78
import org.gvsig.raster.impl.buffer.cache.RasterCache;
79
import org.gvsig.raster.impl.buffer.cache.RasterReadOnlyBuffer;
80
import org.gvsig.raster.impl.datastruct.DefaultDataStructFactory;
81
import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
82
import org.gvsig.raster.impl.datastruct.legend.GimpGradients;
83
import org.gvsig.raster.impl.datastruct.legend.GimpPalettes;
84
import org.gvsig.raster.impl.datastruct.legend.LegendgvSIG;
85
import org.gvsig.raster.impl.datastruct.legend.RasterLegendIO;
86
import org.gvsig.raster.impl.grid.GridImpl;
87
import org.gvsig.raster.impl.grid.filter.DefaultRasterFilterList;
88
import org.gvsig.raster.impl.grid.render.ImageDrawerImpl;
89
import org.gvsig.raster.impl.grid.roi.ROIStatistic;
90
import org.gvsig.raster.impl.process.DefaultTaskEventManager;
91
import org.gvsig.raster.impl.process.overview.GdalOverviewBuilder;
92
import org.gvsig.raster.impl.process.vector.PotraceVectorization;
93
import org.gvsig.raster.impl.process.warp.GdalWarpImpl;
94
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
95
import org.gvsig.raster.impl.provider.RasterProvider;
96
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
97
import org.gvsig.raster.impl.store.DefaultRasterStore;
98
import org.gvsig.raster.impl.store.ParamsImpl;
99
import org.gvsig.raster.impl.store.QueryableRaster;
100
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
101
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
102
import org.gvsig.raster.util.DefaultCRSUtils;
103
import org.gvsig.raster.util.DefaultColorConversion;
104
import org.gvsig.raster.util.DefaultFileUtils;
105
import org.gvsig.raster.util.DefaultHistorical;
106
import org.gvsig.raster.util.DefaultMathUtils;
107
import org.gvsig.raster.util.DefaultProviderServices;
108
import org.gvsig.raster.util.DefaultRasterUtils;
109
import org.gvsig.tools.ToolsLocator;
110
import org.gvsig.tools.extensionpoint.ExtensionPoint;
111
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
112
import org.gvsig.tools.service.ServiceException;
113
import org.slf4j.Logger;
114
import org.slf4j.LoggerFactory;
115

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

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

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

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

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

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

    
393
                if (!point.has(ext))
394
                        return grw;
395

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

    
418
        /*
419
         * (non-Javadoc)
420
         * @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)
421
         */
422
        public RasterWriter createWriter(DataServerWriter dataWriter,
423
                                                                                                 String outFileName,
424
                                                                                                 int nBands,
425
                                                                                                 AffineTransform at,
426
                                                                                                 int outSizeX,
427
                                                                                                 int outSizeY,
428
                                                                                                 int dataType,
429
                                                                                                 Params params,
430
                                                                                                 IProjection proj) throws NotSupportedExtensionException, RasterDriverException {
431
                return createWriter(dataWriter, outFileName, nBands, at, outSizeX, outSizeY, dataType, params, proj, true);
432
        }
433

    
434
        /*
435
         * (non-Javadoc)
436
         * @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)
437
         */
438
        @SuppressWarnings("unchecked")
439
        public RasterWriter createWriter(DataServerWriter dataWriter,
440
                                                                                                 String outFileName,
441
                                                                                                 int nBands,
442
                                                                                                 AffineTransform at,
443
                                                                                                 int outSizeX,
444
                                                                                                 int outSizeY,
445
                                                                                                 int dataType,
446
                                                                                                 Params params,
447
                                                                                                 IProjection proj,
448
                                                                                                 boolean geo) throws NotSupportedExtensionException, RasterDriverException {
449
                String ext = outFileName.toLowerCase().substring(outFileName.lastIndexOf('.') + 1);
450
                DefaultRasterWriter grw = null;
451
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
452
                ExtensionPoint point = extensionPoints.get("RasterWriter");
453

    
454
                if (!point.has(ext))
455
                        return grw;
456

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

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