Revision 6487
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