Revision 6498

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.app/org.gvsig.raster.tilecache.app.mainplugin/src/main/resources-plugin/config.xml
19 19
        action-command="view-test-layer-add"
20 20
        icon="view-test-layer-add"
21 21
        position="650300005"
22
        accelerator="Alt+?"
23 22
        />
24 23

  
25 24
      <menu
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider/src/main/java/org/gvsig/raster/tilecache/provider/TileStructImage.java
69 69
import org.gvsig.raster.lib.buffer.api.BufferLocator;
70 70
import org.gvsig.raster.lib.buffer.api.BufferManager;
71 71
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
72
import org.gvsig.tools.ToolsLocator;
72 73
import org.gvsig.tools.dispose.DisposeUtils;
74
import org.gvsig.tools.dispose.impl.AbstractDisposable;
73 75
import org.gvsig.tools.dynobject.DynObject;
74 76
import org.gvsig.tools.dynobject.exception.DynMethodException;
77
import org.gvsig.tools.exception.BaseException;
75 78
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
76 79

  
77 80
/**
......
254 257
                tileStore = createTileStore(zoomLevel, structRow, structCol);
255 258
                rasterSet = bufferManager.createBuffer(tileStore.getRasterSet(), false);
256 259

  
257
                if (recentAccededTiles.size() > MAX_RECENT_ACCEDED_TILES_NUMBER) {
260
                if (recentAccededTiles.size() >= MAX_RECENT_ACCEDED_TILES_NUMBER) {
258 261
                    removeOlderTile();
259 262
                }
260 263
                recentAccededTiles.put(keyTile, new Tile(rasterSet, keyTile));
......
551 554
        }
552 555
        if (olderTile != null) {
553 556
            recentAccededTiles.remove(olderTile.getKey());
557
            DisposeUtils.dispose(olderTile);
554 558
        }
555 559
    }
556 560

  
......
609 613
        return this.legend;
610 614
    }
611 615

  
612
    private class Tile {
616
    private class Tile extends AbstractDisposable {
613 617

  
614 618
        org.gvsig.raster.lib.buffer.api.Buffer buffer;
615 619
        long lastAccess;
616 620
        String key;
617 621

  
618 622
        public Tile(org.gvsig.raster.lib.buffer.api.Buffer buffer, String key) {
623
            logger.info("CONSTRUCTOR hashCode = "+this.hashCode()+ " className = "+this.getClass().getSimpleName());
624
            ToolsLocator.getDisposableManager().bind(buffer);
619 625
            this.buffer = buffer;
620 626
            this.key = key;
621 627
            lastAccess = System.currentTimeMillis();
......
637 643
        @Override
638 644
        protected void finalize() throws Throwable {
639 645
            super.finalize();
640
            logger.info("Tile with key " + this.key + " CLEANED.");
646
            logger.info("CLEANED key " + this.key +" hashCode = "+this.hashCode());
641 647
        }
648

  
649
        @Override
650
        protected void doDispose() throws BaseException {
651
            DisposeUtils.dispose(buffer);
652
            buffer = null;
653
        }
642 654
    }
643 655

  
644 656
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.fmap.dal.raster/org.gvsig.fmap.dal.raster.impl/src/main/java/org/gvsig/fmap/dal/raster/impl/DefaultRasterSet.java
90 90
     */
91 91
    public DefaultRasterSet(RasterStore store, RasterQuery query) throws DataException {
92 92

  
93
            logger.info("DefaultRasterSet CONSTRUCTOR hashCode = "+this.hashCode()+ " className = "+this.getClass().getSimpleName());
93
            logger.info("CONSTRUCTOR hashCode = "+this.hashCode()+ " className = "+this.getClass().getSimpleName());
94 94
            if(ToolsLocator.getDisposableManager() != null) {
95 95
                ToolsLocator.getDisposableManager().bind(this);
96 96
            } else {
......
108 108
            // Filter buffer by raster query
109 109
            if (query != null) {
110 110
                if (query.getClip() != null) {
111
                    buffer = buffer.clip(query.getClip());
111
                    Buffer clip = buffer.clip(query.getClip());
112
                    DisposeUtils.dispose(buffer);
113
                    buffer = clip;
112 114
                }
113 115
            }
114 116
        } catch (BufferException e) {
......
327 329
     * @see #dispose()
328 330
     */
329 331
    public void doDispose() throws BaseException {
330
        logger.info("DefaultRasterSet DO DISPOSE hashCode = "+this.hashCode());
332
        logger.info("DO DISPOSE hashCode = "+this.hashCode());
331 333

  
332 334
        DisposableManager disposableManager = ToolsLocator.getDisposableManager();
333 335
        DisposeUtils.dispose(store);
......
340 342
    @Override
341 343
    protected void finalize() throws Throwable {
342 344
        super.finalize();
343
        logger.info("DefaultRasterSet CLEANED hashCode = "+this.hashCode());
345
        logger.info("CLEANED hashCode = "+this.hashCode());
344 346

  
345 347
    }
346 348

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.fmap.mapcontext.raster/org.gvsig.fmap.mapcontext.raster.impl/src/main/java/org/gvsig/fmap/mapcontext/raster/impl/DefaultRasterLayer.java
195 195
        if (rAux == null || rAux.isEmpty() || rAux.getMaximum(0) - rAux.getMinimum(0) == 0
196 196
                && rAux.getMaximum(1) - rAux.getMinimum(1) == 0) {
197 197
            try {
198
                GeometryManager geomManager
199
                = GeometryLocator.getGeometryManager();
200
                rAux
201
                        = geomManager.createEnvelope(0, 0, 90, 90, SUBTYPES.GEOM2D);
198
                GeometryManager geomManager = GeometryLocator.getGeometryManager();
199
                rAux = geomManager.createEnvelope(0, 0, 90, 90, SUBTYPES.GEOM2D);
202 200
            } catch (CreateEnvelopeException e) {
203 201
                logger.error("Error creating the envelope", e);
204 202
                e.printStackTrace();
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/AbstractClippedBand.java
16 16
 */
17 17
public abstract class AbstractClippedBand extends AbstractBand implements Band {
18 18
    protected Band band;
19
    protected ClippedBuffer clippedBuffer;
19
    protected int firstRow;
20
    protected int firstColumn;
20 21

  
21 22
    /**
22 23
     * @param buffer
23 24
     * @param band
24 25
     */
25 26
    public AbstractClippedBand(Buffer buffer, Band band) {
26
        DisposableManager disposableManager = ToolsLocator.getDisposableManager();
27
        disposableManager.bind(buffer);
28
        disposableManager.bind(band);
29
        this.band = band;
30
        this.clippedBuffer = (ClippedBuffer)buffer;
27
        if (buffer instanceof ClippedBuffer) {
28
            ClippedBuffer clippedBuffer = (ClippedBuffer) buffer;
31 29

  
32
        this.rows = this.clippedBuffer.getRows();
33
        this.columns = this.clippedBuffer.getColumns();
34
        this.noData = this.band.getNoData();
30
            DisposableManager disposableManager = ToolsLocator.getDisposableManager();
31
            disposableManager.bind(band);
32
            this.band = band;
33

  
34
            this.rows = clippedBuffer.getRows();
35
            this.columns = clippedBuffer.getColumns();
36
            this.firstRow = clippedBuffer.getFirstRow();
37
            this.firstColumn = clippedBuffer.getFirstColumn();
38
            this.noData = this.band.getNoData();
39
        } else {
40
            throw new IllegalArgumentException("buffer isn't a ClippedBuffer");
41
        }
35 42
    }
36 43

  
37 44
    @Override
......
46 53

  
47 54
    @Override
48 55
    public Object get(int row, int column) {
49
        int bandRow = row + this.clippedBuffer.getFirstRow();
50
        int bandColumn = column + this.clippedBuffer.getFirstColumn();
56
        int bandRow = row + firstRow;
57
        int bandColumn = column + firstColumn;
51 58
        return this.band.get(bandRow, bandColumn);
52 59
    }
53 60

  
......
81 88
    public void doDispose() throws BaseException {
82 89
        super.doDispose();
83 90
        DisposeUtils.dispose(band);
84
        DisposeUtils.dispose(clippedBuffer);
85 91
        band = null;
86
        clippedBuffer = null;
87 92
    }
88 93
}
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/ClippedBandByte.java
26 26

  
27 27
    @Override
28 28
    public void fetchRow(int row, Object rowBuffer) {
29
        int bandRow = row + this.clippedBuffer.getFirstRow();
29
        int bandRow = row + firstRow;
30 30
        Object auxRowBuffer = this.band.createRowBuffer();
31 31
        this.band.fetchRow(bandRow, auxRowBuffer);
32 32

  
33
        System.arraycopy(auxRowBuffer, this.clippedBuffer.getFirstColumn(), (byte[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
33
        System.arraycopy(auxRowBuffer, firstColumn, (byte[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
34 34
    }
35
    
35

  
36 36
    @Override
37 37
    public byte getValue(int row, int column) {
38 38
        return (byte) this.get(row, column);
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/ClippedBandFloat.java
26 26

  
27 27
    @Override
28 28
    public void fetchRow(int row, Object rowBuffer) {
29
        int bandRow = row + this.clippedBuffer.getFirstRow();
29
        int bandRow = row + this.firstRow;
30 30
        Object auxRowBuffer = this.band.createRowBuffer();
31 31
        this.band.fetchRow(bandRow, auxRowBuffer);
32 32

  
33
        System.arraycopy(auxRowBuffer, this.clippedBuffer.getFirstColumn(), (float[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
33
        System.arraycopy(auxRowBuffer, this.firstColumn, (float[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
34 34
    }
35
    
35

  
36 36
    @Override
37 37
    public float getValue(int row, int column) {
38 38
        return (float) this.get(row, column);
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/ClippedBandDouble.java
26 26

  
27 27
    @Override
28 28
    public void fetchRow(int row, Object rowBuffer) {
29
        int bandRow = row + this.clippedBuffer.getFirstRow();
29
        int bandRow = row + this.firstRow;
30 30
        Object auxRowBuffer = this.band.createRowBuffer();
31 31
        this.band.fetchRow(bandRow, auxRowBuffer);
32 32

  
33
        System.arraycopy(auxRowBuffer, this.clippedBuffer.getFirstColumn(), (double[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
33
        System.arraycopy(auxRowBuffer, firstColumn, (double[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
34 34
    }
35 35

  
36 36
    @Override
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/ClippedBuffer.java
44 44
        ToolsLocator.getDisposableManager().bind(buffer);
45 45
        this.buffer = buffer;
46 46
        try {
47
            this.envelope = buffer.getEnvelope().getGeometry().intersection(envelope.getGeometry()).getEnvelope();
47
            this.envelope = this.buffer.getEnvelope().getGeometry().intersection(envelope.getGeometry()).getEnvelope();
48 48
        } catch (GeometryOperationNotSupportedException | GeometryOperationException e1) {
49 49
            throw new CreateBufferException(e1);
50 50
        }
......
59 59
        this.bands = new ArrayList<Band>();
60 60

  
61 61
        try {
62
            createBands(buffer.getBands());
62
            createBands(this.buffer.getBands());
63 63
        } catch (Exception e) {
64 64
            throw new CreateBufferException(e);
65 65
        }
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/AbstractBuffer.java
70 70
    private boolean disposed = false;
71 71

  
72 72
    public AbstractBuffer() {
73
        logger.info("AbstractBuffer CONSTRUCTOR with rows = "+rows+" columns = "+columns+ " hashCode = "+this.hashCode()+ " className = "+this.getClass().getSimpleName());
73
        logger.info("CONSTRUCTOR rows = "+rows+" columns = "+columns+ " hashCode = "+this.hashCode()+ " className = "+this.getClass().getSimpleName());
74 74
        if(ToolsLocator.getDisposableManager() != null) {
75 75
            ToolsLocator.getDisposableManager().bind(this);
76 76
        } else {
......
527 527
        synchronized (lock) {
528 528
            // Check if we have already been disposed, and don't do it again
529 529
            if (!disposed) {
530
                logger.info("AbstractBuffer with rows = "+rows+" columns = "+columns+" DISPOSE hashCode = "+this.hashCode());
530
                logger.info("DISPOSE rows = "+rows+" columns = "+columns+" hashCode = "+this.hashCode()+" className = "+this.getClass().getSimpleName());
531 531
                if ( ToolsLocator.getDisposableManager().release(this) ) {
532 532
                    try {
533 533
                        doDispose();
......
546 546
     * @see #dispose()
547 547
     */
548 548
    public void doDispose() throws BaseException {
549
        logger.info("AbstractBuffer with rows = "+rows+" columns = "+columns+" DO DISPOSE hashCode = "+this.hashCode());
549
        logger.info("DO DISPOSE rows = "+rows+" columns = "+columns+" hashCode = "+this.hashCode());
550 550
        for (Iterator iterator = bands.iterator(); iterator.hasNext();) {
551 551
            Band band = (Band) iterator.next();
552 552
            DisposeUtils.dispose(band);
553 553
        }
554
        bands.removeAll(bands);
554 555
        envelope = null;
555 556
        projection = null;
556 557
        //TODO: ?FilterList Disposable?
......
565 566
    @Override
566 567
    protected void finalize() throws Throwable {
567 568
        super.finalize();
568
        logger.info("AbstractBuffer with rows = "+rows+" columns = "+columns+" CLEANED hashCode = "+this.hashCode());
569

  
569
        logger.info("CLEANED rows = "+rows+" columns = "+columns+" hashCode = "+this.hashCode());
570 570
    }
571 571
}
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/AbstractPaginatedBand.java
93 93
            if (firstRowOfPage + rowsPerPage > this.rows) {
94 94
                rowsInPage = this.rows - firstRowOfPage;
95 95
            }
96
            logger.info("loadPage: firstRowOfPage = "+firstRowOfPage + " rowsPerPage = "+rowsPerPage+" rows = "+rows);
96 97
            this.pageManager.load(data, firstRowOfPage, rowsInPage, this.getDataType());
97 98
            loaded = true;
98 99
        } catch (IOException e) {
......
101 102
    }
102 103

  
103 104
    protected void saveCurrentPage() {
104
        logger.info("AbstractPaginatedBand - saveCurrentPage: firstRowOfPage = "+firstRowOfPage + " rowsPerPage = "+rowsPerPage+" rows = "+rows);
105 105
        try {
106 106
            int rowsInPage = rowsPerPage;
107 107
            if (firstRowOfPage + rowsPerPage > this.rows) {
......
161 161
    @Override
162 162
    public void doDispose() throws BaseException {
163 163
        super.doDispose();
164
        logger.info("AbstractPaginatedBand - doDispose : firstRowOfPage = "+firstRowOfPage + " rowsPerPage = "+rowsPerPage+" rows = "+rows);
164
        logger.info("DO DISPOSE firstRowOfPage = "+firstRowOfPage + " rowsPerPage = "+rowsPerPage+" rows = "+rows);
165 165
        data = null;
166 166
        //FIXME: ?hacer disposables los pageManagers?
167 167
        pageManager = null;
......
170 170
    @Override
171 171
    protected void finalize() throws Throwable {
172 172
        super.finalize();
173
        logger.info("AbstractPaginatedBand with rowsPerPage = "+rowsPerPage+" columns = "+columns+" CLEANED hashCode = "+this.hashCode());
173
        logger.info("CLEANED rowsPerPage = "+rowsPerPage+" columns = "+columns+" hashCode = "+this.hashCode());
174 174

  
175 175
    }
176 176

  
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/AbstractTiledBand.java
178 178

  
179 179
    @Override
180 180
    public void doDispose() throws BaseException {
181
        super.dispose();
181
        super.doDispose();
182 182
        data = null;
183 183
        //FIXME: ?hacer disposables los pageManagers?
184 184
        tileManager = null;
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/ClippedBandInt.java
26 26

  
27 27
    @Override
28 28
    public void fetchRow(int row, Object rowBuffer) {
29
        int bandRow = row + this.clippedBuffer.getFirstRow();
29
        int bandRow = row + this.firstRow;
30 30
        Object auxRowBuffer = this.band.createRowBuffer();
31 31
        this.band.fetchRow(bandRow, auxRowBuffer);
32 32

  
33
        System.arraycopy(auxRowBuffer, this.clippedBuffer.getFirstColumn(), (int[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
33
        System.arraycopy(auxRowBuffer, this.firstColumn, (int[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
34 34
    }
35
    
35

  
36 36
    @Override
37 37
    public int getValue(int row, int column) {
38 38
        return (int) this.get(row, column);
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/ClippedBandShort.java
26 26

  
27 27
    @Override
28 28
    public void fetchRow(int row, Object rowBuffer) {
29
        int bandRow = row + this.clippedBuffer.getFirstRow();
29
        int bandRow = row + this.firstRow;
30 30
        Object auxRowBuffer = this.band.createRowBuffer();
31 31
        this.band.fetchRow(bandRow, auxRowBuffer);
32 32

  
33
        System.arraycopy(auxRowBuffer, this.clippedBuffer.getFirstColumn(), (int[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
33
        System.arraycopy(auxRowBuffer, this.firstColumn, (int[]) rowBuffer, 0, Math.min(getColumns(), this.band.getColumns()));
34 34
    }
35 35

  
36 36
    @Override
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
135 135
    @Override
136 136
    protected void finalize() throws Throwable {
137 137
        super.finalize();
138
        logger.info("AbstractBand with rows = "+rows+" columns = "+columns+" CLEANED hashCode = "+this.hashCode());
138
        logger.info("CLEANED rows = "+rows+" columns = "+columns+" hashCode = "+this.hashCode());
139 139

  
140 140
    }
141 141

  
......
143 143
        synchronized (lock) {
144 144
            // Check if we have already been disposed, and don't do it again
145 145
            if (!disposed) {
146
                logger.info("AbstractBand with rows = "+rows+" columns = "+columns+" DISPOSE hashCode = "+this.hashCode());
146
                logger.info("DISPOSE rows = "+rows+" columns = "+columns+" hashCode = "+this.hashCode());
147 147
                if ( ToolsLocator.getDisposableManager().release(this) ) {
148 148
                    try {
149 149
                        doDispose();
......
162 162
     * @see #dispose()
163 163
     */
164 164
    public void doDispose() throws BaseException {
165
        logger.info("AbstractBand with rows = "+rows+" columns = "+columns+" DO DISPOSE hashCode = "+this.hashCode());
165
        logger.info("DO DISPOSE rows = "+rows+" columns = "+columns+" hashCode = "+this.hashCode());
166 166
        noData = null;
167 167
    }
168 168

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.legend/org.gvsig.raster.lib.legend.impl/src/main/java/org/gvsig/raster/lib/legend/impl/DefaultRasterLegend.java
7 7
import java.awt.image.BufferedImage;
8 8

  
9 9
import org.cresques.cts.ICoordTrans;
10
import org.slf4j.Logger;
11
import org.slf4j.LoggerFactory;
10 12

  
11 13
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
12 14
import org.gvsig.fmap.geom.GeometryLocator;
13 15
import org.gvsig.fmap.geom.exception.CreateGeometryException;
14
import org.gvsig.fmap.geom.operation.GeometryOperationException;
15
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
16 16
import org.gvsig.fmap.geom.primitive.Envelope;
17 17
import org.gvsig.fmap.geom.primitive.Point;
18 18
import org.gvsig.fmap.mapcontext.ViewPort;
19 19
import org.gvsig.raster.lib.buffer.api.Band;
20 20
import org.gvsig.raster.lib.buffer.api.Buffer;
21 21
import org.gvsig.raster.lib.buffer.api.FilterList;
22
import org.gvsig.raster.lib.buffer.api.NoData;
23 22
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
24 23
import org.gvsig.raster.lib.legend.api.ColorInterpretation;
25 24
import org.gvsig.raster.lib.legend.api.ColorTable;
......
34 33
import org.gvsig.tools.task.SimpleTaskStatus;
35 34
import org.gvsig.tools.task.TaskStatusManager;
36 35

  
37
import org.slf4j.Logger;
38
import org.slf4j.LoggerFactory;
39

  
40 36
/**
41 37
 * Default implementation of {@link RasterLegend}. This object can draw buffers
42 38
 * with a {@link ColorInterpretation}, {@link ColorTable} and {@link FilterList}
......
143 139
        Buffer bufferToDraw = buffer;
144 140
        try {
145 141

  
146
            if (!viewPort.getProjection().equals(buffer.getProjection())) {
142
            if (!viewPort.getProjection().equals(bufferToDraw.getProjection())) {
147 143

  
148 144
                // Convert extension to check if envelopes intersect
149
                ICoordTrans coordTrans = viewPort.getProjection().getCT(buffer.getProjection());
150
                ICoordTrans invertedCoordTrans = buffer.getProjection().getCT(viewPort.getProjection());
145
                ICoordTrans coordTrans = viewPort.getProjection().getCT(bufferToDraw.getProjection());
146
                ICoordTrans invertedCoordTrans = bufferToDraw.getProjection().getCT(viewPort.getProjection());
151 147
                Envelope convertedEnvelope = viewPort.getAdjustedEnvelope().convert(coordTrans);
152 148
                double viewPortPixelSizeX = viewPort.getAdjustedEnvelope().getLength(0) / viewPort.getImageWidth();
153 149
                double viewPortPixelSizeY = viewPort.getAdjustedEnvelope().getLength(1) / viewPort.getImageHeight();
154
                if (!convertedEnvelope.intersects(buffer.getEnvelope())) {
150
                if (!convertedEnvelope.intersects(bufferToDraw.getEnvelope())) {
155 151
                    return;
156 152
                }
157 153
                try {
158 154
                    // Clip buffer with doubled converted envelope
159
                    clip = buffer.clip(convertedEnvelope);
155
                    clip = bufferToDraw.clip(convertedEnvelope);
160 156
                    Envelope bufferEnvelopeInViewPortCoords = clip.getEnvelope().convert(invertedCoordTrans);
161 157

  
162 158
                    double widthPixel = bufferEnvelopeInViewPortCoords.getLength(0) / viewPortPixelSizeX;
......
178 174
                    taskStatus.abort();
179 175
                    return;
180 176
                }
181
            } else if (viewPort.getAdjustedEnvelope().intersects(buffer.getEnvelope())) {
177
            } else if (viewPort.getAdjustedEnvelope().intersects(bufferToDraw.getEnvelope())) {
182 178

  
183 179
                double widthPixel = 0;
184 180
                double heightPixel = 0;
185 181
                try {
186 182
                    // Clip and interpolate buffer with view port envelope
187
                    if (!buffer.getEnvelope().equals(viewPort.getAdjustedEnvelope())) {
188
                        clip = buffer.clip(viewPort.getAdjustedEnvelope());
183
                    if (!bufferToDraw.getEnvelope().equals(viewPort.getAdjustedEnvelope())) {
184
                        clip = bufferToDraw.clip(viewPort.getAdjustedEnvelope());
189 185
                        bufferToDraw = clip;
190 186
                    }
191 187
                    widthPixel =
......
253 249
                    taskStatus.abort();
254 250
                    return;
255 251
                }
256
                // if(bufferToDraw != buffer){
257
                // DisposeUtils.dispose(bufferToDraw);
258
                bufferToDraw = null;
259
                // }
260 252
            }
261 253
        } finally {
262 254
            if (clip != null) {
......
271 263
                DisposeUtils.dispose(converted);
272 264
                converted = null;
273 265
            }
266
            if (bufferToDraw == null && bufferToDraw != buffer) {
267
                DisposeUtils.dispose(bufferToDraw);
268
                bufferToDraw = null;
269
            }
274 270

  
275 271
            if (!isMyTask) {
276 272
                taskStatus.pop();

Also available in: Unified diff