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