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