Revision 1800 org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileProvider.java

View differences:

MultiFileProvider.java
37 37
import org.gvsig.fmap.dal.coverage.datastruct.BandList;
38 38
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
39 39
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
40
import org.gvsig.fmap.dal.coverage.exception.BandNotFoundInListException;
40 41
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
41 42
import org.gvsig.fmap.dal.coverage.exception.FileNotSupportedException;
42 43
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
......
66 67
import org.gvsig.raster.cache.tile.provider.TileListener;
67 68
import org.gvsig.raster.cache.tile.provider.TileServer;
68 69
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
70
import org.gvsig.raster.impl.datastruct.BandListImpl;
71
import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
69 72
import org.gvsig.raster.impl.datastruct.ExtentImpl;
70 73
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
71 74
import org.gvsig.raster.impl.provider.RasterProvider;
......
696 699
		
697 700
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
698 701
		q.setAreaOfInterest(extent, bufWidth, bufHeight);
699
		q.setBandList(bandList);
700 702
		q.setBuffer(rasterBuf);
701 703
		q.setAdjustToExtent(adjustToExtent);
702 704
		
703 705
		for (int i = 0; i < providerList.size(); i++) {
704
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
706
			BandList bandListByFile = createBandListByProvider(bandList, providerList.get(i));
707
			if(bandListByFile != null) {
708
				q.setBandList(bandListByFile);
709
				rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
710
			}
705 711
		}
706 712
		return rasterBuf;
707 713
	}
714
	
715
	/**
716
	 * Creates a <code>BandList</code> for each provider of this <code>MuktiFileProvider</code>.
717
	 * When a request is made, the <code>BandList</code> is global for all files. A specific 
718
	 * <code>BandList</code> has to be built for each provider. 
719
	 * @param globalBandList
720
	 * @param provider
721
	 * @return
722
	 */
723
	private BandList createBandListByProvider(BandList globalBandList, RasterProvider provider) {
724
		BandList bandListByFile = new BandListImpl();
725
		for (int i = 0; i < provider.getBandCount(); i++) {
726
			try {
727
				bandListByFile.addBand(new DatasetBandImpl(provider.getURI(), i, provider.getDataType()[0], provider.getBandCount()), i);
728
			} catch (BandNotFoundInListException e1) {
729
			}
730
		}
731
		
732
		boolean areThereBandsToDraw = false;
733
		for (int i = 0; i < provider.getBandCount(); i++) {
734
			int[] bandsToDrawByProviderBand = globalBandList.getBufferBandToDraw(provider.getURI(), i);
735
			if(bandsToDrawByProviderBand != null) {
736
				areThereBandsToDraw = true;
737
				for (int j = 0; j < bandsToDrawByProviderBand.length; j++) {
738
					bandListByFile.getBand(i).addPositionToDrawInBuffer(bandsToDrawByProviderBand[j]);				
739
				}
740
			}
741
		}
742
		
743
		if(areThereBandsToDraw)
744
			return bandListByFile;
745
		return null;
746
	}
708 747

  
709 748
	/*
710 749
	 * (non-Javadoc)

Also available in: Unified diff