Revision 2438 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

View differences:

DefaultRasterManager.java
22 22
package org.gvsig.raster.impl;
23 23

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

  
32 30
import org.cresques.cts.IProjection;
33
import org.gvsig.fmap.dal.DALLocator;
34
import org.gvsig.fmap.dal.DataStoreParameters;
35 31
import org.gvsig.fmap.dal.coverage.BufferFactory;
36 32
import org.gvsig.fmap.dal.coverage.RasterLibrary;
37 33
import org.gvsig.fmap.dal.coverage.RasterManager;
38 34
import org.gvsig.fmap.dal.coverage.RasterService;
39 35
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
40 36
import org.gvsig.fmap.dal.coverage.datastruct.DataStructFactory;
41
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
42
import org.gvsig.fmap.dal.coverage.datastruct.GridExtent;
43 37
import org.gvsig.fmap.dal.coverage.datastruct.Params;
44 38
import org.gvsig.fmap.dal.coverage.datastruct.RasterLegend;
45
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
46 39
import org.gvsig.fmap.dal.coverage.exception.FileNotExistsException;
47 40
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
48 41
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
42
import org.gvsig.fmap.dal.coverage.exception.QueryException;
49 43
import org.gvsig.fmap.dal.coverage.exception.ROIException;
50
import org.gvsig.fmap.dal.coverage.exception.RasterBufferInvalidException;
51 44
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
52 45
import org.gvsig.fmap.dal.coverage.exception.RasterLegendIONotFound;
53
import org.gvsig.fmap.dal.coverage.grid.Grid;
46
import org.gvsig.fmap.dal.coverage.filter.FilterLoader;
54 47
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
55 48
import org.gvsig.fmap.dal.coverage.grid.render.ImageDrawer;
56 49
import org.gvsig.fmap.dal.coverage.process.TaskEventManager;
......
60 53
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
61 54
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
62 55
import org.gvsig.fmap.dal.coverage.store.RasterWriter;
63
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
64 56
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
65 57
import org.gvsig.fmap.dal.coverage.util.CRSUtils;
66 58
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
......
69 61
import org.gvsig.fmap.dal.coverage.util.MathUtils;
70 62
import org.gvsig.fmap.dal.coverage.util.ProviderServices;
71 63
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
72
import org.gvsig.fmap.dal.exception.InitializeException;
73
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
74 64
import org.gvsig.fmap.dal.feature.FeatureStore;
75
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
76
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
77 65
import org.gvsig.raster.impl.buffer.DefaultDataServerWriter;
78 66
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
79 67
import org.gvsig.raster.impl.buffer.RasterBuffer;
......
81 69
import org.gvsig.raster.impl.buffer.cache.RasterCache;
82 70
import org.gvsig.raster.impl.buffer.cache.RasterReadOnlyBuffer;
83 71
import org.gvsig.raster.impl.datastruct.DefaultDataStructFactory;
84
import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
85 72
import org.gvsig.raster.impl.datastruct.legend.GimpGradients;
86 73
import org.gvsig.raster.impl.datastruct.legend.GimpPalettes;
87 74
import org.gvsig.raster.impl.datastruct.legend.LegendgvSIG;
88 75
import org.gvsig.raster.impl.datastruct.legend.RasterLegendIO;
89
import org.gvsig.raster.impl.grid.GridImpl;
90 76
import org.gvsig.raster.impl.grid.filter.DefaultRasterFilterList;
77
import org.gvsig.raster.impl.grid.filter.FilterLoaderImpl;
91 78
import org.gvsig.raster.impl.grid.render.ImageDrawerImpl;
92 79
import org.gvsig.raster.impl.grid.roi.ROIStatistic;
93 80
import org.gvsig.raster.impl.grid.roi.VectorialROIImpl;
......
97 84
import org.gvsig.raster.impl.process.RasterTask;
98 85
import org.gvsig.raster.impl.process.RasterTaskQueue;
99 86
import org.gvsig.raster.impl.process.vector.PotraceVectorization;
100
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
101
import org.gvsig.raster.impl.provider.RasterProvider;
102
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
103
import org.gvsig.raster.impl.store.DefaultRasterStore;
104 87
import org.gvsig.raster.impl.store.ParamsImpl;
105 88
import org.gvsig.raster.impl.store.QueryableRaster;
106
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
107 89
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
108 90
import org.gvsig.raster.roi.AbstractROI;
109 91
import org.gvsig.raster.roi.ROIReader;
......
119 101
import org.gvsig.tools.extensionpoint.ExtensionPoint;
120 102
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
121 103
import org.gvsig.tools.service.ServiceException;
122
import org.slf4j.Logger;
123
import org.slf4j.LoggerFactory;
124 104

  
125 105
/**
126 106
 * Default {@link RasterManager} implementation.
......
130 110
 */
131 111
public class DefaultRasterManager implements RasterManager {
132 112
	private static DefaultRasterManager internalInstance  = new DefaultRasterManager();
133
	private static final Logger         logger            = LoggerFactory.getLogger(DefaultRasterManager.class);
113
	//private static final Logger         logger            = LoggerFactory.getLogger(DefaultRasterManager.class);
134 114
	private FileUtils                   file              = null;
135 115
	private MathUtils                   math              = null;
136 116
	private RasterUtils                 util              = null;
137 117
	private ProviderServices            pInfo             = null;
138 118
	private DefaultColorConversion      colorConversion   = null;
139 119
	private DataStructFactory           dataStructFactory = null;
140
	private static Class<?>             tileclass         = null;
141
	private static ArrayList<Class<?>>  tiledProviders    = new ArrayList<Class<?>>(); 
142
	private static HashMap<String, ArrayList<Class<?>>>
143
                                        formatsRegistry   = new HashMap<String, ArrayList<Class<?>>>();
120
	
144 121
	public static HashMap<String, OverviewBuilder>
145 122
    									overviewBuilderRegistry   = new HashMap<String, OverviewBuilder>();
146 123
	public static CRSUtils              crsUtilRegistry   = null;
......
219 196
		return new DefaultDataServerWriter();
220 197
	}
221 198
	
222
	public RasterDataStore open(CoverageStoreProvider prov, DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
223
		if(prov instanceof RasterProvider) {
224
			DefaultRasterStore store = new DefaultRasterStore();
225
			store.setProvider((RasterProvider)prov);
226
			try {
227
				store.intializePhase1(null, params);
228
			} catch (InitializeException e) {
229
				throw new RasterDriverException(e.getMessage());
230
			}
231
			return store;
232
		}
233
		return null;
234
	}
235
	
236
	public RasterDataStore open(DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
237
		if(params == null || !(params instanceof AbstractRasterDataParameters))
238
			return null;
239
		DefaultRasterStore dSet = new DefaultRasterStore();
240
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
241
		try {
242
			DefaultRasterProvider provider = (DefaultRasterProvider)dataManager.createProvider(dSet, (AbstractRasterDataParameters)params);
243
			dSet.setProvider(provider);
244
		} catch (InitializeException e) {
245
			throw new RasterDriverException("Error initializing provider", e);
246
		} catch (ProviderNotRegisteredException e) {
247
			throw new RasterDriverException("Provider not register error", e);
248
		}
249
		return dSet;
250
	}
251
	
252
	public RasterDataStore open(Object datasetOpenParam) throws NotSupportedExtensionException, RasterDriverException {
253
		DefaultRasterStore dSet = new DefaultRasterStore();
254
		
255
		if (datasetOpenParam instanceof String) {
256
			DefaultRasterProvider provider = DefaultRasterProvider.singleDatasetInstance(dSet, (String)datasetOpenParam);
257
			dSet.setProvider(provider);
258
			return dSet;
259
		}
260
		
261
		/*if (datasetOpenParam instanceof String[]) {
262
			String[] param = (String[]) datasetOpenParam;
263
			try {
264
				for (int dataset = 0; dataset < param.length; dataset++) {
265
					dSet.addDataStore(DefaultRasterProvider.singleDatasetInstance(dSet, param[dataset]) );
266
				}
267
			} catch (OperationNotSupportedException e) {
268
				return open(param[0]);
269
			}
270
			return dSet;
271
		} 
272
		
273
		if (datasetOpenParam instanceof Buffer[]) {
274
			Buffer[] param = (Buffer[]) datasetOpenParam;
275
			for (int dataset = 0; dataset < param.length; dataset++) {
276
				dSet.addDataStore(DefaultRasterProvider.singleDatasetInstance(param[dataset]));
277
			}
278
			return dSet;
279
		}
280

  
281
		if(datasetOpenParam instanceof String[][]) {
282
			String[][] param = (String[][])datasetOpenParam;
283
			DefaultMultiRasterStore[][] mosaic = new DefaultMultiRasterStore[param.length][param[0].length];
284
			for (int i = 0; i < param.length; i++)
285
				for (int j = 0; j < param[i].length; j++)
286
					mosaic[i][j] = (DefaultMultiRasterStore)open(param[i][j]);
287
			DefaultMosaicRasterStore cd;
288
			try {
289
				cd = new DefaultMosaicRasterStore(mosaic);
290
			} catch (MosaicNotValidException e) {
291
				return null;
292
			}
293
			return cd;
294
		}*/
295
		
296
		return null;
297
	}
298
	
299 199
	public RasterQuery createQuery() {
300 200
		return new DefaultRasterQuery();
301 201
	}
......
327 227
		return new RasterMemoryBuffer(dataType, width, height, bandNr, malloc);
328 228
	}
329 229

  
330
	@SuppressWarnings("unchecked")
331 230
	public RasterWriter createWriter(String fName) throws NotSupportedExtensionException, RasterDriverException {
332 231
		String ext = getFileUtils().getExtensionFromFileName(fName);
333 232
		DefaultRasterWriter grw = null;
......
338 237
		if (!point.has(ext))
339 238
			return grw;
340 239

  
341
		Class clase = point.get(ext).getExtension();
342
		Class[] args = { String.class };
240
		Class<?> clase = point.get(ext).getExtension();
241
		Class<?>[] args = { String.class };
343 242
		try {
344
			Constructor hazNuevo = clase.getConstructor(args);
243
			Constructor<?> hazNuevo = clase.getConstructor(args);
345 244
			Object[] args2 = { fName };
346 245
			grw = (DefaultRasterWriter) hazNuevo.newInstance(args2);
347 246
		} catch (SecurityException e) {
......
372 271
		return createWriter(dataWriter, outFileName, nBands, at, outSizeX, outSizeY, dataType, params, proj, true);
373 272
	}
374 273

  
375
	@SuppressWarnings("unchecked")
376 274
	public RasterWriter createWriter(DataServerWriter dataWriter,
377 275
												 String outFileName,
378 276
												 int nBands,
......
391 289
		if (!point.has(ext))
392 290
			return grw;
393 291

  
394
		Class clase = point.get(ext).getExtension();
395
		Class[] args = { DataServerWriter.class, String.class, Integer.class, AffineTransform.class, Integer.class, Integer.class, Integer.class, Params.class, IProjection.class, Boolean.class };
292
		Class<?> clase = point.get(ext).getExtension();
293
		Class<?>[] args = { DataServerWriter.class, String.class, Integer.class, AffineTransform.class, Integer.class, Integer.class, Integer.class, Params.class, IProjection.class, Boolean.class };
396 294
		try {
397
			Constructor hazNuevo = clase.getConstructor(args);
295
			Constructor<?> hazNuevo = clase.getConstructor(args);
398 296
			Object [] args2 = {dataWriter, outFileName, new Integer(nBands), at,
399 297
								new Integer(outSizeX), new Integer(outSizeY), new Integer(dataType),
400 298
								params, proj, new Boolean(geo)};
......
434 332
	 *         When the object Vectorization is built the raster data buffer is loaded. 
435 333
	 *         This operation can be interrupted
436 334
	 */
437
	public Vectorization getVectorizeObject(QueryableRaster queryable) throws RasterDriverException, ProcessInterruptedException {
335
	public Vectorization getVectorizeObject(QueryableRaster queryable) throws QueryException, ProcessInterruptedException {
438 336
		return new PotraceVectorization(queryable);
439 337
	}
440 338
	
......
450 348
	public Set<String> getOverviewBuilderKeyList() {
451 349
		return overviewBuilderRegistry.keySet();
452 350
	}
453

  
454
	public ColorInterpretation createColorInterpretation(String[] colorInterp) {
455
		return new DataStoreColorInterpretation(colorInterp);
456
	}
457 351
	
458
	public Grid createGrid(RasterDataStore datasource, int[] bands, GridExtent windowExtent) throws RasterBufferInvalidException {
459
		return new GridImpl(datasource, bands, windowExtent);
352
	public FilterLoader createFilterLoader(int dataType) {
353
		return new FilterLoaderImpl(dataType);
460 354
	}
461 355
	
462
	public Grid createGrid(RasterDataStore datasource, int[] bands) throws RasterBufferInvalidException {
463
		return new GridImpl(datasource, bands);
356
	public FilterLoader createFilterLoader(RasterFilterList filterList) {
357
		return new FilterLoaderImpl(filterList);
464 358
	}
465 359
	
466
	public Grid createGrid(RasterDataStore datasource) throws RasterBufferInvalidException {
467
		return new GridImpl(datasource);
468
	}
469
	
470
	public Grid createGrid(GridExtent layerExtent,
471
			GridExtent windowExtent,
472
			int dataType,
473
			int[] bands) throws RasterBufferInvalidException {
474
		return new GridImpl(layerExtent, windowExtent, dataType, bands);
475
	}
476
	
477
	public Grid createGrid(Buffer buf, RasterDataStore datasource, boolean notInterp) {
478
		return new GridImpl(buf, datasource, notInterp);
479
	}
480
	
481 360
    public Historical createHistoricalService() {
482 361
    	return new DefaultHistorical();
483 362
    }
484 363
    
485
    public ViewPortData createViewPortData(IProjection proj, Extent extent, Dimension2D size) {
486
    	return new DefaultViewPortData(proj, extent, size);
487
    }
488
    
489
    public ViewPortData createViewPortData() {
490
    	return new DefaultViewPortData();
491
    }
492
    
493 364
    public ColorConversion getColorConversion() {
494 365
    	if(colorConversion == null)
495 366
    		colorConversion = new DefaultColorConversion();
......
539 410
		return params;
540 411
	}
541 412
	
542
	public void registerFileProvidersTiled(Class<?> provider) {
543
		if(!tiledProviders.contains(provider))
544
			tiledProviders.add(provider);
545
	}
546
	
547
	public void registerTileProviderFormats(Class<?> c) {
548
		if(tileclass == null) {
549
			if(RasterProvider.class.isAssignableFrom(c)) {
550
				ArrayList<?> pList = getTiledProvidersInstance();
551
				for (int i = 0; i < pList.size(); i++) {
552
					String[] fList = ((RasterProvider)pList.get(i)).getFormatList();
553
					for (int j = 0; j < fList.length; j++) {
554
						String value = fList[j];
555
						addFormat(value, c);
556
					}
557
				}
558
			}
559
			tileclass = c;
560
		}
561
	}
562
	
563
	@SuppressWarnings("unchecked")
564
	private ArrayList<?> getTiledProvidersInstance() {
565
		ArrayList list = new ArrayList();
566
		for (int i = 0; i < tiledProviders.size(); i++) {
567
			Class<?> provider = tiledProviders.get(i);
568
			try {
569
				Constructor c = provider.getConstructor();
570
				list.add(c.newInstance());
571
			} catch (SecurityException e) {
572
				logger.info("Error SecurityException in open", e);
573
			} catch (NoSuchMethodException e) {
574
				logger.info("Error NoSuchMethodException in open", e);
575
			} catch (IllegalArgumentException e) {
576
				logger.info("Error IllegalArgumentException in open", e);
577
			} catch (InstantiationException e) {
578
				logger.info("Error InstantiationException in open", e);
579
			} catch (IllegalAccessException e) {
580
				logger.info("Error IllegalAccessException in open", e);
581
			} catch (InvocationTargetException e) {
582
				logger.info("Error in open. Problemas con las librer?as nativas.", e);
583
			}
584
		}
585
		return list;
586
	}
587
	
588
	public void addFormat(String ext, Class<?> c) {
589
		ArrayList<Class<?>> list = formatsRegistry.get(ext);
590
		if(list == null) {
591
			list = new ArrayList<Class<?>>();
592
			list.add(c);
593
			formatsRegistry.put(ext, list);
594
		} else {
595
			if(!list.contains(c))
596
				list.add(c);
597
		}
598
	}
599
	
600
	public boolean isExtensionSupported(String ext, Class<?> c) {
601
		String extension = getFileUtils().getExtensionFromFileName(ext);
602
		
603
		ArrayList<Class<?>> list = formatsRegistry.get(extension);
604
		if(list == null) {
605
			return false;
606
		} else {
607
			for (int i = 0; i < list.size(); i++) {
608
				if(c == list.get(i))
609
					return true;
610
			}
611
		}
612
		return false;
613
	}
614
	
615
	public boolean isExtensionSupported(String ext) {
616
		String extension = getFileUtils().getExtensionFromFileName(ext);
617
		
618
		ArrayList<Class<?>> list = formatsRegistry.get(extension);
619
		if(list == null) {
620
			return false;
621
		} 
622
		
623
		return true;
624
	}
625
	
626
	public String[] getReadOnlyFormatList() {
627
		return formatsRegistry.keySet().toArray(new String[0]);
628
	}
629
	
630 413
	public ImageDrawer createImageDrawerService() {
631 414
		return new ImageDrawerImpl();
632 415
	}

Also available in: Unified diff