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 / AbstractBand.java @ 6493

History | View | Annotate | Download (3.25 KB)

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

    
3
import org.slf4j.Logger;
4
import org.slf4j.LoggerFactory;
5

    
6
import org.gvsig.raster.lib.buffer.api.Band;
7
import org.gvsig.raster.lib.buffer.api.BandInfo;
8
import org.gvsig.raster.lib.buffer.api.BandNotification;
9
import org.gvsig.raster.lib.buffer.api.NoData;
10
import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
11
import org.gvsig.raster.lib.buffer.impl.exceptions.CopyFromBandException;
12
import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
13

    
14
/**
15
 * @author fdiaz
16
 *
17
 */
18
public abstract class AbstractBand extends BaseWeakReferencingObservable implements Band {
19

    
20
    protected static final Logger logger = LoggerFactory.getLogger(AbstractBand.class);
21

    
22
    int rows;
23
    int columns;
24
    NoData noData;
25

    
26
    @Override
27
    public int getColumns() {
28
        return columns;
29
    }
30

    
31
    @Override
32
    public int getRows() {
33
        return rows;
34
    }
35

    
36
    @Override
37
    public NoData getNoData() {
38
        return this.noData;
39
    }
40

    
41
    @Override
42
    public BandInfo getBandInfo() {
43
        return null;
44
    }
45

    
46
    public Object clone() throws CloneNotSupportedException {
47
        AbstractBand cloned = (AbstractBand) super.clone();
48
        cloned.rows = this.rows;
49
        cloned.columns = this.columns;
50
        cloned.noData = (NoData) this.noData.clone();
51
        try {
52
            cloned.copyFrom(this);
53
        } catch (BandException e) {
54
            throw new CloneNotSupportedException(e.getMessage());
55
        }
56
        return cloned;
57
    }
58

    
59
    @Override
60
    public boolean isReadOnly() {
61
        return false;
62
    }
63

    
64
    @Override
65
    public boolean isPaginated() {
66
        return false;
67
    }
68

    
69
    public void set(int row, int column, Object value){
70
        doSet(row, column, value);
71
        notifyObservers(new DefaultBandNotification(BandNotification.SET, new Object[]{row, column, value}));
72
    }
73

    
74
    protected abstract void doSet(int row, int column, Object value);
75

    
76
    @Override
77
    public void fill(Object value) {
78
        doFill(value);
79
        notifyObservers(new DefaultBandNotification(BandNotification.FILL, new Object[]{value}));
80
    }
81

    
82
    protected abstract void doFill(Object value);
83

    
84
    /**
85
     * @param value
86
     * @return
87
     */
88
    protected Object nullValueToNoData(Object value) {
89
        if (value == null) {
90
            if (getNoData().isDefined()) {
91
                value = getNoData().getValue();
92
            } else {
93
                // Do nothing, no data value is undefined
94
                return null;
95
            }
96
        }
97
        return value;
98
    }
99

    
100
    @Override
101
    public void copyFrom(Band source) throws BandException {
102
        doCopyFrom(source);
103
        notifyObservers(new DefaultBandNotification(BandNotification.COPY_FROM, new Object[]{source}));
104
    }
105

    
106
    protected abstract void doCopyFrom(Band source) throws CopyFromBandException;
107

    
108
    @Override
109
    public void putRow(int row, Object rowBuffer) {
110
        doPutRow(row, rowBuffer);
111
        notifyObservers(new DefaultBandNotification(BandNotification.PUT_ROW, new Object[]{row, rowBuffer}));
112
    }
113

    
114
    protected abstract void doPutRow(int row, Object rowBuffer);
115

    
116
    @Override
117
    protected void finalize() throws Throwable {
118
        super.finalize();
119
        logger.info("AbstractBand with rows = "+rows+" columns = "+columns+" CLEANED");
120

    
121
    }
122

    
123
}