Revision 5525 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

View differences:

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

  
3
import java.awt.geom.AffineTransform;
3 4
import java.util.ArrayList;
4 5
import java.util.Iterator;
5 6
import java.util.List;
6 7

  
7 8
import org.cresques.cts.ICoordTrans;
8 9
import org.cresques.cts.IProjection;
9
import org.slf4j.Logger;
10
import org.slf4j.LoggerFactory;
11

  
12 10
import org.gvsig.fmap.geom.Geometry;
13 11
import org.gvsig.fmap.geom.GeometryLocator;
14 12
import org.gvsig.fmap.geom.operation.GeometryOperationException;
......
28 26
import org.gvsig.raster.lib.buffer.api.NoData;
29 27
import org.gvsig.raster.lib.buffer.api.PageManager;
30 28
import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
29
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
31 30
import org.gvsig.raster.lib.buffer.api.statistics.Statistics;
32 31
import org.gvsig.raster.lib.buffer.impl.exceptions.CreateBufferException;
33 32
import org.gvsig.raster.lib.buffer.impl.statistics.DefaultStatistics;
34 33
import org.gvsig.tools.task.SimpleTaskStatus;
34
import org.slf4j.Logger;
35
import org.slf4j.LoggerFactory;
35 36

  
36 37
/**
37 38
 * @author fdiaz
......
67 68
     *            Projection of buffer
68 69
     * @param envelope
69 70
     *            Envelope of buffer
70
     * @param pageManager
71
     * @param pageManagers
71 72
     *            Page manager to paginate this buffer. If page manager is null,
72 73
     *            buffer will be loaded in memory.
73 74
     * @throws CreateBufferException
74 75
     *             If there are some problems creating buffer.
75 76
     */
76 77
    public DefaultBuffer(int rows, int columns, int[] bandDataTypes, NoData[] bandNoData,
77
        IProjection projection, Envelope envelope, PageManager pageManager)
78
        IProjection projection, Envelope envelope, List<PageManager> pageManagers)
78 79
        throws CreateBufferException {
79 80
        this.bands = new ArrayList<Band>();
80 81
        this.rows = rows;
......
84 85
        try {
85 86
            if (envelope == null) {
86 87
                this.envelope =
87
                    GeometryLocator.getGeometryManager().createEnvelope(0, 0, columns, rows, Geometry.SUBTYPES.GEOM2D);
88
                    GeometryLocator.getGeometryManager().createEnvelope(0, 0, columns, rows,
89
                        Geometry.SUBTYPES.GEOM2D);
88 90
            }
89
            this.bandPageManager = pageManager;
90
            createBands(bandDataTypes, bandNoData);
91
//            this.bandPageManager = pageManagers;
92
            createBands(bandDataTypes, bandNoData, pageManagers);
91 93
        } catch (Exception e) {
92 94
            throw new CreateBufferException(e);
93 95
        }
94 96
    }
95 97

  
96
    private void createBands(int[] bandDataTypes, NoData[] bandNoData) throws BandException {
97

  
98
    private void createBands(int[] bandDataTypes, NoData[] bandNoData,
99
        List<PageManager> pageManagers) throws BandException {
100
        
98 101
        BufferManager bufferManager = BufferLocator.getBufferManager();
99 102

  
100 103
        for (int i = 0; i < bandDataTypes.length; i++) {
......
103 106
            if (bandNoData != null && i < bandNoData.length) {
104 107
                noDataBand = bandNoData[i];
105 108
            }
109
            
110
            PageManager pageManager = null;
111
            if (pageManagers != null && i < pageManagers.size()) {
112
                pageManager = pageManagers.get(i);
113
            }
106 114

  
107 115
            bands.add(bufferManager.createBand(bandDataTypes[i], this.rows, this.columns,
108
                noDataBand, this.bandPageManager));
116
                noDataBand, pageManager));
109 117
        }
110 118
    }
111 119

  
......
184 192
    @Override
185 193
    public void addBand(Band band) {
186 194

  
187
        if(band.getColumns() != this.getColumns() || band.getRows() != this.getRows()){
195
        if (band.getColumns() != this.getColumns() || band.getRows() != this.getRows()) {
188 196
            throw new IllegalArgumentException(
189 197
                "Can not add band to buffer. Band must have the same rows and columns as buffer.");
190 198
        }
......
274 282
        }
275 283

  
276 284
        List<Band> auxBands = new ArrayList<Band>(bands.size());
277
        for(int i=0; i < visited.size(); i++){
285
        for (int i = 0; i < visited.size(); i++) {
278 286
            auxBands.add(bands.get(visited.get(i)));
279 287
        }
280 288
        bands = auxBands;
......
295 303
    }
296 304

  
297 305
    @Override
298
    public Buffer convert(ICoordTrans ct, SimpleTaskStatus status) {
306
    public Buffer convert(ICoordTrans ct, SimpleTaskStatus status) throws BufferException {
299 307

  
300
//        for (Band band : bands) {
301
//            band.convert(ct);
302
//
303
//        }
308
        if (this.getEnvelope() == null) {
309
            throw new IllegalStateException(
310
                "Buffer envelope is null. A buffer allways has to have envelope");
311
        }
312

  
313
        Envelope projectedBufferEnvelope = this.getEnvelope().convert(ct);
314
        double projectedBufferCellSizeX = projectedBufferEnvelope.getLength(0) / this.columns;
315
        double projectedBufferCellSizeY = projectedBufferEnvelope.getLength(1) / this.rows;
316
        int projectedBufferRows =
317
            (int) Math.ceil(projectedBufferEnvelope.getLength(0) / projectedBufferCellSizeX);
318
        int projectedBufferColumns =
319
            (int) Math.ceil(projectedBufferEnvelope.getLength(1) / projectedBufferCellSizeY);
320

  
321
        int[] bandDataTypes = this.getBandTypes();
322
        NoData[] bandNoData = this.getBandNoData();
323
        List<PageManager> pageManagers =
324
            BufferLocator.getBufferManager().createSimpleBandPageManagerList(null,
325
                projectedBufferRows, projectedBufferColumns, bandDataTypes);
326

  
327
        Buffer projectedBuffer =
328
            BufferLocator.getBufferManager().createBuffer(projectedBufferRows,
329
                projectedBufferColumns, bandDataTypes, bandNoData, ct.getPDest(),
330
                projectedBufferEnvelope, pageManagers);
331

  
332
        // This affine transform allow us to convert pixel to coordinate and
333
        // inverse
334
        AffineTransform projectedBufferAf =
335
            calculateAffineTransform(projectedBufferEnvelope, projectedBufferRows,
336
                projectedBufferColumns);
337

  
338
        for (int row = 0; row < projectedBuffer.getRows(); row++) {
339
            for (int col = 0; col < projectedBuffer.getColumns(); col++) {
340

  
341
                // Point worldPoint = new Poin2:
342

  
343
            }
344
        }
345

  
346
        return null;
347
    }
348

  
349
    private AffineTransform calculateAffineTransform(Envelope projectedBufferEnvelope,
350
        int projectedBufferRows, int projectedBufferColumns) {
304 351
        // TODO Auto-generated method stub
305 352
        return null;
306 353
    }
307 354

  
355
    public int[] getBandTypes() {
356
        int[] bandDataTypes = new int[this.getBandCount()];
357
        for (int i = 0; i < this.bands.size(); i++) {
358
            bandDataTypes[i] = this.bands.get(i).getDataType();
359
        }
360
        return bandDataTypes;
361
    }
362

  
363
    public NoData[] getBandNoData() {
364
        NoData[] bandNoData = new NoData[this.getBandCount()];
365
        for (int i = 0; i < this.bands.size(); i++) {
366
            bandNoData[i] = this.bands.get(i).getNoData();
367
        }
368
        return bandNoData;
369
    }
370

  
308 371
    @Override
309 372
    public boolean isPaginated() {
310 373
        return bandPageManager != null;
......
312 375

  
313 376
    @Override
314 377
    public boolean isReadOnly() {
315
        if(this.bandPageManager==null){
378
        if (this.bandPageManager == null) {
316 379
            return false;
317 380
        }
318 381
        return !this.bandPageManager.isSupportedSave();

Also available in: Unified diff