Statistics
| Revision:

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
}