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 @ 8800

History | View | Annotate | Download (4.67 KB)

1 5442 fdiaz
package org.gvsig.raster.lib.buffer.impl;
2
3 6493 fdiaz
import org.slf4j.Logger;
4
import org.slf4j.LoggerFactory;
5
6 5442 fdiaz
import org.gvsig.raster.lib.buffer.api.Band;
7 6302 llmarques
import org.gvsig.raster.lib.buffer.api.BandInfo;
8 5535 fdiaz
import org.gvsig.raster.lib.buffer.api.BandNotification;
9 5442 fdiaz
import org.gvsig.raster.lib.buffer.api.NoData;
10 5452 dmartinezizquierdo
import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
11 5535 fdiaz
import org.gvsig.raster.lib.buffer.impl.exceptions.CopyFromBandException;
12 6494 fdiaz
import org.gvsig.tools.ToolsLocator;
13
import org.gvsig.tools.exception.BaseException;
14 5535 fdiaz
import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
15 5442 fdiaz
16
/**
17
 * @author fdiaz
18
 *
19
 */
20 5535 fdiaz
public abstract class AbstractBand extends BaseWeakReferencingObservable implements Band {
21 5442 fdiaz
22 6493 fdiaz
    protected static final Logger logger = LoggerFactory.getLogger(AbstractBand.class);
23
24 5442 fdiaz
    int rows;
25
    int columns;
26
    NoData noData;
27
28 6494 fdiaz
    // to make it disposable
29
    private final Object lock = new Object();
30
    private boolean disposed = false;
31
32
    public AbstractBand() {
33
        if(ToolsLocator.getDisposableManager() != null) {
34
            ToolsLocator.getDisposableManager().bind(this);
35
        } else {
36
            logger.warn("Can't retrieve the disposable manager,");
37
        }
38
    }
39
40
41 5442 fdiaz
    @Override
42
    public int getColumns() {
43
        return columns;
44
    }
45
46
    @Override
47
    public int getRows() {
48
        return rows;
49
    }
50
51
    @Override
52
    public NoData getNoData() {
53
        return this.noData;
54
    }
55 6337 dmartinezizquierdo
56 6306 llmarques
    @Override
57
    public BandInfo getBandInfo() {
58
        return null;
59
    }
60 6337 dmartinezizquierdo
61 5443 fdiaz
    public Object clone() throws CloneNotSupportedException {
62
        AbstractBand cloned = (AbstractBand) super.clone();
63
        cloned.rows = this.rows;
64
        cloned.columns = this.columns;
65 5515 fdiaz
        cloned.noData = (NoData) this.noData.clone();
66 5452 dmartinezizquierdo
        try {
67
            cloned.copyFrom(this);
68
        } catch (BandException e) {
69
            throw new CloneNotSupportedException(e.getMessage());
70
        }
71 5443 fdiaz
        return cloned;
72
    }
73 5445 dmartinezizquierdo
74 5515 fdiaz
    @Override
75
    public boolean isReadOnly() {
76
        return false;
77
    }
78
79 5527 fdiaz
    @Override
80
    public boolean isPaginated() {
81
        return false;
82
    }
83
84 5535 fdiaz
    public void set(int row, int column, Object value){
85
        doSet(row, column, value);
86
        notifyObservers(new DefaultBandNotification(BandNotification.SET, new Object[]{row, column, value}));
87
    }
88
89
    protected abstract void doSet(int row, int column, Object value);
90
91
    @Override
92
    public void fill(Object value) {
93
        doFill(value);
94
        notifyObservers(new DefaultBandNotification(BandNotification.FILL, new Object[]{value}));
95
    }
96
97
    protected abstract void doFill(Object value);
98
99 6337 dmartinezizquierdo
    /**
100 8682 fdiaz
     * @param value NoData value
101 6337 dmartinezizquierdo
     * @return
102
     */
103
    protected Object nullValueToNoData(Object value) {
104
        if (value == null) {
105
            if (getNoData().isDefined()) {
106
                value = getNoData().getValue();
107
            } else {
108
                // Do nothing, no data value is undefined
109
                return null;
110
            }
111
        }
112
        return value;
113
    }
114 5535 fdiaz
115
    @Override
116
    public void copyFrom(Band source) throws BandException {
117
        doCopyFrom(source);
118
        notifyObservers(new DefaultBandNotification(BandNotification.COPY_FROM, new Object[]{source}));
119
    }
120
121
    protected abstract void doCopyFrom(Band source) throws CopyFromBandException;
122
123
    @Override
124 6538 fdiaz
    public void copyFrom(Band source, int row, int column) throws BandException {
125
        doCopyFrom(source, row, column);
126
        notifyObservers(new DefaultBandNotification(BandNotification.COPY_FROM, new Object[]{source}));
127
    }
128
129
    protected abstract void doCopyFrom(Band source, int row, int column) throws CopyFromBandException;
130
131
    @Override
132 5535 fdiaz
    public void putRow(int row, Object rowBuffer) {
133
        doPutRow(row, rowBuffer);
134
        notifyObservers(new DefaultBandNotification(BandNotification.PUT_ROW, new Object[]{row, rowBuffer}));
135
    }
136
137
    protected abstract void doPutRow(int row, Object rowBuffer);
138 6493 fdiaz
139
    @Override
140
    protected void finalize() throws Throwable {
141
        super.finalize();
142
    }
143
144 6494 fdiaz
    public final void dispose() {
145
        synchronized (lock) {
146
            // Check if we have already been disposed, and don't do it again
147
            if (!disposed) {
148
                if ( ToolsLocator.getDisposableManager().release(this) ) {
149
                    try {
150
                        doDispose();
151
                    } catch (BaseException ex) {
152
                        logger.error("Error performing dispose", ex);
153
                    }
154
                    disposed = true;
155
                }
156
            }
157
        }
158
    }
159
160
    /**
161
     * Internal implementation for the {@link #dispose()} method.
162
     *
163
     * @see #dispose()
164
     */
165
    public void doDispose() throws BaseException {
166
        noData = null;
167
    }
168
169
170 5442 fdiaz
}