gvsig-raster / 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 / DefaultBuffer.java @ 6302
History | View | Annotate | Download (4.1 KB)
1 |
package org.gvsig.raster.lib.buffer.impl; |
---|---|
2 |
|
3 |
import java.util.ArrayList; |
4 |
import java.util.List; |
5 |
|
6 |
import org.cresques.cts.IProjection; |
7 |
import org.gvsig.fmap.geom.Geometry; |
8 |
import org.gvsig.fmap.geom.GeometryLocator; |
9 |
import org.gvsig.fmap.geom.primitive.Envelope; |
10 |
import org.gvsig.raster.lib.buffer.api.Band; |
11 |
import org.gvsig.raster.lib.buffer.api.Buffer; |
12 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
13 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
14 |
import org.gvsig.raster.lib.buffer.api.NoData; |
15 |
import org.gvsig.raster.lib.buffer.api.PageManager; |
16 |
import org.gvsig.raster.lib.buffer.api.exceptions.BandException; |
17 |
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException; |
18 |
import org.gvsig.raster.lib.buffer.impl.exceptions.CreateBufferException; |
19 |
import org.gvsig.tools.locator.LocatorException; |
20 |
import org.slf4j.Logger; |
21 |
import org.slf4j.LoggerFactory; |
22 |
|
23 |
/**
|
24 |
* @author fdiaz
|
25 |
*
|
26 |
*/
|
27 |
public class DefaultBuffer extends AbstractBuffer { |
28 |
|
29 |
protected static final Logger logger = LoggerFactory.getLogger(DefaultBuffer.class); |
30 |
|
31 |
/**
|
32 |
* Default constructor of buffer.
|
33 |
*
|
34 |
* @param rows
|
35 |
* Rows of buffer and buffer bands.
|
36 |
* @param columns
|
37 |
* Columns of buffer bands.
|
38 |
* @param bandDataTypes
|
39 |
* Type of buffer bands. The band types also indicates the number
|
40 |
* of buffer bands.
|
41 |
* @param bandNoData
|
42 |
* Band noData. If there are bans without NoData, bands will have
|
43 |
* undefined NoData value.
|
44 |
* @param projection
|
45 |
* Projection of buffer
|
46 |
* @param envelope
|
47 |
* Envelope of buffer
|
48 |
* @param pageManagers
|
49 |
* Page manager to paginate this buffer. If page manager is null,
|
50 |
* buffer will be loaded in memory.
|
51 |
* @throws CreateBufferException
|
52 |
* If there are some problems creating buffer.
|
53 |
*/
|
54 |
public DefaultBuffer(int rows, int columns, int[] bandDataTypes, NoData[] bandNoData, |
55 |
IProjection projection, Envelope envelope, List<PageManager> pageManagers)
|
56 |
throws CreateBufferException {
|
57 |
this.bands = new ArrayList<Band>(); |
58 |
this.rows = rows;
|
59 |
this.columns = columns;
|
60 |
this.projection = projection;
|
61 |
this.envelope = envelope;
|
62 |
try {
|
63 |
if (envelope == null) { |
64 |
this.envelope =
|
65 |
GeometryLocator.getGeometryManager().createEnvelope(0, 0, columns, rows, |
66 |
Geometry.SUBTYPES.GEOM2D); |
67 |
} |
68 |
if (bandDataTypes != null) { |
69 |
createBands(bandDataTypes, bandNoData, pageManagers); |
70 |
} |
71 |
} catch (Exception e) { |
72 |
throw new CreateBufferException(e); |
73 |
} |
74 |
} |
75 |
|
76 |
private void createBands(int[] bandDataTypes, NoData[] bandNoData, |
77 |
List<PageManager> pageManagers) throws BandException { |
78 |
|
79 |
BufferManager bufferManager = BufferLocator.getBufferManager(); |
80 |
|
81 |
for (int i = 0; i < bandDataTypes.length; i++) { |
82 |
|
83 |
NoData noDataBand = null;
|
84 |
if (bandNoData != null && i < bandNoData.length) { |
85 |
noDataBand = bandNoData[i]; |
86 |
} |
87 |
|
88 |
PageManager pageManager = null;
|
89 |
if (pageManagers != null && i < pageManagers.size()) { |
90 |
pageManager = pageManagers.get(i); |
91 |
} |
92 |
|
93 |
Band band = |
94 |
bufferManager.createBand(bandDataTypes[i], this.rows, this.columns, noDataBand, |
95 |
pageManager); |
96 |
bands.add(band); |
97 |
band.addObserver(this);
|
98 |
} |
99 |
} |
100 |
|
101 |
@Override
|
102 |
public Object clone() throws CloneNotSupportedException { |
103 |
Buffer cloned;
|
104 |
try {
|
105 |
cloned = |
106 |
BufferLocator.getBufferManager().createBuffer(this.getRows(), this.getColumns(), |
107 |
this.getBandTypes(), this.getProjection()); |
108 |
} catch (LocatorException | BufferException e) {
|
109 |
throw new CloneNotSupportedException("Can't clone buffer."); |
110 |
} |
111 |
for (int i = 0; i < this.getBandCount(); i++) { |
112 |
cloned.addBand((Band) this.getBand(i).clone());
|
113 |
} |
114 |
return cloned;
|
115 |
} |
116 |
|
117 |
} |