Revision 2348 org.gvsig.raster/branches/org.gvsig.raster_dataaccess_refactoring/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;
49 42
import org.gvsig.fmap.dal.coverage.exception.QueryException;
50 43
import org.gvsig.fmap.dal.coverage.exception.ROIException;
51
import org.gvsig.fmap.dal.coverage.exception.RasterBufferInvalidException;
52 44
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
53 45
import org.gvsig.fmap.dal.coverage.exception.RasterLegendIONotFound;
54 46
import org.gvsig.fmap.dal.coverage.filter.FilterLoader;
55
import org.gvsig.fmap.dal.coverage.grid.Grid;
56 47
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
57 48
import org.gvsig.fmap.dal.coverage.grid.render.ImageDrawer;
58 49
import org.gvsig.fmap.dal.coverage.process.TaskEventManager;
......
62 53
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
63 54
import org.gvsig.fmap.dal.coverage.store.RasterQuery;
64 55
import org.gvsig.fmap.dal.coverage.store.RasterWriter;
65
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
66 56
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
67 57
import org.gvsig.fmap.dal.coverage.util.CRSUtils;
68 58
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
......
71 61
import org.gvsig.fmap.dal.coverage.util.MathUtils;
72 62
import org.gvsig.fmap.dal.coverage.util.ProviderServices;
73 63
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
74
import org.gvsig.fmap.dal.exception.InitializeException;
75
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
76 64
import org.gvsig.fmap.dal.feature.FeatureStore;
77
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
78
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
79 65
import org.gvsig.raster.impl.buffer.DefaultDataServerWriter;
80 66
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
81 67
import org.gvsig.raster.impl.buffer.RasterBuffer;
......
83 69
import org.gvsig.raster.impl.buffer.cache.RasterCache;
84 70
import org.gvsig.raster.impl.buffer.cache.RasterReadOnlyBuffer;
85 71
import org.gvsig.raster.impl.datastruct.DefaultDataStructFactory;
86
import org.gvsig.raster.impl.datastruct.DefaultViewPortData;
87 72
import org.gvsig.raster.impl.datastruct.legend.GimpGradients;
88 73
import org.gvsig.raster.impl.datastruct.legend.GimpPalettes;
89 74
import org.gvsig.raster.impl.datastruct.legend.LegendgvSIG;
90 75
import org.gvsig.raster.impl.datastruct.legend.RasterLegendIO;
91
import org.gvsig.raster.impl.grid.GridImpl;
92 76
import org.gvsig.raster.impl.grid.filter.DefaultRasterFilterList;
93 77
import org.gvsig.raster.impl.grid.filter.FilterLoaderImpl;
94 78
import org.gvsig.raster.impl.grid.render.ImageDrawerImpl;
......
100 84
import org.gvsig.raster.impl.process.RasterTask;
101 85
import org.gvsig.raster.impl.process.RasterTaskQueue;
102 86
import org.gvsig.raster.impl.process.vector.PotraceVectorization;
103
import org.gvsig.raster.impl.provider.AbstractRasterProvider;
104
import org.gvsig.raster.impl.provider.RasterProvider;
105
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
106
import org.gvsig.raster.impl.store.DefaultRasterStore;
107 87
import org.gvsig.raster.impl.store.ParamsImpl;
108 88
import org.gvsig.raster.impl.store.QueryableRaster;
109
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
110 89
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
111 90
import org.gvsig.raster.roi.AbstractROI;
112 91
import org.gvsig.raster.roi.ROIReader;
......
122 101
import org.gvsig.tools.extensionpoint.ExtensionPoint;
123 102
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
124 103
import org.gvsig.tools.service.ServiceException;
125
import org.slf4j.Logger;
126
import org.slf4j.LoggerFactory;
127 104

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

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

  
333
	@SuppressWarnings("unchecked")
334 230
	public RasterWriter createWriter(String fName) throws NotSupportedExtensionException, RasterDriverException {
335 231
		String ext = getFileUtils().getExtensionFromFileName(fName);
336 232
		DefaultRasterWriter grw = null;
......
341 237
		if (!point.has(ext))
342 238
			return grw;
343 239

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

  
378
	@SuppressWarnings("unchecked")
379 274
	public RasterWriter createWriter(DataServerWriter dataWriter,
380 275
												 String outFileName,
381 276
												 int nBands,
......
394 289
		if (!point.has(ext))
395 290
			return grw;
396 291

  
397
		Class clase = point.get(ext).getExtension();
398
		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 };
399 294
		try {
400
			Constructor hazNuevo = clase.getConstructor(args);
295
			Constructor<?> hazNuevo = clase.getConstructor(args);
401 296
			Object [] args2 = {dataWriter, outFileName, new Integer(nBands), at,
402 297
								new Integer(outSizeX), new Integer(outSizeY), new Integer(dataType),
403 298
								params, proj, new Boolean(geo)};
......
454 349
		return overviewBuilderRegistry.keySet();
455 350
	}
456 351
	
457
	public ColorInterpretation createColorInterpretation(String[] colorInterp) {
458
		return new DataStoreColorInterpretation(colorInterp);
459
	}
460
	
461 352
	public FilterLoader createFilterLoader(int dataType) {
462 353
		return new FilterLoaderImpl(dataType);
463 354
	}
......
466 357
		return new FilterLoaderImpl(filterList);
467 358
	}
468 359
	
469
	public Grid createGrid(RasterDataStore datasource, int[] bands, GridExtent windowExtent) throws RasterBufferInvalidException {
470
		return new GridImpl(datasource, bands, windowExtent);
471
	}
472
	
473
	public Grid createGrid(RasterDataStore datasource, int[] bands) throws RasterBufferInvalidException {
474
		return new GridImpl(datasource, bands);
475
	}
476
	
477
	public Grid createGrid(RasterDataStore datasource) throws RasterBufferInvalidException {
478
		return new GridImpl(datasource);
479
	}
480
	
481
	public Grid createGrid(GridExtent layerExtent,
482
			GridExtent windowExtent,
483
			int dataType,
484
			int[] bands) throws RasterBufferInvalidException {
485
		return new GridImpl(layerExtent, windowExtent, dataType, bands);
486
	}
487
	
488
	public Grid createGrid(Buffer buf, RasterDataStore datasource, boolean notInterp) {
489
		return new GridImpl(buf, datasource, notInterp);
490
	}
491
	
492 360
    public Historical createHistoricalService() {
493 361
    	return new DefaultHistorical();
494 362
    }
495 363
    
496
    public ViewPortData createViewPortData(IProjection proj, Extent extent, Dimension2D size) {
497
    	return new DefaultViewPortData(proj, extent, size);
498
    }
499
    
500
    public ViewPortData createViewPortData() {
501
    	return new DefaultViewPortData();
502
    }
503
    
504 364
    public ColorConversion getColorConversion() {
505 365
    	if(colorConversion == null)
506 366
    		colorConversion = new DefaultColorConversion();
......
550 410
		return params;
551 411
	}
552 412
	
553
	public void registerFileProvidersTiled(Class<?> provider) {
554
		if(!tiledProviders.contains(provider))
555
			tiledProviders.add(provider);
556
	}
557
	
558
	public void registerTileProviderFormats(Class<?> c) {
559
		if(tileclass == null) {
560
			if(RasterProvider.class.isAssignableFrom(c)) {
561
				ArrayList<?> pList = getTiledProvidersInstance();
562
				for (int i = 0; i < pList.size(); i++) {
563
					String[] fList = ((RasterProvider)pList.get(i)).getFormatList();
564
					for (int j = 0; j < fList.length; j++) {
565
						String value = fList[j];
566
						addFormat(value, c);
567
					}
568
				}
569
			}
570
			tileclass = c;
571
		}
572
	}
573
	
574
	@SuppressWarnings("unchecked")
575
	private ArrayList<?> getTiledProvidersInstance() {
576
		ArrayList list = new ArrayList();
577
		for (int i = 0; i < tiledProviders.size(); i++) {
578
			Class<?> provider = tiledProviders.get(i);
579
			try {
580
				Constructor c = provider.getConstructor();
581
				list.add(c.newInstance());
582
			} catch (SecurityException e) {
583
				logger.info("Error SecurityException in open", e);
584
			} catch (NoSuchMethodException e) {
585
				logger.info("Error NoSuchMethodException in open", e);
586
			} catch (IllegalArgumentException e) {
587
				logger.info("Error IllegalArgumentException in open", e);
588
			} catch (InstantiationException e) {
589
				logger.info("Error InstantiationException in open", e);
590
			} catch (IllegalAccessException e) {
591
				logger.info("Error IllegalAccessException in open", e);
592
			} catch (InvocationTargetException e) {
593
				logger.info("Error in open. Problemas con las librer?as nativas.", e);
594
			}
595
		}
596
		return list;
597
	}
598
	
599
	public void addFormat(String ext, Class<?> c) {
600
		ArrayList<Class<?>> list = formatsRegistry.get(ext);
601
		if(list == null) {
602
			list = new ArrayList<Class<?>>();
603
			list.add(c);
604
			formatsRegistry.put(ext, list);
605
		} else {
606
			if(!list.contains(c))
607
				list.add(c);
608
		}
609
	}
610
	
611
	public boolean isExtensionSupported(String ext, Class<?> c) {
612
		String extension = getFileUtils().getExtensionFromFileName(ext);
613
		
614
		ArrayList<Class<?>> list = formatsRegistry.get(extension);
615
		if(list == null) {
616
			return false;
617
		} else {
618
			for (int i = 0; i < list.size(); i++) {
619
				if(c == list.get(i))
620
					return true;
621
			}
622
		}
623
		return false;
624
	}
625
	
626
	public boolean isExtensionSupported(String ext) {
627
		String extension = getFileUtils().getExtensionFromFileName(ext);
628
		
629
		ArrayList<Class<?>> list = formatsRegistry.get(extension);
630
		if(list == null) {
631
			return false;
632
		} 
633
		
634
		return true;
635
	}
636
	
637
	public String[] getReadOnlyFormatList() {
638
		return formatsRegistry.keySet().toArray(new String[0]);
639
	}
640
	
641 413
	public ImageDrawer createImageDrawerService() {
642 414
		return new ImageDrawerImpl();
643 415
	}

Also available in: Unified diff