Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.file / org.gvsig.fmap.dal.file.bsq / src / main / java / org / gvsig / fmap / dal / file / bsq / BSQBandPageManager.java @ 43876

History | View | Annotate | Download (3.74 KB)

1

    
2
package org.gvsig.fmap.dal.file.bsq;
3

    
4
import java.io.File;
5
import java.io.IOException;
6
import java.io.RandomAccessFile;
7
import java.nio.Buffer;
8
import java.nio.ByteBuffer;
9
import java.nio.ByteOrder;
10
import java.nio.DoubleBuffer;
11
import java.nio.FloatBuffer;
12
import java.nio.IntBuffer;
13
import java.nio.ShortBuffer;
14
import org.apache.commons.io.IOUtils;
15
import org.gvsig.raster.lib.buffer.api.BandInfo;
16
import org.gvsig.raster.lib.buffer.api.BandPageManager;
17
import org.gvsig.raster.lib.buffer.api.BufferLocator;
18
import org.gvsig.raster.lib.buffer.api.BufferManager;
19
import org.gvsig.tools.dispose.impl.AbstractDisposable;
20
import org.gvsig.tools.exception.BaseException;
21

    
22
public class BSQBandPageManager extends AbstractDisposable implements BandPageManager {
23

    
24
    private RandomAccessFile  raf;
25
    private final int rows;
26
    private final int columns;
27
    private final int dataType;
28
    private final File file;
29
    private final long startpos;
30
    private final ByteOrder byteOrder;
31

    
32
    /**
33
     * @param file
34
     * @param startpos
35
     * @param rows
36
     * @param columns
37
     * @param dataType
38
     * @param byteOrder
39
     * @throws IOException
40
     */
41
    public BSQBandPageManager(File file, long startpos, int rows, int columns, int dataType, ByteOrder  byteOrder) throws IOException {
42
        this.rows = rows;
43
        this.columns = columns;
44
        this.dataType = dataType;
45
        this.file = file;
46
        this.startpos = startpos;
47
        this.byteOrder = byteOrder;
48

    
49
        this.raf = new RandomAccessFile(this.file, "r");
50
        // BufferManager bufferManager = BufferLocator.getBufferManager();
51
        //raf.setLength(rows*columns*bufferManager.getDataTypeSize(dataType));
52

    
53
    }
54

    
55
    @Override
56
    public void load(Buffer buffer, int row, int rows, int dataType) throws IOException {
57

    
58
        long pos = row*this.columns + this.startpos;
59
        raf.seek(pos);
60
        BufferManager bufferManager = BufferLocator.getBufferManager();
61
        int dataTypeSize = bufferManager.getDataTypeSize(dataType);
62
        int elements = buffer.capacity();
63
        
64
        ByteBuffer byteBuffer = ByteBuffer.allocate(elements * dataTypeSize);
65
        byteBuffer.order(this.byteOrder);
66
        raf.read(byteBuffer.array());
67

    
68
        buffer.rewind();
69
        byteBuffer.rewind();
70

    
71
        switch (dataType) {
72
        case BufferManager.TYPE_BYTE:
73
            ((ByteBuffer) buffer).put(byteBuffer);
74
            break;
75
        case BufferManager.TYPE_SHORT:
76
        case BufferManager.TYPE_USHORT:
77
            for( int element =0 ; element<elements ; element++ ) {
78
                ((ShortBuffer) buffer).put(byteBuffer.getShort());
79
            }
80
            break;
81
        case BufferManager.TYPE_INT:
82
            for( int element =0 ; element<elements ; element++ ) {
83
                ((IntBuffer) buffer).put(byteBuffer.getInt());
84
            }
85
            break;
86
        case BufferManager.TYPE_FLOAT:
87
            for( int element=0 ; element<elements ; element++ ) {
88
                ((FloatBuffer) buffer).put(byteBuffer.getFloat());
89
            }
90
            break;
91

    
92
        case BufferManager.TYPE_DOUBLE:
93
            for( int element=0 ; element<elements ; element++ ) {
94
                ((DoubleBuffer) buffer).put(byteBuffer.getDouble());
95
            }
96
            break;
97

    
98
        default:
99
            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
100
        }
101
    }
102

    
103
    @Override
104
    public void save(Buffer buffer, int row, int rows, int dataType) throws IOException {
105

    
106
    }
107

    
108
    @Override
109
    public boolean isSupportedSave() {
110
        return false;
111
    }
112

    
113
    @Override
114
    public BandInfo getBandInfo() {
115
        return null;
116
    }
117

    
118
    @Override
119
    protected void doDispose() throws BaseException {
120
        IOUtils.closeQuietly(this.raf);
121
        this.raf = null;
122
    }
123
}