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 | } |