Revision 999

View differences:

org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestReadWindowAndCompareData.java
1
package org.gvsig.raster.cache.buffer.impl.rocache;
2

  
3
import java.io.IOException;
4

  
5
import junit.framework.TestCase;
6

  
7
import org.gvsig.jgdal.GdalException;
8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferParam;
10
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
11
import org.gvsig.raster.cache.buffer.impl.BufferCacheManagerImpl;
12
import org.gvsig.raster.cache.buffer.impl.BufferParamImpl;
13
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
14
import org.gvsig.raster.cache.buffer.impl.memory.RasterMemoryBuffer;
15

  
16
/**
17
 * Read a number from cache
18
 * @author Nacho Brodin (nachobrodin@gmail.com)
19
 */
20
public class TestReadWindowAndCompareData extends TestCase {
21
	private String in = "./src/test/resources/image/001m09_1_0.tif";
22
	private int    initX  = 200;
23
	private int    initY  = 200;
24
	private int    w      = 400;
25
	private int    h      = 400;
26
	
27
	public void start() {
28
		this.setUp();
29
		this.testStack();
30
	}
31

  
32
	public void setUp() {
33
		System.err.println("ROCache TestReadTiffAndCompareData running...");
34
	}
35
	
36
	public void testStack() {
37
		long t1 = System.currentTimeMillis();
38
		GdalRead input = null;
39
		
40
		BufferCacheManagerImpl.cacheSize = 1;
41
		BufferCacheManagerImpl.pageSize = 0.2;
42
		
43
		Buffer buf1 = null;
44
		try {
45
			input = new GdalRead(in);
46

  
47
			Object dataIn = input.readBlock(initX, initY, w, h);
48

  
49
			//Create Buffer
50
			buf1 = new RasterMemoryBuffer(input.getRasterBufTypeFromGdalType(input.getDataType()), 
51
											w, 
52
											h,
53
											input.getBandCount(),
54
											true);
55

  
56
			//Set data to buffer
57
			setLines(dataIn, buf1);
58
		} catch (GdalException e1) {
59
			e1.printStackTrace();
60
		} catch (IOException e1) {
61
			e1.printStackTrace();
62
		} catch (InterruptedException e1) {
63
			e1.printStackTrace();
64
		} catch (OperationNotSupportedException e1) {
65
			e1.printStackTrace();
66
		}
67
		
68
		RasterReadOnlyBuffer buf = null;
69
		try {
70
			BufferParam p = new BufferParamImpl(in, initX, initY, w, h, new int[]{0, 1, 2});
71
			buf = new RasterReadOnlyBuffer(p);
72
		} catch (IOException e) {
73
			e.printStackTrace();
74
		}
75
		
76
				
77
		for (int iBand = 0; iBand < buf.getBandCount(); iBand++) {
78
			for (int row = 0; row < buf.getHeight(); row++) {
79
				for (int col = 0; col < buf.getWidth(); col++) {
80
					byte n = buf.getElemByte(row, col, iBand);
81
					byte m = buf1.getElemByte(row, col, iBand);
82
					if(n != m)
83
						System.out.println(row + " " + col);
84
					assertEquals(n, m);
85
				}
86
			}
87
		}
88
		
89
		try {
90
			buf.free();
91
		} catch (IOException e) {
92
			// TODO Auto-generated catch block
93
			e.printStackTrace();
94
		}
95
		
96
		long t2 = System.currentTimeMillis();
97
		System.out.println("Tiempo ROCache TestRWOneValue: " + (t2 - t1) + " milisegundos");
98
	}
99
	
100
	private void setLines(Object dataIn, Buffer buf) throws OperationNotSupportedException {
101
		if(dataIn instanceof byte[][][]) {
102
    		byte[][][] d = (byte[][][])dataIn;
103
    		for (int iBand = 0; iBand < d.length; iBand++) {
104
				for (int row = 0; row < d[iBand].length; row++) {
105
					buf.setLineInBandByte(d[iBand][row], row, iBand);
106
				}
107
			}
108
    	}
109
	}
110
	
111
}
0 112

  
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestReadTiffAndCompareData.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
10 8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 10
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
12 11
import org.gvsig.raster.cache.buffer.impl.BufferCacheManagerImpl;
13 12
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
......
69 68
		} catch (IOException e) {
70 69
			e.printStackTrace();
71 70
		}
72
		RasterReadOnlyBuffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 2571, 1942, 3, ds);
71
		RasterReadOnlyBuffer buf = new RasterReadOnlyBuffer(ds);
73 72
				
74 73
		for (int iBand = 0; iBand < buf.getBandCount(); iBand++) {
75 74
			for (int row = 0; row < buf.getHeight(); row++) {
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestAssignBand.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9 8
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 9
import org.gvsig.raster.cache.buffer.Buffer;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 11
import org.gvsig.raster.cache.buffer.exception.BandNotCompatibleException;
13
import org.gvsig.raster.cache.buffer.impl.RasterBuffer;
14 12
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
15 13
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
16 14
import org.gvsig.raster.cache.buffer.impl.io.GdalWrite;
......
48 46
			} catch (IOException e) {
49 47
				e.printStackTrace();
50 48
			}
51
			Buffer buf1 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
52
					input1.getWidth(), 
53
					input1.getHeight(), 
54
					input1.getBandCount(), 
55
					ds);
49
			Buffer buf1 = new RasterReadOnlyBuffer(ds);
56 50
			
57 51
			BufferDataSource ds1 = null;
58 52
			try {
......
60 54
			} catch (IOException e) {
61 55
				e.printStackTrace();
62 56
			}
63
			Buffer buf2 = new RasterReadOnlyBuffer(RasterBuffer.TYPE_BYTE, 
64
					input1.getWidth(), 
65
					input1.getHeight(), 
66
					input1.getBandCount(), 
67
					ds1);
57
			Buffer buf2 = new RasterReadOnlyBuffer(ds1);
68 58
			
69 59
			Band rb = buf2.getBand(2);
70 60
			try {
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestMultifile.java
1
package org.gvsig.raster.cache.buffer.impl.rocache;
2

  
3
import java.io.IOException;
4

  
5
import junit.framework.TestCase;
6

  
7
import org.gvsig.jgdal.GdalException;
8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
10
import org.gvsig.raster.cache.buffer.BufferParam;
11
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
12
import org.gvsig.raster.cache.buffer.impl.BufferParamImpl;
13
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
14
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
15
import org.gvsig.raster.cache.buffer.impl.io.GdalWrite;
16

  
17
/**
18
 * This test gets bands from a raster with the method getBufferWithOneBand() and compare
19
 * each band from original source with obtained bands 
20
 * @author Nacho Brodin (nachobrodin@gmail.com)
21
 */
22
public class TestMultifile extends TestCase {
23
	private String rasterIn = "./src/test/resources/image/001m09_1_0.tif";
24
	private String rasterOut1 = "/tmp/out-b1.tif";
25
	private String rasterOut2 = "/tmp/out-b2.tif";
26
	private String rasterOut3 = "/tmp/out-b3.tif";
27
	private int    x      = 200;
28
	private int    y      = 200;
29
	private int    w      = 800;
30
	private int    h      = 800;
31
	
32
	public void start() {
33
		this.setUp();
34
		this.testStack();
35
	}
36

  
37
	public void setUp() {
38
		System.err.println("ROCache TestGetBufferWithOneBand running...");
39
	}
40
	
41
	public void testStack() {
42
		long t1 = System.currentTimeMillis();
43
		GdalRead input = null;
44
		try {
45
			//Read input data
46
			input = new GdalRead(rasterIn);
47
			
48
			BufferDataSource ds = null;
49
			try {
50
				ds = new BufferDataSourceImpl(rasterIn);
51
			} catch (IOException e) {
52
				e.printStackTrace();
53
			}
54
			Buffer buf = new RasterReadOnlyBuffer(ds);
55
						
56
			Buffer b0 = buf.getBufferWithOneBand(0);
57
			Buffer b1 = buf.getBufferWithOneBand(1);
58
			Buffer b2 = buf.getBufferWithOneBand(2);
59
			
60
			//Write output file 
61
			GdalWrite out1 = new GdalWrite(rasterOut1, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY);
62
			out1.writeBands(b0.getBands());
63
			out1.close();
64
			
65
			GdalWrite out2 = new GdalWrite(rasterOut2, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY);
66
			out2.writeBands(b1.getBands());
67
			out2.close();
68
			
69
			GdalWrite out3 = new GdalWrite(rasterOut3, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY);
70
			out3.writeBands(b2.getBands());
71
			out3.close();
72
			
73
			BufferParam params = new BufferParamImpl(
74
					new String[]{rasterOut1, rasterOut2, rasterOut3}, 
75
					x, y, w, h, null);
76
			RasterReadOnlyBuffer multiband = new RasterReadOnlyBuffer(params);
77
						
78
			for (int row = 0; row < multiband.getHeight(); row++) {
79
				for (int col = 0; col < multiband.getWidth(); col++) {
80
					byte b_0 = multiband.getElemByte(row, col, 0);
81
					byte b_1 = multiband.getElemByte(row, col, 1);
82
					byte b_2 = multiband.getElemByte(row, col, 2);
83
					assertEquals(b_0, b0.getElemByte(row + y, col + x, 0));
84
					assertEquals(b_1, b1.getElemByte(row + y, col + x, 0));
85
					assertEquals(b_2, b2.getElemByte(row + y, col + x, 0));
86
				}
87
			}
88
						
89
			b0.free();
90
			b1.free();
91
			b2.free();
92
			buf.free();
93
				
94
		} catch (GdalException e) {
95
			e.printStackTrace();
96
		} catch (IOException e) {
97
			e.printStackTrace();
98
		} catch (OperationNotSupportedException e) {
99
			e.printStackTrace();
100
		}
101
		long t2 = System.currentTimeMillis();
102
		System.out.println("Tiempo ROCache TestGetBufferWithOneBand: " + (t2 - t1) + " milisegundos");
103
	}
104
	
105
}
0 106

  
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/AllTests.java
14 14
		suite.addTestSuite(TestSwapTwoBands.class);
15 15
		suite.addTestSuite(TestRemoveBand.class);
16 16
		suite.addTestSuite(TestGetBufferWithOneBand.class);
17
		suite.addTestSuite(TestReadWindowAndCompareData.class);
17 18
		suite.addTestSuite(TestAssignBand.class);
18 19
		suite.addTestSuite(TestCopyBand.class);
19 20
		suite.addTestSuite(TestAddBand.class);
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestGetBufferWithOneBand.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
10 8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 10
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
12 11
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
13 12
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
......
46 45
			} catch (IOException e) {
47 46
				e.printStackTrace();
48 47
			}
49
			Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
50
					input.getWidth(), 
51
					input.getHeight(), 
52
					input.getBandCount(), 
53
					ds);
48
			Buffer buf = new RasterReadOnlyBuffer(ds);
54 49
						
55 50
			Buffer b0 = buf.getBufferWithOneBand(0);
56 51
			Buffer b1 = buf.getBufferWithOneBand(1);
......
68 63
			GdalWrite out3 = new GdalWrite(rasterOut3, 1, input.getDataType(), input.getWidth(), input.getHeight(), GdalWrite.COLOR_INTERP_GRAY);
69 64
			out3.writeBands(b2.getBands());
70 65
			out3.close();
71
						
66
			
72 67
			for (int row = 0; row < buf.getHeight(); row++) {
73 68
				for (int col = 0; col < buf.getWidth(); col++) {
74 69
					byte b_0 = buf.getElemByte(row, col, 0);
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestSwapTwoBands.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8
import org.gvsig.jgdal.GdalException;
9 7
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 10
import org.gvsig.raster.cache.buffer.exception.WrongParameterException;
13 11
import org.gvsig.raster.cache.buffer.impl.BufferCacheManagerImpl;
14 12
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
15
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
16 13

  
17 14
/**
18 15
 * This test swap two bands of a raster and save the result in other file.
......
34 31
	
35 32
	public void testStack() {
36 33
		long t1 = System.currentTimeMillis();
37
		GdalRead input1 = null;
38 34
		try {
39 35
			//Reducimos el tama?o de la cache para una prueba con menos datos
40 36
			BufferCacheManagerImpl.cacheSize = 2;
41 37
			BufferCacheManagerImpl.pageSize = 0.2;
42 38
			
43
			//Read input data
44
			input1 = new GdalRead(rasterIn);
45
			
46 39
			BufferDataSource ds = null;
47 40
			try {
48 41
				ds = new BufferDataSourceImpl(rasterIn);
......
51 44
			}
52 45
						
53 46
			//Create Buffer
54
			Buffer buf1 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
55
					input1.getWidth(), 
56
					input1.getHeight(), 
57
					input1.getBandCount(), 
58
					ds);
47
			Buffer buf1 = new RasterReadOnlyBuffer(ds);
59 48

  
60
			Buffer buf2 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
61
					input1.getWidth(), 
62
					input1.getHeight(), 
63
					input1.getBandCount(), 
64
					ds);
49
			Buffer buf2 = new RasterReadOnlyBuffer(ds);
65 50

  
66 51
			try {
67 52
				buf2.swapBands(0, 2);
......
83 68
			
84 69
			buf1.free();
85 70
			buf2.free();
86
		} catch (GdalException e) {
87
			e.printStackTrace();
88 71
		} catch (IOException e) {
89 72
			e.printStackTrace();
90 73
		}
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestAddBand.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8
import org.gvsig.jgdal.GdalException;
9 7
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 10
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
13
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
14 11

  
15 12
/**
16 13
 * This test add a band in a raster of 3 bands. As a result of this test a raster
......
34 31
	
35 32
	public void testStack() {
36 33
		long t1 = System.currentTimeMillis();
37
		GdalRead input = null;
38 34
		try {
39 35
			//Read input data
40
			input = new GdalRead(rasterIn);
41 36
			
42 37
			BufferDataSource ds = null;
43 38
			try {
......
45 40
			} catch (IOException e) {
46 41
				e.printStackTrace();
47 42
			}
48
			Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
49
					input.getWidth(), 
50
					input.getHeight(), 
51
					input.getBandCount(), 
52
					ds);
43
			Buffer buf = new RasterReadOnlyBuffer(ds);
53 44
			buf.addBand(1);
54 45
						
55 46
			Band band = buf.getBand(1);
......
61 52
			}
62 53
			
63 54
			buf.free();
64
		} catch (GdalException e) {
65
			e.printStackTrace();
66 55
		} catch (IOException e) {
67 56
			e.printStackTrace();
68 57
		}
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestReplicateBand.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9 8
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 9
import org.gvsig.raster.cache.buffer.Buffer;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 11
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
13 12
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
14 13
import org.gvsig.raster.cache.buffer.impl.io.GdalWrite;
......
47 46
			} catch (IOException e) {
48 47
				e.printStackTrace();
49 48
			}
50
			Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
51
					input1.getWidth(), 
52
					input1.getHeight(), 
53
					input1.getBandCount(), 
54
					ds);
49
			Buffer buf = new RasterReadOnlyBuffer(ds);
55 50
						
56 51
			buf.replicateBand(0, 3);
57 52
			
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestCopyBand.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8
import org.gvsig.jgdal.GdalException;
9 7
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 10
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
13
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
14 11

  
15 12
/**
16 13
 * Copy the band 0 from a buffer over the band 2 in the same buffer using the
......
31 28
	
32 29
	public void testStack() {
33 30
		long t1 = System.currentTimeMillis();
34
		GdalRead input = null;
35 31

  
36 32
		try {			
37
			//Read input data
38
			input = new GdalRead(rasterIn);
39
			
40 33
			BufferDataSource ds = null;
41 34
			try {
42 35
				ds = new BufferDataSourceImpl(rasterIn);
43 36
			} catch (IOException e) {
44 37
				e.printStackTrace();
45 38
			}
46
			Buffer buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
47
					input.getWidth(), 
48
					input.getHeight(), 
49
					input.getBandCount(), 
50
					ds);
39
			Buffer buf = new RasterReadOnlyBuffer(ds);
51 40
			
52 41
			Band rb = buf.getBandCopy(0);
53 42
						
......
61 50
			}
62 51
			
63 52
			buf.free();
64
		} catch (GdalException e) {
65
			e.printStackTrace();
66 53
		} catch (IOException e) {
67 54
			e.printStackTrace();
68 55
		}
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestRemoveBand.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
10 8
import org.gvsig.raster.cache.buffer.Buffer;
9
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 10
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
12 11
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
13 12
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
......
56 55
			} catch (IOException e) {
57 56
				e.printStackTrace();
58 57
			}
59
			Buffer buf2 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
60
					input.getWidth(), 
61
					input.getHeight(), 
62
					input.getBandCount(), 
63
					ds);
58
			Buffer buf2 = new RasterReadOnlyBuffer(ds);
64 59

  
65 60
			//Remove bands
66 61
			buf2.removeBand(1);
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/rocache/TestSwapBands.java
1 1
package org.gvsig.raster.cache.buffer.impl.rocache;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9 8
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 9
import org.gvsig.raster.cache.buffer.Buffer;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 11
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
13 12
import org.gvsig.raster.cache.buffer.exception.WrongParameterException;
14 13
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
......
62 61
			} catch (IOException e) {
63 62
				e.printStackTrace();
64 63
			}
65
			RasterReadOnlyBuffer buf1 = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
66
					input1.getWidth(), 
67
					input1.getHeight(), 
68
					input1.getBandCount(), 
69
					ds);
64
			RasterReadOnlyBuffer buf1 = new RasterReadOnlyBuffer(ds);
70 65
			try {
71 66
				buf2.swapBands(new int[]{2, 0, 1});
72 67
				buf1.swapBands(new int[]{2, 0, 1});
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/test/java/org/gvsig/raster/cache/buffer/impl/TestStatistics.java
1 1
package org.gvsig.raster.cache.buffer.impl;
2 2

  
3
import java.awt.image.DataBuffer;
4 3
import java.io.IOException;
5 4

  
6 5
import junit.framework.TestCase;
7 6

  
8 7
import org.gvsig.jgdal.GdalException;
9 8
import org.gvsig.raster.cache.buffer.Band;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
11 9
import org.gvsig.raster.cache.buffer.Buffer;
10
import org.gvsig.raster.cache.buffer.BufferDataSource;
12 11
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
13 12
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
14 13
import org.gvsig.raster.cache.buffer.impl.io.GdalRead;
......
75 74
			} catch (IOException e) {
76 75
				e.printStackTrace();
77 76
			}
78
			buf = new RasterReadOnlyBuffer(DataBuffer.TYPE_BYTE, 
79
					input.getWidth(), 
80
					input.getHeight(), 
81
					input.getBandCount(), 
82
					ds);
77
			buf = new RasterReadOnlyBuffer(ds);
83 78
			buf.getStatistics().calculate();			
84 79
			test(buf);
85 80
			buf.free();
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/BufferCacheManagerImpl.java
79 79
					params.getBandCount());
80 80
		
81 81
		if (forceBuffer == BufferCacheManager.READ_ONLY_CACHE)
82
			return new RasterReadOnlyBuffer(params.getDataSource());
82
			return new RasterReadOnlyBuffer(params.getDataSource(), 
83
					params.getX(), 
84
					params.getY(), 
85
					params.getWidth(), 
86
					params.getHeight(),
87
					params.getBandList());
83 88
		
84 89
		if (forceBuffer == BufferCacheManager.MEMORY_BUFFER) {
85 90
			RasterMemoryBuffer b = new RasterMemoryBuffer(params.getDataType(), 
......
99 104
			
100 105
		if(forceBuffer == BufferCacheManager.DONT_FORCE) {
101 106
			if(params.getAccessType() == RasterBuffer.READ_ONLY) 
102
				return new RasterReadOnlyBuffer(params.getDataSource());
107
				return new RasterReadOnlyBuffer(params.getDataSource(), 
108
						params.getX(), 
109
						params.getY(), 
110
						params.getWidth(), 
111
						params.getHeight(),
112
						params.getBandList());
103 113
			
104 114
			
105 115
			if(params.getAccessType() == RasterBuffer.READ_WRITE || params.getAccessType() == RasterBuffer.READ_WRITE_CVERT) {
......
198 208
	
199 209
	/*
200 210
	 * (non-Javadoc)
211
	 * @see org.gvsig.raster.cache.buffer.BufferCacheManager#createBufferParams(java.lang.String, int, int, int, int)
212
	 */
213
	public BufferParam createBufferParams(String file, int x, int y, int w, int h, int[] bands) throws IOException {
214
		return new BufferParamImpl(file, x, y, w, h, bands);
215
	}
216
	
217
	/*
218
	 * (non-Javadoc)
219
	 * @see org.gvsig.raster.cache.buffer.BufferCacheManager#createBufferParams(java.lang.String, int, int, int, int)
220
	 */
221
	public BufferParam createBufferParams(String file, int x, int y, int w, int h) throws IOException {
222
		return new BufferParamImpl(file, x, y, w, h, null);
223
	}
224
	
225
	/*
226
	 * (non-Javadoc)
201 227
	 * @see org.gvsig.raster.cache.buffer.BufferCacheManager#createNoData(java.lang.Number, java.lang.Number, java.lang.String, int)
202 228
	 */
203 229
	public BufferNoData createNoData(Number noData, Number nativeNoData, String fileName, int bandCount) {
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/BufferParamImpl.java
1 1
package org.gvsig.raster.cache.buffer.impl;
2 2

  
3
import java.io.IOException;
4

  
3 5
import org.gvsig.raster.cache.buffer.Buffer;
6
import org.gvsig.raster.cache.buffer.BufferDataSource;
4 7
import org.gvsig.raster.cache.buffer.BufferParam;
8
import org.gvsig.raster.cache.buffer.impl.io.BufferDataSourceImpl;
9
import org.gvsig.raster.cache.buffer.impl.io.BufferMultiDataSourceImpl;
5 10

  
6 11
/**
7 12
 * Buffer parameters. This class contains generic parameters. 
......
13 18
public class BufferParamImpl extends PxTileImpl implements BufferParam {
14 19
	private static final long serialVersionUID = 1L;
15 20
	private int               accessType       = Buffer.READ_WRITE;
21
	private int[]             bands            = null;
16 22

  
17 23
	/**
18
	 * Set size and position values
24
	 * Constructor
19 25
	 * @param  w
20 26
	 *         Width
21 27
	 * @param  h
......
26 32
	}
27 33
	
28 34
	/**
35
	 * Constructor
36
	 * @param  file
37
	 *         file name
38
	 * @param  x
39
	 *         X position
40
	 * @param  y
41
	 *         Y position
42
	 * @param  w
43
	 *         Width
44
	 * @param  h
45
	 *         Height
46
	 * @param  bands
47
	 *         bands to load in the buffer
48
	 * @throws IOException 
49
	 */
50
	public BufferParamImpl(String file, int x, int y, int w, int h, int[] bands) throws IOException {
51
		super(x, y, w, h);
52
		PxTileImpl pxTile = new PxTileImpl(x, y, w, h);
53
		BufferDataSourceImpl datasource = new BufferDataSourceImpl(file, pxTile);
54
		setDataSource(datasource);
55
		if(bands == null) {
56
			int bandCount = getDataSource().getBandCount();
57
			this.bands = new int[bandCount];
58
			for (int i = 0; i < bandCount; i++) {
59
				this.bands[i] = i;
60
			}
61
		} else
62
			this.bands = bands;
63
		setBandCount(this.bands.length);
64
		accessType = Buffer.READ_ONLY;
65
	}
66
	
67
	/**
68
	 * Constructor for multifiles
69
	 * @param  file
70
	 *         file name
71
	 * @param  x
72
	 *         X position
73
	 * @param  y
74
	 *         Y position
75
	 * @param  w
76
	 *         Width in pixels
77
	 * @param  h
78
	 *         Height in pixels
79
	 * @param  bands
80
	 *         bands to load in the buffer. It can be null. In this case all bands will be used
81
	 * @throws IOException 
82
	 */
83
	public BufferParamImpl(String[] file, int x, int y, int w, int h, int[] bands) throws IOException {
84
		super(x, y, w, h);
85
		PxTileImpl pxTile = new PxTileImpl(x, y, w, h);
86
		BufferDataSource datasource = new BufferMultiDataSourceImpl(file, pxTile);
87
		setDataSource(datasource);
88
		
89
		if(bands == null) {
90
			int bandCount = getDataSource().getBandCount();
91
			this.bands = new int[bandCount];
92
			for (int i = 0; i < bandCount; i++) {
93
				this.bands[i] = i;
94
			}
95
		} else
96
			this.bands = bands;
97
		setBandCount(this.bands.length);
98
		accessType = Buffer.READ_ONLY;
99
	}
100
	
101
	/**
29 102
	 * Creates a parameter object for building a buffer. The buffer type is read-write.
30 103
	 * This type could be changed after the creation of a {@link BufferParam} object.
31 104
	 * @param  w
......
45 118
	}
46 119
	
47 120
	/*
121
	 * 
48 122
	 * (non-Javadoc)
49 123
	 * @see org.gvsig.raster.cache.buffer.BufferParam#setAccessType(int)
50 124
	 */
......
59 133
	public int getAccessType() {
60 134
		return accessType;
61 135
	}
136

  
137
	/*
138
	 * (non-Javadoc)
139
	 * @see org.gvsig.raster.cache.buffer.BufferParam#setFile(java.lang.String)
140
	 */
141
	public void setBandList(int[] bands) {
142
		this.bands = bands;
143
	}
144

  
145
	/*
146
	 * (non-Javadoc)
147
	 * @see org.gvsig.raster.cache.buffer.BufferParam#getFile()
148
	 */
149
	public int[] getBandList() {
150
		return bands;
151
	}
62 152
}
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/rocache/RasterReadOnlyBuffer.java
7 7
import org.gvsig.raster.cache.buffer.Band;
8 8
import org.gvsig.raster.cache.buffer.BufferDataSource;
9 9
import org.gvsig.raster.cache.buffer.Buffer;
10
import org.gvsig.raster.cache.buffer.BufferParam;
10 11
import org.gvsig.raster.cache.buffer.PxTile;
11 12
import org.gvsig.raster.cache.buffer.exception.BandNotCompatibleException;
12 13
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
......
61 62
	 * Altura de la p?gina de cada banda en l?neas.
62 63
	 */
63 64
	private int                              hPag             = 1;
64
	private BufferDataSource                dataSource       = null;
65
	private BufferDataSource                 dataSource       = null;
65 66
	private ArrayList<PxTile>                stripeList       = null;
66
	 
67
	
67 68
	/**
68 69
	 * Constructor. Asigna las variables de inicializaci?n y crea la estructura de 
69 70
	 * la cach? con los datos pasados.
......
76 77
	 * @throws NotSupportedExtensionException 
77 78
	 * @throws FileNotFoundException 
78 79
	 */
79
	public RasterReadOnlyBuffer(int dataType, int width, int height, int nBand, BufferDataSource dataSource) {
80
		super(0, 0, width, height, dataType, nBand);
80
	public RasterReadOnlyBuffer(BufferDataSource dataSource, int x, int y, int w, int h, int[] bands) {
81
		super(x, y, w, h, dataSource.getDataType(), bands.length);
81 82
		this.dataSource = dataSource;
82
		
83 83
		stripeList = new ArrayList<PxTile>();
84
		createStructure();
84
		createStructure(bands);
85 85
	}
86 86
	
87 87
	/**
88 88
	 * Constructor. Asigna las variables de inicializaci?n y crea la estructura de 
89 89
	 * la cach? con los datos pasados.
90
	 * @param  datasource
91
	 *         Source of data
92
	 * @param  despX
93
	 *         Step from the upper left corner in horizontal
94
	 * @param  despY
95
	 *         Step from the upper left corner in vertical
96
	 * @throws RasterDriverException 
97
	 * @throws NotSupportedExtensionException 
98
	 * @throws FileNotFoundException 
90
	 * @param dataSource 
91
	 *        Datasource
92
	 * @param bands 
99 93
	 */
100
	/*public RasterReadOnlyBuffer(IBufferDataSource dataSource, int despX, int despY) {
101
		super(0, 0, 
102
				dataSource.getWidth() - despX, 
103
				dataSource.getHeight() - despY, 
94
	public RasterReadOnlyBuffer(BufferDataSource dataSource, int[] bands) {
95
		super(  0, 
96
				0, 
97
				dataSource.getWidth(), 
98
				dataSource.getHeight(), 
104 99
				dataSource.getDataType(), 
105
				dataSource.getBandCount());
100
				bands.length);
106 101
		this.dataSource = dataSource;
107
		
108 102
		stripeList = new ArrayList<PxTile>();
109
		createStructure();
110
	}*/
111
		
103
		createStructure(bands);
104
	}
105
	
112 106
	/**
113 107
	 * Constructor. Asigna las variables de inicializaci?n y crea la estructura de 
114 108
	 * la cach? con los datos pasados.
115
	 * @param  datasource
116
	 *         Source of data
117
	 * @throws DriverException 
118
	 * @throws NotSupportedExtensionException 
119
	 * @throws FileNotFoundException 
109
	 * @param dataSource 
110
	 *        Datasource
120 111
	 */
121 112
	public RasterReadOnlyBuffer(BufferDataSource dataSource) {
122
		super(0, 
113
		super(  0, 
123 114
				0, 
124 115
				dataSource.getWidth(), 
125 116
				dataSource.getHeight(), 
126 117
				dataSource.getDataType(), 
127 118
				dataSource.getBandCount());
128 119
		this.dataSource = dataSource;
129
		
130 120
		stripeList = new ArrayList<PxTile>();
131
		createStructure();
121
		int[] bands = new int[dataSource.getBandCount()];
122
		for (int i = 0; i < bands.length; i++) {
123
			bands[i] = i;
124
		}
125
		createStructure(bands);
132 126
	}
133 127
	
134 128
	/**
129
	 * Constructor. Asigna las variables de inicializaci?n y crea la estructura de 
130
	 * la cach? con los datos pasados.
131
	 * @param dataSource 
132
	 *        Datasource
133
	 */
134
	public RasterReadOnlyBuffer(BufferParam param) {
135
		super(  param.getX(), 
136
				param.getY(), 
137
				param.getWidth(), 
138
				param.getHeight(), 
139
				param.getDataSource().getDataType(), 
140
				param.getBandCount());
141
		this.dataSource = param.getDataSource();
142
		stripeList = new ArrayList<PxTile>();
143
		createStructure(param.getBandList());
144
	}
145
	
146
	/**
135 147
	 * 
136 148
	 */
137
	private void createStructure() {
149
	private void createStructure(int[] bands) {
138 150
		//Pasamos los megas a bytes
139 151
		double pageSize = BufferCacheManagerImpl.pageSize * 1048576;
140 152
		
......
176 188
		int fullPages = (int)Math.floor((double)getHeight() / (double)hPag);
177 189
		
178 190
		//Calculamos la lista de franjas con sus coordenadas
179
		int y = 0; 
191
		int y = 0;
192
		int x = 0;
180 193
		for (int i = 0; i < fullPages; i++) {
181
			stripeList.add(new PxTileImpl(0, y, getWidth(), hPag));
194
			stripeList.add(new PxTileImpl(x, y, getWidth(), hPag));
182 195
			y += hPag;
183 196
		}
184 197
		offset = hPag - 1;
185 198
		
186 199
		int hLastPage = getHeight() - (fullPages * hPag);
187
		for (int i = fullPages; i < nTotalPags; i++) 
188
			stripeList.add(new PxTileImpl(0, y, getWidth(), hLastPage));
200
		for (int i = fullPages; i < nTotalPags; i++)
201
			stripeList.add(new PxTileImpl(x, y, getWidth(), hLastPage));
189 202
		
190 203
		//Creamos las p?ginas en memoria
191 204
		//createMemoryPages();
192
		createBands();
205
		createBands(bands);
193 206
	}
194 207
		
195
	private void createBands() {
208
	private void createBands(int[] bands) {
196 209
		bandList = new ArrayList<ReadOnlyCacheBand>();
197
		for (int i = 0; i < getBandCount(); i++) {
210
		for (int i = 0; i < bands.length; i++) {
198 211
			BufferDataSource ds = dataSource.clone();
199
			ds.setSelectedBand(i);
212
			ds.setSelectedBand(bands[i]);
200 213
			switch (getDataType()) {
201 214
			case RasterBuffer.TYPE_BYTE:
202
				bandList.add(new ByteBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
215
				bandList.add(new ByteBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
203 216
				break;
204 217
			case RasterBuffer.TYPE_SHORT:
205
				bandList.add(new ShortBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
218
				bandList.add(new ShortBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
206 219
				break;
207 220
			case RasterBuffer.TYPE_INT:
208
				bandList.add(new IntBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
221
				bandList.add(new IntBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
209 222
				break;
210 223
			case RasterBuffer.TYPE_FLOAT:
211
				bandList.add(new FloatBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
224
				bandList.add(new FloatBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
212 225
				break;
213 226
			case RasterBuffer.TYPE_DOUBLE:
214
				bandList.add(new DoubleBand(stripeList, ds, offset, bitsPag, i, getWidth(), getHeight()));
227
				bandList.add(new DoubleBand(stripeList, ds, offset, bitsPag, bands[i], getWidth(), getHeight()));
215 228
				break;
216 229
			}
217 230
		}
......
767 780
	 * @see org.gvsig.raster.buffer.IRasterBuffer#getBufferWithOneBand(int)
768 781
	 */
769 782
	public Buffer getBufferWithOneBand(int nBand) throws IOException {
770
		BufferDataSource ds = ((ReadOnlyCacheBand)getBand(nBand)).dataSource.clone();
771
		RasterReadOnlyBuffer result = new RasterReadOnlyBuffer(getDataType(), getWidth(), getHeight(), getBandCount(), ds);
772
		result.bandList.clear();
773
		result.setBandCount(1);
774
		switch (getDataType()) {
775
		case RasterBuffer.TYPE_BYTE:
776
			ByteBand bb = new ByteBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight());
777
			result.bandList.add(bb);
778
			break;
779
		case RasterBuffer.TYPE_SHORT:
780
			ShortBand sb = new ShortBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight());
781
			result.bandList.add(sb);
782
			break;
783
		case RasterBuffer.TYPE_INT:
784
			IntBand ib = new IntBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight());
785
			result.bandList.add(ib);
786
			break;
787
		case RasterBuffer.TYPE_FLOAT:
788
			FloatBand fb = new FloatBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight());
789
			result.bandList.add(fb);
790
			break;
791
		case RasterBuffer.TYPE_DOUBLE:
792
			DoubleBand db = new DoubleBand(stripeList, ds, offset, bitsPag, nBand, getWidth(), getHeight());
793
			result.bandList.add(db);
794
			break;
795
		}
796
		return result;
783
		int[] bands = new int[]{nBand};
784
		return new RasterReadOnlyBuffer(this.dataSource.clone(), bands);
797 785
	}
798 786
	
799 787
	/*
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/PxTileImpl.java
14 14
	private static final long    serialVersionUID = 1L;
15 15
	private String               reference        = null;
16 16
	private Rectangle2D          selection        = null;
17
	private BufferDataSource    dataSource       = null;
17
	private BufferDataSource[]   dataSource       = null;
18 18
	
19 19
	/**
20 20
	 * Set size and position values
......
86 86
	 * @param dataSource
87 87
	 */
88 88
	public void setDataSource(BufferDataSource dataSource) {
89
		this.dataSource = new BufferDataSource[]{dataSource};
90
	}
91
	
92
	/**
93
	 * Set the data source
94
	 * @param dataSource
95
	 */
96
	public void setDataSource(BufferDataSource[] dataSource) {
89 97
		this.dataSource = dataSource;
90 98
	}
91 99

  
......
94 102
	 * @return
95 103
	 */
96 104
	public BufferDataSource getDataSource() {
105
		if(dataSource != null && dataSource.length >= 1)
106
			return dataSource[0];
107
		return null;
108
	}
109
	
110
	/**
111
	 * Get the data source
112
	 * @return
113
	 */
114
	public BufferDataSource[] getDataSourceList() {
97 115
		return dataSource;
98 116
	}
99 117
	
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/io/BufferDataSourceImpl.java
20 20
import org.gvsig.raster.cache.buffer.impl.RasterBase;
21 21

  
22 22
/**
23
 * Data Server for read only buffers. This server only read tiff data.
23
 * Data Server for read only buffers.
24 24
 * 
25
 * 02/11/2008
26 25
 * @author Nacho Brodin nachobrodin@gmail.com
27 26
 */
28 27
public class BufferDataSourceImpl extends RasterBase implements BufferDataSource {
......
49 48
		}
50 49
		super.setWidth(reader.getWidth());
51 50
		super.setHeight(reader.getHeight());
52
		super.setDataType(reader.getDataType());
51
		super.setDataType(reader.getRasterBufTypeFromGdalType(reader.getDataType()));
53 52
		super.setBandCount(reader.getBandCount());
54 53
		window = new PxTileImpl(0, 0, reader.getWidth(), reader.getHeight());
55 54
	}
......
101 100
	}
102 101
		
103 102
	/*
104
	 *  (non-Javadoc)
105
	 * @see org.gvsig.raster.dataaccess.cache.ICacheDataSource#getPath()
103
	 * (non-Javadoc)
104
	 * @see org.gvsig.raster.cache.buffer.BufferDataSource#getPath()
106 105
	 */
107
	public String getPath() {
108
		return path;
106
	public String[] getPath() {
107
		return new String[]{path};
109 108
	}
110 109
	
111 110
	/*
112
	 *  (non-Javadoc)
113
	 * @see org.gvsig.raster.dataaccess.cache.ICacheDataSource#setPath(java.lang.String)
111
	 * (non-Javadoc)
112
	 * @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String[])
114 113
	 */
114
	public void setPath(String[] path) {
115
		if(path != null && path.length >= 1)
116
			this.path = path[0];
117
	}
118
	
119
	/*
120
	 * (non-Javadoc)
121
	 * @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String)
122
	 */
115 123
	public void setPath(String path) {
116 124
		this.path = path;
117 125
	}
org.gvsig.raster.cache/trunk/org.gvsig.raster.cache/org.gvsig.raster.cache.lib.impl/src/main/java/org/gvsig/raster/cache/buffer/impl/io/BufferMultiDataSourceImpl.java
1
package org.gvsig.raster.cache.buffer.impl.io;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.jgdal.GdalException;
6
import org.gvsig.raster.cache.buffer.Buffer;
7
import org.gvsig.raster.cache.buffer.BufferDataSource;
8
import org.gvsig.raster.cache.buffer.PxTile;
9
import org.gvsig.raster.cache.buffer.exception.OperationNotSupportedException;
10
import org.gvsig.raster.cache.buffer.impl.PxTileImpl;
11

  
12
/**
13
 * Data Server for read only buffers. 
14
 * 
15
 * @author Nacho Brodin nachobrodin@gmail.com
16
 */
17
public class BufferMultiDataSourceImpl extends BufferDataSourceImpl implements BufferDataSource {
18
	private GdalRead[]      reader        = null;
19
	private String[]        path          = null;
20
	private PxTile          window        = null;  
21
	private int             selectedBand  = -1;
22
		
23
	/**
24
	 * This constructor is useful to use this class with a image reference.
25
	 * Typically ReadOnlyCache   
26
	 * @param  path
27
	 *         Path to the file
28
	 * @throws IOException
29
	 */
30
	public BufferMultiDataSourceImpl(String[] path) throws IOException {
31
		this.path = path;
32
		reader = new GdalRead[path.length];
33
		int bandCount = 0;
34
		
35
		try {
36
			for (int i = 0; i < path.length; i++) {
37
				reader[i] = new GdalRead(path[i]);
38
				bandCount += reader[i].getBandCount();
39
			}
40
		} catch (GdalException e) {
41
			throw new IOException();
42
		}
43
		super.setWidth(reader[0].getWidth());
44
		super.setHeight(reader[0].getHeight());
45
		super.setDataType(reader[0].getRasterBufTypeFromGdalType(reader[0].getDataType()));
46
		super.setBandCount(bandCount);
47
		window = new PxTileImpl(0, 0, reader[0].getWidth(), reader[0].getHeight());
48
	}
49
	
50
	/**
51
	 * This constructor is useful to use this class with a image reference
52
	 * .Typically ReadOnlyCache. 
53
	 * @param  path
54
	 *         Path to the file
55
	 * @throws IOException
56
	 */
57
	public BufferMultiDataSourceImpl(String[] path, PxTileImpl window) throws IOException {
58
		this.path = path;
59
		this.window = window;
60
		reader = new GdalRead[path.length];
61
		int bandCount = 0;
62
		
63
		try {
64
			for (int i = 0; i < path.length; i++) {
65
				reader[i] = new GdalRead(path[i]);
66
				bandCount += reader[i].getBandCount();
67
			}
68
		} catch (GdalException e) {
69
			throw new IOException();
70
		}
71
		super.setWidth(window.getWidth());
72
		super.setHeight(window.getHeight());
73
		super.setDataType(reader[0].getRasterBufTypeFromGdalType(reader[0].getDataType()));
74
		super.setBandCount(bandCount);
75
	}
76
	
77
	/*
78
	 * (non-Javadoc)
79
	 * @see org.cachete.buffer.IBufferDataSource#close()
80
	 */
81
	public void close() throws IOException {
82
		for (int i = 0; i < reader.length; i++) {
83
			if(reader[i] != null)
84
				try {
85
					reader[i].close();
86
					reader[i] = null;
87
				} catch (GdalException e) {
88
					throw new IOException();
89
				}			
90
		}
91
	}
92
		
93
	/*
94
	 * (non-Javadoc)
95
	 * @see org.gvsig.raster.cache.buffer.BufferDataSource#getPath()
96
	 */
97
	public String[] getPath() {
98
		return path;
99
	}
100
	
101
	/*
102
	 * (non-Javadoc)
103
	 * @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String[])
104
	 */
105
	public void setPath(String[] path) {
106
		this.path = path;
107
	}
108
	
109
	/*
110
	 * (non-Javadoc)
111
	 * @see org.gvsig.raster.cache.buffer.BufferDataSource#setPath(java.lang.String)
112
	 */
113
	public void setPath(String path) {
114
		this.path = new String[]{path};
115
	}
116
	
117
	/*
118
	 * (non-Javadoc)
119
	 * @see org.gvsig.raster.buffer.rocache.ICacheDataSource#loadSelectedBand(org.gvsig.raster.buffer.IRasterBuffer, org.gvsig.raster.buffer.rocache.ReadOnlyStripe)
120
	 */
121
	public void loadSelectedBand(Buffer rb, PxTile stripe) throws IOException, InterruptedException, OperationNotSupportedException {
122
		loadPage(rb, stripe, selectedBand);
123
	}
124

  
125
	/*
126
	 * (non-Javadoc)
127
	 * @see org.gvsig.raster.buffer.rocache.ICacheDataSource#loadPage(org.gvsig.raster.buffer.IRasterBuffer, org.gvsig.raster.buffer.rocache.ReadOnlyStripe)
128
	 */
129
	public void loadPage(Buffer rb, PxTile stripe) throws IOException, InterruptedException, OperationNotSupportedException {
130
		try {
131
			int dataType = reader[0].getDataType();
132
			
133
			if (dataType == GdalRead.GDT_Byte) {
134
				
135
				int last = 0;				
136
				byte[][][] buf = new byte[rb.getBandCount()][][];
137
				for (int i = 0; i < reader.length; i++) {
138
					Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight());
139
					byte[][][] b = (byte[][][])dataObj;
140
					int k = 0;
141
					for (int j = last; j < b.length; j++) {
142
						buf[j] = b[k];
143
						k ++;
144
					}
145
					last += b.length; 
146
				}
147
				
148
				for (int iBand = 0; iBand < buf.length; iBand++) 
149
					for (int iLine = 0; iLine < buf[iBand].length; iLine++) 
150
						for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) 
151
							rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]);
152
										
153
			} else if (dataType == GdalRead.GDT_CInt16 || dataType == GdalRead.GDT_Int16  || dataType == GdalRead.GDT_UInt16) {
154

  
155
				int last = 0;				
156
				short[][][] buf = new short[rb.getBandCount()][][];
157
				for (int i = 0; i < reader.length; i++) {
158
					Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight());
159
					short[][][] b = (short[][][])dataObj;
160
					int k = 0;
161
					for (int j = last; j < b.length; j++) {
162
						buf[j] = b[k];
163
						k ++;
164
					}
165
					last += b.length; 
166
				}
167
				
168
				for (int iBand = 0; iBand < buf.length; iBand++) 
169
					for (int iLine = 0; iLine < buf[iBand].length; iLine++) 
170
						for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) 
171
							rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]);
172
							
173
			} else if (dataType == GdalRead.GDT_CInt32 || dataType == GdalRead.GDT_Int32  || dataType == GdalRead.GDT_UInt32) {
174

  
175
				int last = 0;				
176
				int[][][] buf = new int[rb.getBandCount()][][];
177
				for (int i = 0; i < reader.length; i++) {
178
					Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight());
179
					int[][][] b = (int[][][])dataObj;
180
					int k = 0;
181
					for (int j = last; j < b.length; j++) {
182
						buf[j] = b[k];
183
						k ++;
184
					}
185
					last += b.length; 
186
				}
187
				
188
				for (int iBand = 0; iBand < buf.length; iBand++) 
189
					for (int iLine = 0; iLine < buf[iBand].length; iLine++) 
190
						for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) 
191
							rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]);
192
							
193
			} else if(dataType == GdalRead.GDT_Float32 || dataType == GdalRead.GDT_CFloat32) {
194

  
195
				int last = 0;				
196
				float[][][] buf = new float[rb.getBandCount()][][];
197
				for (int i = 0; i < reader.length; i++) {
198
					Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight());
199
					float[][][] b = (float[][][])dataObj;
200
					int k = 0;
201
					for (int j = last; j < b.length; j++) {
202
						buf[j] = b[k];
203
						k ++;
204
					}
205
					last += b.length; 
206
				}
207
				
208
				for (int iBand = 0; iBand < buf.length; iBand++) 
209
					for (int iLine = 0; iLine < buf[iBand].length; iLine++) 
210
						for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) 
211
							rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]);
212
							
213
			} else if(dataType == GdalRead.GDT_Float64 || dataType == GdalRead.GDT_CFloat64) {
214

  
215
				int last = 0;				
216
				double[][][] buf = new double[rb.getBandCount()][][];
217
				for (int i = 0; i < reader.length; i++) {
218
					Object dataObj = reader[0].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight());
219
					double[][][] b = (double[][][])dataObj;
220
					int k = 0;
221
					for (int j = last; j < b.length; j++) {
222
						buf[j] = b[k];
223
						k ++;
224
					}
225
					last += b.length; 
226
				}
227
				
228
				for (int iBand = 0; iBand < buf.length; iBand++) 
229
					for (int iLine = 0; iLine < buf[iBand].length; iLine++) 
230
						for (int iColumn = 0; iColumn < buf[iBand][iLine].length; iColumn++) 
231
							rb.setElem(iLine, iColumn, iBand, buf[iBand][iLine][iColumn]);
232
							
233
			}
234
		} catch (GdalException e) {
235
			throw new IOException("Error reading block.");
236
		}
237
	}
238
	
239
	/*
240
	 * (non-Javadoc)
241
	 * @see org.fv.raster.buffer.rocache.ICacheDataSource#loadPage(org.fv.raster.buffer.IRasterBuffer, org.fv.raster.buffer.rocache.ReadOnlyStripe, int)
242
	 */
243
	public void loadPage(Buffer rb, PxTile stripe, int iBand) throws IOException, InterruptedException, OperationNotSupportedException {
244
		if(rb.getBandCount() != 1)
245
			throw new IOException("Wrong buffer");
246
		
247
		int dataType = reader[0].getDataType();
248
		int readerNum = 0;
249
		int bandInsideReader = 0;
250
		int accum = 0;
251
		for (int i = 0; i < reader.length; i++) {
252
			bandInsideReader = iBand - accum;
253
			accum += reader[i].getBandCount();
254
			if(accum > iBand) {
255
				readerNum = i;
256
				break;
257
			}
258
		}
259
		
260
		try {
261
			Object dataObj = reader[readerNum].readBlock((int)stripe.getX() + window.getX(), (int)stripe.getY() + window.getY(), (int)stripe.getWidth(), (int)stripe.getHeight(), bandInsideReader);
262
			if (dataType == GdalRead.GDT_Byte) {
263
				byte[][] buf = (byte[][])dataObj;
264
				for (int iLine = 0; iLine < buf.length; iLine++) 
265
					for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) 
266
						rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]);
267

  
268
			} else if (dataType == GdalRead.GDT_CInt16 || dataType == GdalRead.GDT_Int16  || dataType == GdalRead.GDT_UInt16) {
269
				short[][] buf = (short[][])dataObj;
270
				for (int iLine = 0; iLine < buf.length; iLine++) 
271
					for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) 
272
						rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]);
273

  
274
			} else if (dataType == GdalRead.GDT_CInt32 || dataType == GdalRead.GDT_Int32  || dataType == GdalRead.GDT_UInt32) {
275
				int[][] buf = (int[][])dataObj;
276
				for (int iLine = 0; iLine < buf.length; iLine++) 
277
					for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) 
278
						rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]);
279

  
280
			} else if(dataType == GdalRead.GDT_Float32 || dataType == GdalRead.GDT_CFloat32) {
281
				float[][] buf = (float[][])dataObj;
282
				for (int iLine = 0; iLine < buf.length; iLine++) 
283
					for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) 
284
						rb.setElem(iLine, iColumn, iBand, buf[iLine][iColumn]);
285

  
286
			} else if(dataType == GdalRead.GDT_Float64 || dataType == GdalRead.GDT_CFloat64) {
287
				double[][] buf = (double[][])dataObj;
288
				for (int iLine = 0; iLine < buf.length; iLine++) 
289
					for (int iColumn = 0; iColumn < buf[iLine].length; iColumn++) 
290
						rb.setElem(iLine, iColumn, 0, buf[iLine][iColumn]);
291

  
292
			}
293
		} catch (GdalException e) {
294
			throw new IOException("Error reading block.");
295
		}
296
	}
297
	
298
	/* (non-Javadoc)
299
	 * @see org.gvsig.fmap.dataaccess.cache.ICacheDataSource#loadPage(int, org.gvsig.fmap.dataaccess.cache.PageBuffer)
300
	 */
301
	public void loadPage(Buffer buf, String inFileName) {
302
		for (int i = 0; i < buf.getBandCount(); i++) 
303
			loadBand(buf.getBand(i), inFileName + i);
304
	}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff