Revision 6487

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandInt.java
1 1
package org.gvsig.raster.lib.buffer.impl;
2 2

  
3
import java.nio.ByteBuffer;
4 3
import java.nio.IntBuffer;
5 4
import java.util.Arrays;
6 5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
7 9
import org.gvsig.raster.lib.buffer.api.Band.BandInt;
8 10
import org.gvsig.raster.lib.buffer.api.BandNotification;
9 11
import org.gvsig.raster.lib.buffer.api.BandPageManager;
......
16 18
 */
17 19
public class PaginatedBandInt extends AbstractPaginatedBand implements BandInt {
18 20

  
21
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandInt.class);
23

  
19 24
    /**
20 25
     * @param rows
21 26
     * @param columns
......
25 30
     */
26 31
    public PaginatedBandInt(int rows, int columns, NoData noData, BandPageManager pageManager) {
27 32
        super(rows, columns, noData, pageManager);
28
        data = IntBuffer.allocate(rowsPerPage * columns);
33
        data = IntBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 34
    }
30 35

  
31 36
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandShort.java
3 3
import java.nio.ShortBuffer;
4 4
import java.util.Arrays;
5 5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
6 9
import org.gvsig.raster.lib.buffer.api.Band.BandShort;
7 10
import org.gvsig.raster.lib.buffer.api.BandNotification;
8 11
import org.gvsig.raster.lib.buffer.api.BandPageManager;
......
15 18
 */
16 19
public class PaginatedBandShort extends AbstractPaginatedBand implements BandShort {
17 20

  
21
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandShort.class);
18 23

  
19 24
    /**
20 25
     * @param rows
......
25 30
     */
26 31
    public PaginatedBandShort(int rows, int columns, NoData noData, BandPageManager pageManager) {
27 32
        super(rows, columns, noData, pageManager);
28
        data = ShortBuffer.allocate(rowsPerPage * columns);
33
        data = ShortBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 34
    }
30 35

  
31 36
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandFloat.java
3 3
import java.nio.FloatBuffer;
4 4
import java.util.Arrays;
5 5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
6 9
import org.gvsig.raster.lib.buffer.api.Band.BandFloat;
7 10
import org.gvsig.raster.lib.buffer.api.BandNotification;
8 11
import org.gvsig.raster.lib.buffer.api.BandPageManager;
......
15 18
 */
16 19
public class PaginatedBandFloat extends AbstractPaginatedBand implements BandFloat {
17 20

  
21
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandFloat.class);
18 23

  
19 24
    /**
20 25
     * @param rows
......
25 30
     */
26 31
    public PaginatedBandFloat(int rows, int columns, NoData noData, BandPageManager pageManager) {
27 32
        super(rows, columns, noData, pageManager);
28
        data = FloatBuffer.allocate(rowsPerPage * columns);
33
        data = FloatBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 34
    }
30 35

  
31 36
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/TiledBandInt.java
25 25
     */
26 26
    public TiledBandInt(int rows, int columns, NoData noData, BandTileManager tileManager) {
27 27
        super(rows, columns, noData, tileManager);
28
        data = IntBuffer.allocate(rowsInTile * columnsInTile);
28
        data = IntBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 29

  
30 30
    }
31 31

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandByte.java
3 3
import java.nio.ByteBuffer;
4 4
import java.util.Arrays;
5 5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
6 9
import org.gvsig.raster.lib.buffer.api.Band.BandByte;
7 10
import org.gvsig.raster.lib.buffer.api.BandNotification;
8 11
import org.gvsig.raster.lib.buffer.api.BandPageManager;
......
15 18
 */
16 19
public class PaginatedBandByte extends AbstractPaginatedBand implements BandByte {
17 20

  
21
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandByte.class);
18 23

  
19 24
    /**
20 25
     * @param rows
......
24 29
     */
25 30
    public PaginatedBandByte(int rows, int columns, NoData noData, BandPageManager pageManager) {
26 31
        super(rows, columns, noData, pageManager);
27
        data = ByteBuffer.allocate(rowsPerPage * columns);
28

  
32
        data = ByteBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 33
    }
30 34

  
31 35
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/AbstractPaginatedBand.java
3 3
import java.io.IOException;
4 4
import java.nio.Buffer;
5 5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
6 9
import org.gvsig.raster.lib.buffer.api.Band;
7 10
import org.gvsig.raster.lib.buffer.api.BandInfo;
8 11
import org.gvsig.raster.lib.buffer.api.BandNotification;
......
15 18
 * @author fdiaz
16 19
 *
17 20
 */
18
public abstract class AbstractPaginatedBand extends AbstractBand implements Band{
21
public abstract class AbstractPaginatedBand extends AbstractBand implements Band {
19 22

  
23
    private static final Logger logger = LoggerFactory.getLogger(AbstractPaginatedBand.class);
20 24
    protected Buffer data;
21 25
    protected int firstRowOfPage;
22 26
    protected int rowsPerPage;
23 27
    protected BandPageManager pageManager;
24 28
    private boolean loaded;
25 29

  
26

  
27 30
    protected static final int MAX_PREFERED_SIZE = 10485760; // 10MB;
28 31

  
29 32
    /**
......
35 38
    public AbstractPaginatedBand(int rows, int columns, NoData noData, BandPageManager pageManager) {
36 39
        this.rows = rows;
37 40
        this.columns = columns;
38
        this.loaded=false;
41
        this.loaded = false;
39 42
        calculateRowsPerPage();
40 43

  
41 44
        if (noData == null) {
......
46 49
        this.pageManager = pageManager;
47 50
    }
48 51

  
49
    private void calculateRowsPerPage(){
50
        rowsPerPage = MAX_PREFERED_SIZE/(this.columns*getDataSize());
51
        if(rowsPerPage<1){
52
    private void calculateRowsPerPage() {
53
        rowsPerPage = MAX_PREFERED_SIZE / (this.columns * getDataSize());
54
        if (rowsPerPage < 1) {
52 55
            rowsPerPage = 1;
53 56
        }
54 57
    }
55 58

  
56

  
57 59
    @Override
58 60
    public void copyFrom(Band source) throws CopyFromBandException {
59 61
        doCopyFrom(source);
60
        notifyObservers(new DefaultBandNotification(BandNotification.COPY_FROM, new Object[]{source}));
62
        notifyObservers(new DefaultBandNotification(BandNotification.COPY_FROM, new Object[] { source }));
61 63
    }
62 64

  
63 65
    protected void doCopyFrom(Band source) throws CopyFromBandException {
64 66
        if (this.getColumns() != source.getColumns() || this.getRows() != source.getRows()
65
            || this.getDataType()!=source.getDataType() ) {
67
            || this.getDataType() != source.getDataType()) {
66 68
            throw new CopyFromBandException(source, this);
67 69
        }
68 70
        Object rowBuffer = this.createRowBuffer();
69
        for(int row = 0; row<=this.rows; row++){
71
        for (int row = 0; row <= this.rows; row++) {
70 72
            source.fetchRow(row, rowBuffer);
71 73
            this.putRow(row, rowBuffer);
72 74
        }
73 75
    }
74 76

  
75 77
    protected void loadPage(int row) {
76
        if (loaded && row >= firstRowOfPage
77
            && row < firstRowOfPage + rowsPerPage) {
78
        if (loaded && row >= firstRowOfPage && row < firstRowOfPage + rowsPerPage) {
78 79
            return;
79 80
        }
80
        loaded=false;
81
        loaded = false;
81 82

  
82 83
        saveCurrentPage();
83
        int currentPage = row / rowsPerPage; //Divisi?n entera
84
        int currentPage = row / rowsPerPage; // Divisi?n entera
84 85
        firstRowOfPage = currentPage * rowsPerPage;
85 86
        try {
86 87
            int rowsInPage = rowsPerPage;
87
            if(firstRowOfPage + rowsPerPage > this.rows){
88
            if (firstRowOfPage + rowsPerPage > this.rows) {
88 89
                rowsInPage = this.rows - firstRowOfPage;
89 90
            }
90 91
            this.pageManager.load(data, firstRowOfPage, rowsInPage, this.getDataType());
91
            loaded=true;
92
            loaded = true;
92 93
        } catch (IOException e) {
93 94
            throw new RuntimeException("Can't load current page", e);
94 95
        }
......
97 98
    protected void saveCurrentPage() {
98 99
        try {
99 100
            int rowsInPage = rowsPerPage;
100
            if(firstRowOfPage + rowsPerPage > this.rows){
101
            if (firstRowOfPage + rowsPerPage > this.rows) {
101 102
                rowsInPage = this.rows - firstRowOfPage;
102 103
            }
103 104
            this.pageManager.save(data, firstRowOfPage, rowsInPage, this.getDataType());
......
112 113

  
113 114
    @Override
114 115
    public boolean isReadOnly() {
115
        if(this.pageManager==null){
116
        if (this.pageManager == null) {
116 117
            return false;
117 118
        }
118 119
        return !this.pageManager.isSupportedSave();
119 120
    }
120 121

  
121

  
122 122
    @Override
123 123
    public boolean isPaginated() {
124 124
        return true;
......
129 129
        return this.pageManager == null ? null : this.pageManager.getBandInfo();
130 130
    }
131 131

  
132
    /**
133
     * Calculate buffer size than must be allocated.
134
     *
135
     * @param rows
136
     * @param columns
137
     * @return
138
     */
139
    protected int calculateBufferSizeToAllocate(int rows, int columns) {
140
        // If the number of requested cells is less than the default number of
141
        // cells, it is unnecessary to reserve the maximum possible size.
142

  
143
        if (rows < rowsPerPage) {
144
            logger.info("ALLOCATE rows = " + rows + " columns = " + columns + " bytes = " + (rows * columns));
145
            return rows * columns;
146
        }
147
        logger.info("ALLOCATE rowsPerPage = " + rowsPerPage + " columns = " + columns + " bytes = "
148
            + (rowsPerPage * columns));
149
        return rowsPerPage * columns;
150
    }
151

  
132 152
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/TiledBandShort.java
25 25
     */
26 26
    public TiledBandShort(int rows, int columns, NoData noData, BandTileManager tileManager) {
27 27
        super(rows, columns, noData, tileManager);
28
        data = ShortBuffer.allocate(rowsInTile * columnsInTile);
28
        data = ShortBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 29

  
30 30
    }
31 31

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/AbstractTiledBand.java
104 104
            }
105 105
            loaded=true;
106 106
        } catch (IOException e) {
107
            throw new RuntimeException("Can't save current tile", e);
107
            throw new RuntimeException("Can't load current tile", e);
108 108
        }
109 109
    }
110 110

  
......
151 151
        return this.tileManager == null ? null : this.tileManager.getBandInfo();
152 152
    }
153 153

  
154
    /**
155
     * Calculate buffer size than must be allocated.
156
     * @param rows
157
     * @param columns
158
     * @return
159
     */
160
    protected int calculateBufferSizeToAllocate(int rows, int columns){
161
        // If the number of requested cells is less than the default number of
162
        // cells, it is unnecessary to reserve the maximum possible size.
163

  
164
        int allocateRows = rowsInTile;
165
        if(rows<rowsInTile){
166
            allocateRows = rows;
167
        }
168

  
169
        int allocateColumns = columnsInTile;
170
        //FIXME: Comprobar si se puede utilizar la condici?n de abajo antes de descomentarizarla
171
//        if(columns<columnsInTile){
172
//            allocateColumns = columns;
173
//        }
174

  
175
        return allocateRows*allocateColumns;
176
    }
177

  
154 178
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/TiledBandByte.java
25 25
     */
26 26
    public TiledBandByte(int rows, int columns, NoData noData, BandTileManager tileManager) {
27 27
        super(rows, columns, noData, tileManager);
28
        data = ByteBuffer.allocate(rowsInTile * columnsInTile);
29 28

  
29
        data = ByteBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
30 30
    }
31 31

  
32 32
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandDouble.java
3 3
import java.nio.DoubleBuffer;
4 4
import java.util.Arrays;
5 5

  
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

  
6 9
import org.gvsig.raster.lib.buffer.api.Band.BandDouble;
7 10
import org.gvsig.raster.lib.buffer.api.BandNotification;
8 11
import org.gvsig.raster.lib.buffer.api.BandPageManager;
......
15 18
 */
16 19
public class PaginatedBandDouble extends AbstractPaginatedBand implements BandDouble {
17 20

  
21
    private static final Logger logger =
22
        LoggerFactory.getLogger(PaginatedBandDouble.class);
23

  
18 24
    /**
19 25
     * @param rows
20 26
     * @param columns
......
24 30
     */
25 31
    public PaginatedBandDouble(int rows, int columns, NoData noData, BandPageManager pageManager) {
26 32
        super(rows, columns, noData, pageManager);
27
        data = DoubleBuffer.allocate(rowsPerPage * columns);
33
        data = DoubleBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
28 34
    }
29 35

  
30 36
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/TiledBandFloat.java
25 25
     */
26 26
    public TiledBandFloat(int rows, int columns, NoData noData, BandTileManager tileManager) {
27 27
        super(rows, columns, noData, tileManager);
28
        data = FloatBuffer.allocate(rowsInTile * columnsInTile);
28
        data = FloatBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 29

  
30 30
    }
31 31

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/TiledBandDouble.java
25 25
     */
26 26
    public TiledBandDouble(int rows, int columns, NoData noData, BandTileManager tileManager) {
27 27
        super(rows, columns, noData, tileManager);
28
        data = DoubleBuffer.allocate(rowsInTile * columnsInTile);
28
        data = DoubleBuffer.allocate(calculateBufferSizeToAllocate(rows, columns));
29 29

  
30 30
    }
31 31

  

Also available in: Unified diff