Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.library / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer.impl / src / main / java / org / gvsig / raster / lib / buffer / impl / SimpleBandTileManager.java @ 43803

History | View | Annotate | Download (5.81 KB)

1
package org.gvsig.raster.lib.buffer.impl;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.io.RandomAccessFile;
6
import java.nio.Buffer;
7
import java.nio.ByteBuffer;
8
import java.nio.DoubleBuffer;
9
import java.nio.FloatBuffer;
10
import java.nio.IntBuffer;
11
import java.nio.ShortBuffer;
12

    
13
import org.gvsig.raster.lib.buffer.api.Band;
14
import org.gvsig.raster.lib.buffer.api.BandInfo;
15
import org.gvsig.raster.lib.buffer.api.BandTileManager;
16
import org.gvsig.raster.lib.buffer.api.BufferLocator;
17
import org.gvsig.raster.lib.buffer.api.BufferManager;
18
import org.gvsig.raster.lib.buffer.api.TileStruct;
19
import org.gvsig.tools.dispose.impl.AbstractDisposable;
20
import org.gvsig.tools.exception.BaseException;
21

    
22

    
23
/**
24
 * @author fdiaz
25
 *
26
 */
27
@Deprecated
28
public class SimpleBandTileManager extends AbstractDisposable implements BandTileManager {
29

    
30
    private RandomAccessFile  raf;
31
    private int rows;
32
    private int columns;
33
    private int dataType;
34
    private File file;
35

    
36
    private int rowsPerTile;
37
    private int columnsPerTile;
38

    
39
    /**
40
     * @param file
41
     * @param rows
42
     * @param columns
43
     * @param dataType
44
     * @throws IOException
45
     */
46
    public SimpleBandTileManager(File file, int rows, int columns, int dataType) throws IOException {
47
        this.rows = rows;
48
        this.columns = columns;
49
        this.dataType = dataType;
50
        this.file = file;
51
        if(this.file==null){
52
            this.file = File.createTempFile("bandTileManager", "tmp");
53
        }
54

    
55
        this.raf = new RandomAccessFile(this.file, "rw");
56
        BufferManager bufferManager = BufferLocator.getBufferManager();
57
        int dataTypeSize=bufferManager.getDataTypeSize(dataType);
58
        raf.setLength(rows*columns*dataTypeSize);
59

    
60
        this.rowsPerTile=256;
61
        this.columnsPerTile=256;
62
    }
63

    
64
    public Band load(int row, int col, int dataType) throws IOException {
65
        //FIXME: Comentarizado para que me deje compilar (no s? si es necesaria esta clase
66

    
67
//        //TODO review (un)used params
68
//        int pos = row*this.columns+col;
69
//        raf.seek(pos);
70
//        BufferManager bufferManager = BufferLocator.getBufferManager();
71
//        int dataTypeSize = bufferManager.getDataTypeSize(dataType);
72
//        byte[] byteArray = new byte[buffer.capacity() * dataTypeSize];
73
//        raf.read(byteArray);
74
//        buffer.rewind();
75
//
76
//        switch (dataType) {
77
//        case BufferManager.TYPE_BYTE:
78
//            //FIXME: Elegir cual de las dos siguientes maneras de hacerlo es la id?nea
79
//
80
//            ((ByteBuffer) buffer).put(byteArray, 0, byteArray.length);
81
////            System.arraycopy(byteArray, 0, ((ByteBuffer) buffer).array(), 0, byteArray.length);
82
//            break;
83
//        case BufferManager.TYPE_SHORT:
84
//        case BufferManager.TYPE_USHORT:
85
//            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
86
//                ((ShortBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
87
//            }
88
//            break;
89
//        case BufferManager.TYPE_INT:
90
//            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
91
//                ((IntBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
92
//            }
93
//            break;
94
//        case BufferManager.TYPE_FLOAT:
95
//            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
96
//                ((FloatBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
97
//            }
98
//            break;
99
//
100
//        case BufferManager.TYPE_DOUBLE:
101
//            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
102
//                ((DoubleBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
103
//            }
104
//            break;
105
//
106
//        default:
107
//            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
108
//        }
109
        return null;
110

    
111
    }
112

    
113
    public void save(Buffer buffer, int row, int rows, int col, int cols, int dataType) throws IOException {
114
        //TODO review (un)used params
115
        int pos = row*this.columns+col;
116
        raf.seek(pos);
117

    
118
        BufferManager bufferManager = BufferLocator.getBufferManager();
119
        ByteBuffer byteBuffer = ByteBuffer.allocate(buffer.capacity() * bufferManager.getDataTypeSize(dataType));
120
        switch (dataType) {
121
        case BufferManager.TYPE_BYTE:
122
            byteBuffer.put(((ByteBuffer)buffer).array());
123
            break;
124
        case BufferManager.TYPE_SHORT:
125
        case BufferManager.TYPE_USHORT:
126
            ShortBuffer byteAsShortBuffer = byteBuffer.asShortBuffer();
127
            byteAsShortBuffer.put((short[]) buffer.array());
128
            break;
129
        case BufferManager.TYPE_INT:
130
            IntBuffer byteAsIntBuffer = byteBuffer.asIntBuffer();
131
            byteAsIntBuffer.put((int[]) buffer.array());
132
            break;
133
        case BufferManager.TYPE_FLOAT:
134
            FloatBuffer byteAsFloatBuffer = byteBuffer.asFloatBuffer();
135
            byteAsFloatBuffer.put((float[]) buffer.array());
136
            break;
137
        case BufferManager.TYPE_DOUBLE:
138
            DoubleBuffer byteAsDoubleBuffer = byteBuffer.asDoubleBuffer();
139
            byteAsDoubleBuffer.put((double[]) buffer.array());
140
            break;
141
        default:
142
            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
143
        }
144
        raf.write(byteBuffer.array());
145

    
146
    }
147

    
148
    @Override
149
    public boolean isSupportedSave() {
150
        return true;
151
    }
152

    
153
    @Override
154
    public BandInfo getBandInfo() {
155
        return null;
156
    }
157

    
158
    @Override
159
    public int getRowsPerTile() {
160
        return rowsPerTile;
161
    }
162

    
163
    @Override
164
    public int getColumnsPerTile() {
165
        return columnsPerTile;
166
    }
167

    
168
    @Override
169
    public TileStruct getTileStruct() {
170
        // TODO Auto-generated method stub
171
        return null;
172
    }
173

    
174
    @Override
175
    protected void doDispose() throws BaseException {
176
        this.raf = null;
177
        this.file = null;
178

    
179

    
180
    }
181

    
182
}