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/util/DefaultProviderServices.java

View differences:

DefaultProviderServices.java
27 27
import java.lang.reflect.Constructor;
28 28
import java.lang.reflect.InvocationTargetException;
29 29
import java.util.ArrayList;
30
import java.util.HashMap;
30 31
import java.util.Iterator;
31 32
import java.util.List;
32 33
import java.util.Map;
......
70 71
import org.gvsig.raster.impl.DefaultRasterManager;
71 72
import org.gvsig.raster.impl.provider.AbstractRasterProvider;
72 73
import org.gvsig.raster.impl.provider.RasterProvider;
74
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
75
import org.gvsig.raster.impl.store.DefaultRasterStore;
73 76
import org.gvsig.raster.impl.store.WriteFileFormatFeatures;
74 77
import org.gvsig.raster.impl.store.rmf.ClassSerializer;
75 78
import org.gvsig.raster.impl.store.rmf.RmfBlocksManager;
......
87 90
 */
88 91
public class DefaultProviderServices implements ProviderServices {
89 92
	public TreeMap<String, WriteFileFormatFeatures>
90
                                          fileFeature    = new TreeMap<String, WriteFileFormatFeatures>();
91
	private Logger                        log            = LoggerFactory.getLogger(DefaultProviderServices.class);
93
                                          fileFeature       = new TreeMap<String, WriteFileFormatFeatures>();
94
	private Logger                        log               = LoggerFactory.getLogger(DefaultProviderServices.class);
95
	private static List<Class<?>>         tiledProviders    = new ArrayList<Class<?>>(); 
96
	private static Class<?>               tileclass         = null;
97
	private static HashMap<String, ArrayList<Class<?>>>
98
                                          formatsRegistry   = new HashMap<String, ArrayList<Class<?>>>();
92 99

  
93 100
	public DefaultRasterManager getManager() {
94 101
		return (DefaultRasterManager)RasterLocator.getManager();
......
98 105
		return fileFeature;
99 106
	}
100 107
	
108
	public RasterDataStore open(CoverageStoreProvider prov, DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
109
		if(prov instanceof RasterProvider) {
110
			DefaultRasterStore store = new DefaultRasterStore();
111
			store.setProvider((RasterProvider)prov);
112
			try {
113
				store.intializePhase1(null, params);
114
			} catch (InitializeException e) {
115
				throw new RasterDriverException(e.getMessage());
116
			}
117
			return store;
118
		}
119
		return null;
120
	}
121
	
101 122
	/**
102 123
	 * Abre un dataset pasando como par�metros la proyecci�n y un objeto identificador del dataset. Este
103 124
	 * objeto puede ser una ruta a un fichero en disco. En este caso la extensi�n del fichero servir� para
......
109 130
	 * @throws NotSupportedExtensionException
110 131
	 * @throws RasterDriverException
111 132
	 */
112
	public RasterDataStore open(DataStoreParameters param) throws NotSupportedExtensionException, RasterDriverException {
113
		return getManager().open(param);
133
	public RasterDataStore open(DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
134
		if(params == null || !(params instanceof AbstractRasterDataParameters))
135
			return null;
136
		DefaultRasterStore dSet = new DefaultRasterStore();
137
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
138
		try {
139
			AbstractRasterProvider provider = (AbstractRasterProvider)dataManager.createProvider(dSet, (AbstractRasterDataParameters)params);
140
			dSet.setProvider(provider);
141
		} catch (InitializeException e) {
142
			throw new RasterDriverException("Error initializing provider", e);
143
		} catch (ProviderNotRegisteredException e) {
144
			throw new RasterDriverException("Provider not register error", e);
145
		}
146
		return dSet;
114 147
	}
115 148
	
116
	public RasterDataStore open(CoverageStoreProvider prov, DataStoreParameters params) throws NotSupportedExtensionException, RasterDriverException {
117
		return getManager().open(prov, params);
149
	public RasterDataStore open(Object datasetOpenParam) throws NotSupportedExtensionException, RasterDriverException {
150
		DefaultRasterStore dSet = new DefaultRasterStore();
151
		
152
		if (datasetOpenParam instanceof String) {
153
			AbstractRasterProvider provider = AbstractRasterProvider.singleDatasetInstance(dSet, (String)datasetOpenParam);
154
			dSet.setProvider(provider);
155
			return dSet;
156
		}
157
		
158
		/*if (datasetOpenParam instanceof String[]) {
159
			String[] param = (String[]) datasetOpenParam;
160
			try {
161
				for (int dataset = 0; dataset < param.length; dataset++) {
162
					dSet.addDataStore(DefaultRasterProvider.singleDatasetInstance(dSet, param[dataset]) );
163
				}
164
			} catch (OperationNotSupportedException e) {
165
				return open(param[0]);
166
			}
167
			return dSet;
168
		} 
169
		
170
		if (datasetOpenParam instanceof Buffer[]) {
171
			Buffer[] param = (Buffer[]) datasetOpenParam;
172
			for (int dataset = 0; dataset < param.length; dataset++) {
173
				dSet.addDataStore(DefaultRasterProvider.singleDatasetInstance(param[dataset]));
174
			}
175
			return dSet;
176
		}
177

  
178
		if(datasetOpenParam instanceof String[][]) {
179
			String[][] param = (String[][])datasetOpenParam;
180
			DefaultMultiRasterStore[][] mosaic = new DefaultMultiRasterStore[param.length][param[0].length];
181
			for (int i = 0; i < param.length; i++)
182
				for (int j = 0; j < param[i].length; j++)
183
					mosaic[i][j] = (DefaultMultiRasterStore)open(param[i][j]);
184
			DefaultMosaicRasterStore cd;
185
			try {
186
				cd = new DefaultMosaicRasterStore(mosaic);
187
			} catch (MosaicNotValidException e) {
188
				return null;
189
			}
190
			return cd;
191
		}*/
192
		
193
		return null;
118 194
	}
119 195
	
120 196
	public RasterDataStore open(String file) throws NotSupportedExtensionException, RasterDriverException, InitializeException, ProviderNotRegisteredException {
......
323 399
		return result;
324 400
	}
325 401

  
402
	@SuppressWarnings("rawtypes")
326 403
	public String[] getWriteDriversType() {
327 404
		if (fileFeature.size() == 0)
328 405
			return null;
......
508 585
	}
509 586

  
510 587
	public void addFormat(String ext, Class<?> c) {
511
		getManager().addFormat(ext, c);
588
		ArrayList<Class<?>> list = formatsRegistry.get(ext);
589
		if(list == null) {
590
			list = new ArrayList<Class<?>>();
591
			list.add(c);
592
			formatsRegistry.put(ext, list);
593
		} else {
594
			if(!list.contains(c))
595
				list.add(c);
596
		}
512 597
	}
513

  
514
	public String[] getReadOnlyFormatList() {
515
		return getManager().getReadOnlyFormatList();
516
	}
517

  
598
	
518 599
	public boolean isExtensionSupported(String ext, Class<?> c) {
519
		return getManager().isExtensionSupported(ext, c);
600
		String extension = getManager().getFileUtils().getExtensionFromFileName(ext);
601
		
602
		ArrayList<Class<?>> list = formatsRegistry.get(extension);
603
		if(list == null) {
604
			return false;
605
		} else {
606
			for (int i = 0; i < list.size(); i++) {
607
				if(c == list.get(i))
608
					return true;
609
			}
610
		}
611
		return false;
520 612
	}
521

  
613
	
522 614
	public boolean isExtensionSupported(String ext) {
523
		return getManager().isExtensionSupported(ext);
615
		String extension = getManager().getFileUtils().getExtensionFromFileName(ext);
616
		
617
		ArrayList<Class<?>> list = formatsRegistry.get(extension);
618
		if(list == null) {
619
			return false;
620
		} 
621
		
622
		return true;
524 623
	}
525 624

  
625
	public String[] getReadOnlyFormatList() {
626
		return formatsRegistry.keySet().toArray(new String[0]);
627
	}
628

  
526 629
	public void registerFileProvidersTiled(Class<?> provider) {
527
		getManager().registerFileProvidersTiled(provider);
630
		if(!tiledProviders.contains(provider))
631
			tiledProviders.add(provider);
528 632
	}
529 633

  
530 634
	public void registerTileProviderFormats(Class<?> c) {
531
		getManager().registerTileProviderFormats(c);
635
		if(tileclass == null) {
636
			if(RasterProvider.class.isAssignableFrom(c)) {
637
				List<Object> pList = getTiledProvidersInstance();
638
				for (int i = 0; i < pList.size(); i++) {
639
					String[] fList = ((RasterProvider)pList.get(i)).getFormatList();
640
					for (int j = 0; j < fList.length; j++) {
641
						String value = fList[j];
642
						addFormat(value, c);
643
					}
644
				}
645
			}
646
			tileclass = c;
647
		}
532 648
	}
533 649
	
650
	private List<Object> getTiledProvidersInstance() {
651
		List<Object> list = new ArrayList<Object>();
652
		for (int i = 0; i < tiledProviders.size(); i++) {
653
			Class<?> provider = tiledProviders.get(i);
654
			try {
655
				Constructor<?> c = provider.getConstructor();
656
				list.add(c.newInstance());
657
			} catch (SecurityException e) {
658
				log.info("Error SecurityException in open", e);
659
			} catch (NoSuchMethodException e) {
660
				log.info("Error NoSuchMethodException in open", e);
661
			} catch (IllegalArgumentException e) {
662
				log.info("Error IllegalArgumentException in open", e);
663
			} catch (InstantiationException e) {
664
				log.info("Error InstantiationException in open", e);
665
			} catch (IllegalAccessException e) {
666
				log.info("Error IllegalAccessException in open", e);
667
			} catch (InvocationTargetException e) {
668
				log.info("Error in open. Problemas con las librer?as nativas.", e);
669
			}
670
		}
671
		return list;
672
	}
673
	
534 674
	public void registerOverviewBuilderImplementation(String id, OverviewBuilder ovBuilder) {
535 675
		DefaultRasterManager.overviewBuilderRegistry.put(id, ovBuilder);
536 676
	}

Also available in: Unified diff