Revision 6488

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider.legend/src/main/java/org/gvsig/raster/tilecache/provider/legend/TileCacheGetColorInterpretation.java
2 2

  
3 3
import org.slf4j.LoggerFactory;
4 4

  
5
import org.gvsig.fmap.dal.exception.DataException;
6
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
5 7
import org.gvsig.fmap.dal.raster.api.RasterStore;
8
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
9
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
6 10
import org.gvsig.raster.lib.legend.api.ColorInterpretation;
7 11
import org.gvsig.raster.tilecache.provider.TileCacheStoreProvider;
8 12
import org.gvsig.raster.tilecache.provider.TileStructImage;
......
57 61

  
58 62
        TileStructImage tileStructImage = tileCacheStoreProvider.getTileStructImage();
59 63

  
60
        colorInterpretation = (ColorInterpretation)tileStructImage.getColorInterpretation();
64
        try {
65
            colorInterpretation = (ColorInterpretation)tileStructImage.getColorInterpretation();
66
        } catch (ValidateDataParametersException | CreateEnvelopeException | BufferException | DataException
67
            | CloneNotSupportedException e) {
68
            logger.warn("Can't get color interpretation", e);
69
        }
61 70

  
62 71
        return colorInterpretation;
63 72
    }
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider.legend/src/main/java/org/gvsig/raster/tilecache/provider/legend/TileCacheGetColorTable.java
2 2

  
3 3
import org.slf4j.LoggerFactory;
4 4

  
5
import org.gvsig.fmap.dal.exception.DataException;
6
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
5 7
import org.gvsig.fmap.dal.raster.api.RasterStore;
8
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
9
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
6 10
import org.gvsig.raster.lib.legend.api.ColorTable;
7 11
import org.gvsig.raster.tilecache.provider.TileCacheStoreProvider;
8 12
import org.gvsig.raster.tilecache.provider.TileStructImage;
......
57 61
            (TileCacheStoreProvider) self;
58 62
        TileStructImage tileStructImage = tileCacheStoreProvider.getTileStructImage();
59 63

  
60
        colorTable = (ColorTable)tileStructImage.getColorTable();
64
        try {
65
            colorTable = (ColorTable)tileStructImage.getColorTable();
66
        } catch (ValidateDataParametersException | CreateEnvelopeException | BufferException | DataException
67
            | CloneNotSupportedException e) {
68
            logger.warn("Can't get color table", e);
69
        }
61 70

  
62 71
        return colorTable;
63 72

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider.legend/src/main/java/org/gvsig/raster/tilecache/provider/legend/TileCacheGetLegend.java
2 2

  
3 3
import org.slf4j.LoggerFactory;
4 4

  
5
import org.gvsig.fmap.dal.exception.DataException;
6
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
5 7
import org.gvsig.fmap.dal.raster.api.RasterStore;
8
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
9
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
6 10
import org.gvsig.raster.lib.legend.api.RasterLegend;
7 11
import org.gvsig.raster.tilecache.provider.TileCacheStoreProvider;
8 12
import org.gvsig.raster.tilecache.provider.TileStructImage;
......
56 60
        TileCacheStoreProvider tileCacheStoreProvider = (TileCacheStoreProvider) self;
57 61

  
58 62
        TileStructImage tileStructImage = tileCacheStoreProvider.getTileStructImage();
59
        legend = (RasterLegend) tileStructImage.getLegend();
63
        try {
64
            legend = (RasterLegend) tileStructImage.getLegend();
65
        } catch (ValidateDataParametersException | CreateEnvelopeException | BufferException | DataException
66
            | CloneNotSupportedException e) {
67
            logger.warn("Can't get legend", e);
68
        }
60 69

  
61 70
        return legend;
62 71
    }
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/TileCacheBandPageManager.java
3 3
import java.io.IOException;
4 4
import java.nio.Buffer;
5 5

  
6
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
7
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
6 8
import org.gvsig.raster.lib.buffer.api.Band;
7 9
import org.gvsig.raster.lib.buffer.api.BandInfo;
8 10
import org.gvsig.raster.lib.buffer.api.BandTileManager;
......
40 42
        int tileRow=(int)row/getRowsPerTile();
41 43
        int tileCol=(int)col/getColumnsPerTile();
42 44

  
43
        return tileStructImage.fetchTile(bandNumber, this.zoomLevel, tileRow, tileCol);
45
        try {
46
            return tileStructImage.fetchTile(bandNumber, this.zoomLevel, tileRow, tileCol);
47
        } catch (ValidateDataParametersException | CreateEnvelopeException | CloneNotSupportedException e) {
48
            throw new IOException("Can't load band.", e);
49
        }
44 50

  
45 51
    }
46 52

  
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/TileCacheStoreProviderFactory.java
38 38
import org.slf4j.LoggerFactory;
39 39

  
40 40
/**
41
 * Factory for JIMI provider
41
 * Factory for TileCache provider
42 42
 * @author dmartinezizquierdo
43 43
 *
44 44
 */
......
60 60
    public DynObject createParameters() {
61 61
        return new TileCacheStoreProviderParameters();
62 62
    }
63

  
64
    public TileCacheStoreProvider createJimiProvider(TileCacheStoreProviderParameters parameters,
65
        DataStoreProviderServices providerServices) throws InitializeException {
66
        return new TileCacheStoreProvider(parameters,providerServices);
67
    }
68

  
69
    public TileCacheStoreProviderParameters createJimiParameters(){
70
        return new TileCacheStoreProviderParameters();
71
    }
72

  
73 63
}
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
43 43
import org.w3c.dom.NodeList;
44 44

  
45 45
import org.gvsig.fmap.dal.DALFileLocator;
46
import org.gvsig.fmap.dal.DataServerExplorer;
47
import org.gvsig.fmap.dal.DataServerExplorerParameters;
46 48
import org.gvsig.fmap.dal.DataStoreProviderFactory;
47 49
import org.gvsig.fmap.dal.exception.DataException;
48 50
import org.gvsig.fmap.dal.exception.InitializeException;
49 51
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
50 52
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
53
import org.gvsig.fmap.dal.raster.api.RasterQuery;
51 54
import org.gvsig.fmap.dal.raster.api.RasterStore;
55
import org.gvsig.fmap.dal.raster.spi.NewRasterStoreParameters;
52 56
import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
53 57
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerManager;
54 58
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
......
58 62
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
59 63
import org.gvsig.fmap.geom.GeometryLocator;
60 64
import org.gvsig.fmap.geom.GeometryManager;
65
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
61 66
import org.gvsig.fmap.geom.primitive.Envelope;
62 67
import org.gvsig.raster.lib.buffer.api.Band;
63 68
import org.gvsig.raster.lib.buffer.api.Buffer;
......
66 71
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
67 72
import org.gvsig.tools.dynobject.DynObject;
68 73
import org.gvsig.tools.dynobject.exception.DynMethodException;
69
import org.gvsig.tools.dynobject.exception.DynMethodNotSupportedException;
70 74
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
71 75

  
72 76
/**
......
85 89
    private String providerName;
86 90
    private String extension;
87 91
    private SortedMap<Integer,Double> pixelSizePerZoomLevel;
88
    private SortedMap<Integer,Envelope> envelopePerZoomLevel;
92
//    private SortedMap<Integer,Envelope> envelopePerZoomLevel;
89 93
    private File tilesFolder;
90 94
    private Map<String, Tile> recentAccededTiles;
91 95

  
......
94 98
    private int[] dataTypes;
95 99

  
96 100
    private IProjection crs;
101
    // Este envelope sirve para calcular el nombre de la fila y columna del tile en la estructura de cach?.
97 102
    private Envelope structExtent;
98
    private RasterStoreProvider remoteProvider;
99 103
    private Object colorInterpretation;
100 104
    private Object legend;
101
    // Este envelope sirve para calcular el nombre de la fila y columna del tile en la estructura de cach?.
102 105
    private Object colorTable;
103 106

  
107
    private RasterStoreProvider innerProvider;
108
    private RasterQuery query;
109

  
104 110
    /**
105 111
     * @param folder
106 112
     * @param crs
107
     * @param remoteProvider
113
     * @param innerProvider
114
     * @param innerStore
108 115
     */
109
    public TileStructImage(File folder, IProjection crs, RasterStoreProvider remoteProvider){
110
      GeometryManager geoManager=GeometryLocator.getGeometryManager();
116
    public TileStructImage(File folder, IProjection crs, RasterStoreProvider innerProvider, RasterQuery query) {
117
        this.crs = crs;
118
        this.innerProvider = innerProvider;
119
        this.query = query;
120
        GeometryManager geoManager = GeometryLocator.getGeometryManager();
111 121

  
112
      this.remoteProvider = remoteProvider;
113

  
114
        this.crs=crs;
115

  
116
        envelopePerZoomLevel=new TreeMap<Integer,Envelope>();
117
        pixelSizePerZoomLevel=new TreeMap<Integer,Double>();
122
//        envelopePerZoomLevel = new TreeMap<Integer, Envelope>();
123
        pixelSizePerZoomLevel = new TreeMap<Integer, Double>();
118 124
        recentAccededTiles = new HashMap<String, Tile>();
119 125

  
120

  
121
        //FIXME
122
        File tilePropertiesFile=new File(folder, "tileCacheStruct.xml");
123
        tilesFolder=new File (folder,"V"+File.separatorChar+"Z"+File.separatorChar+"T");
126
        // FIXME
127
        File tilePropertiesFile = new File(folder, "tileCacheStruct.xml");
128
        tilesFolder = new File(folder, "V" + File.separatorChar + "Z" + File.separatorChar + "T");
129
        if(!tilesFolder.exists()){
130
            tilesFolder.mkdirs();
131
        }
124 132
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
125 133
        DocumentBuilder dBuilder;
126 134
        try {
......
137 145
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
138 146
                    Element eElement = (Element) nNode;
139 147

  
140

  
141 148
                    NamedNodeMap tileSizeAttributes = eElement.getElementsByTagName("tileSize").item(0).getAttributes();
142
                    rowsPerTile=Integer.valueOf(tileSizeAttributes.getNamedItem("rows").getNodeValue());
143
                    columnsPerTile=Integer.valueOf(tileSizeAttributes.getNamedItem("columns").getNodeValue());
149
                    rowsPerTile = Integer.valueOf(tileSizeAttributes.getNamedItem("rows").getNodeValue());
150
                    columnsPerTile = Integer.valueOf(tileSizeAttributes.getNamedItem("columns").getNodeValue());
144 151

  
145 152
                    NodeList elementsByTagName = eElement.getElementsByTagName("format");
146
                    providerName=elementsByTagName.item(0).getTextContent();
153
                    providerName = elementsByTagName.item(0).getTextContent();
147 154

  
148 155
                    NodeList structExtentList = eElement.getElementsByTagName("structExtent");
149
                    if(structExtentList.getLength()>0){
150
                        Element structExtentNode=(Element) structExtentList.item(0);
151
                        if(structExtentNode!=null){
152
                            Double minX = Double.valueOf(structExtentNode.getElementsByTagName("minX").item(0).getTextContent());
153
                            Double minY = Double.valueOf(structExtentNode.getElementsByTagName("minY").item(0).getTextContent());
154
                            Double maxX = Double.valueOf(structExtentNode.getElementsByTagName("maxX").item(0).getTextContent());
155
                            Double maxY = Double.valueOf(structExtentNode.getElementsByTagName("maxY").item(0).getTextContent());
156
                            structExtent = geoManager.createEnvelope(
157
                              minX,
158
                              minY,
159
                              maxX,
160
                              maxY,
161
                              SUBTYPES.GEOM2D);
156
                    if (structExtentList.getLength() > 0) {
157
                        Element structExtentNode = (Element) structExtentList.item(0);
158
                        if (structExtentNode != null) {
159
                            Double minX =
160
                                Double.valueOf(structExtentNode.getElementsByTagName("minX").item(0).getTextContent());
161
                            Double minY =
162
                                Double.valueOf(structExtentNode.getElementsByTagName("minY").item(0).getTextContent());
163
                            Double maxX =
164
                                Double.valueOf(structExtentNode.getElementsByTagName("maxX").item(0).getTextContent());
165
                            Double maxY =
166
                                Double.valueOf(structExtentNode.getElementsByTagName("maxY").item(0).getTextContent());
167
                            structExtent = geoManager.createEnvelope(minX, minY, maxX, maxY, SUBTYPES.GEOM2D);
162 168
                        }
163 169
                    }
164 170

  
165
                    FilesystemServerExplorerManager explorerManager = DALFileLocator.getFilesystemServerExplorerManager();
171
                    FilesystemServerExplorerManager explorerManager =
172
                        DALFileLocator.getFilesystemServerExplorerManager();
166 173
                    @SuppressWarnings("unchecked")
167 174
                    Iterator<Extension> it = explorerManager.getRegisteredProviders();
168
                    while(it.hasNext()){
175
                    while (it.hasNext()) {
169 176

  
170 177
                        Extension ext = it.next();
171 178
                        FilesystemServerExplorerProviderFactory providerFactory;
172 179
                        try {
173 180
                            providerFactory = (FilesystemServerExplorerProviderFactory) ext.create();
174
                            if(providerFactory.getName().equalsIgnoreCase(providerName)){
181
                            if (providerFactory.getName().equalsIgnoreCase(providerName)) {
175 182
                                this.factory = providerFactory;
176 183
                                break;
177 184
                            }
......
181 188
                    }
182 189

  
183 190
                    NodeList levelsTag = eElement.getElementsByTagName("levels");
184
                    Element levels = (Element)levelsTag.item(0);
185
                    NodeList levelList=levels.getElementsByTagName("level");
191
                    Element levels = (Element) levelsTag.item(0);
192
                    NodeList levelList = levels.getElementsByTagName("level");
186 193
                    for (int i = 0; i < levelList.getLength(); i++) {
187
                        Element level = (Element)levelList.item(i);
194
                        Element level = (Element) levelList.item(i);
188 195

  
189 196
                        NamedNodeMap levelAttributes = level.getAttributes();
190
                        int zoomLevel=Integer.valueOf(levelAttributes.getNamedItem("index").getNodeValue());
191
                        double pixelSize=Double.valueOf(levelAttributes.getNamedItem("pixelSize").getNodeValue());
197
                        int zoomLevel = Integer.valueOf(levelAttributes.getNamedItem("index").getNodeValue());
198
                        double pixelSize = Double.valueOf(levelAttributes.getNamedItem("pixelSize").getNodeValue());
192 199

  
193 200
                        pixelSizePerZoomLevel.put(zoomLevel, pixelSize);
194 201

  
195
                        NodeList extentList = level.getElementsByTagName("extent");
196
                        if(extentList.getLength()>0){
197
                            Element extentNode=(Element) extentList.item(0);
198
                            if(extentNode!=null){
199
                                Double minX = Double.valueOf(extentNode.getElementsByTagName("minX").item(0).getTextContent());
200
                                Double minY = Double.valueOf(extentNode.getElementsByTagName("minY").item(0).getTextContent());
201
                                Double maxX = Double.valueOf(extentNode.getElementsByTagName("maxX").item(0).getTextContent());
202
                                Double maxY = Double.valueOf(extentNode.getElementsByTagName("maxY").item(0).getTextContent());
203
                                Envelope extent = geoManager.createEnvelope(
204
                                  minX,
205
                                  minY,
206
                                  maxX,
207
                                  maxY,
208
                                  SUBTYPES.GEOM2D);
209
                                envelopePerZoomLevel.put(zoomLevel, extent);
210
                            }
211
                        }
202
//                        NodeList extentList = level.getElementsByTagName("extent");
203
//                        if (extentList.getLength() > 0) {
204
//                            Element extentNode = (Element) extentList.item(0);
205
//                            if (extentNode != null) {
206
//                                Double minX =
207
//                                    Double.valueOf(extentNode.getElementsByTagName("minX").item(0).getTextContent());
208
//                                Double minY =
209
//                                    Double.valueOf(extentNode.getElementsByTagName("minY").item(0).getTextContent());
210
//                                Double maxX =
211
//                                    Double.valueOf(extentNode.getElementsByTagName("maxX").item(0).getTextContent());
212
//                                Double maxY =
213
//                                    Double.valueOf(extentNode.getElementsByTagName("maxY").item(0).getTextContent());
214
//                                Envelope extent = geoManager.createEnvelope(minX, minY, maxX, maxY, SUBTYPES.GEOM2D);
215
//                                envelopePerZoomLevel.put(zoomLevel, extent);
216
//                            }
217
//                        }
212 218
                    }
213 219
                }
214 220
            }
215 221
        } catch (Exception e) {
216 222
            throw new RuntimeException();
217 223
        }
218

  
219 224
    }
225
//
226
//    public TileStructImage(File folder, IProjection crs, RasterStoreProvider innerProvider) {
227
//
228
//        this.innerProvider = innerProvider;
229
//        this.crs = crs;
230
//
231
//
232
//
233
//    }
220 234

  
235

  
221 236
    /**
222 237
     * @param pixelSize
223 238
     * @return The appropiate zoom level for the pizelSize
......
238 253
        //index 0 structRow, index 1 structCol
239 254
        int[] structRowCol = new int[2];
240 255

  
241
        if(envelopePerZoomLevel.isEmpty()){
256
//        if(envelopePerZoomLevel==null || envelopePerZoomLevel.isEmpty()){
242 257
            structRowCol[0] = tileRow;
243 258
            structRowCol[1] = tileCol;
244
        } else {
245
            Envelope envelopeInZoomLevel = envelopePerZoomLevel.get(zoomLevel);
246
            structRowCol[0] = (int)(-(envelopeInZoomLevel.getMaximum(DIMENSIONS.Y)-structExtent.getMaximum(DIMENSIONS.Y))/(pixelSizePerZoomLevel.get(zoomLevel)*rowsPerTile))+tileRow;
247
            structRowCol[1] = (int)((envelopeInZoomLevel.getMinimum(DIMENSIONS.X)-structExtent.getMinimum(DIMENSIONS.X))/(pixelSizePerZoomLevel.get(zoomLevel)*columnsPerTile))+tileCol;
248
        }
259
//        } else {
260
//            Envelope envelopeInZoomLevel = envelopePerZoomLevel.get(zoomLevel);
261
//            structRowCol[0] = (int)(-(envelopeInZoomLevel.getMaximum(DIMENSIONS.Y)-structExtent.getMaximum(DIMENSIONS.Y))/(pixelSizePerZoomLevel.get(zoomLevel)*rowsPerTile))+tileRow;
262
//            structRowCol[1] = (int)((envelopeInZoomLevel.getMinimum(DIMENSIONS.X)-structExtent.getMinimum(DIMENSIONS.X))/(pixelSizePerZoomLevel.get(zoomLevel)*columnsPerTile))+tileCol;
263
//        }
249 264

  
250 265
        return structRowCol;
251 266

  
......
258 273
     * @param tileRow
259 274
     * @param tileCol
260 275
     * @return Band
276
     * @throws CreateEnvelopeException
277
     * @throws CloneNotSupportedException
278
     * @throws ValidateDataParametersException
261 279
     */
262
    public Band fetchTile(int band, int zoomLevel, int tileRow, int tileCol) {
280
    public Band fetchTile(int band, int zoomLevel, int tileRow, int tileCol) throws CreateEnvelopeException, ValidateDataParametersException, CloneNotSupportedException {
263 281

  
264 282
        BufferManager bufferManager = BufferLocator.getBufferManager();
265 283
        int[] structRowCol = calculateStructRowCol(zoomLevel, tileRow, tileCol);
......
286 304
                recentAccededTiles.put(keyTile, new Tile(rasterSet, keyTile));
287 305

  
288 306
                return rasterSet.getBand(band);
289
            } catch (DataException | ValidateDataParametersException | BufferException e) {
307
            } catch (DataException | BufferException e) {
290 308
                logger.warn("Can't fetch tile: zoomLevel = " + zoomLevel + ", tileRow = " + tileRow + ", tileColumn = "
291 309
                    + tileCol + ", band = " + band + ".", e);
292 310
                return null;
......
298 316
        }
299 317
    }
300 318

  
301
    private RasterStore createTileStore(int zoomLevel, int structRow, int structCol) throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException{
319
    private RasterStore createTileStore(int zoomLevel, int structRow, int structCol)
320
        throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException,
321
        CloneNotSupportedException {
302 322

  
303 323
        File tileFile = null;
304 324
        File zoomFolder = new File(tilesFolder, String.valueOf(zoomLevel));
305
        if (zoomFolder.exists()) {
306
            File firstColumnFolder = new File(zoomFolder, String.valueOf(structCol));
307
            if (firstColumnFolder.exists()) {
308
                String rowBaseName = String.valueOf(structRow);
325
        if (!zoomFolder.exists()) {
326
            zoomFolder.mkdirs();
327
        }
328
        File firstColumnFolder = new File(zoomFolder, String.valueOf(structCol));
329
        if (!firstColumnFolder.exists()) {
330
            tileFile = requestTileFile(zoomLevel, structRow, structCol);
331
            this.extension = FilenameUtils.getExtension(tileFile.getAbsolutePath());
332
        }
333
        String rowBaseName = String.valueOf(structRow);
334
        if (this.extension == null) {
335
            File[] providerAcceptedFiles = firstColumnFolder.listFiles(factory);
336
            for (int i = 0; i < providerAcceptedFiles.length; i++) {
337
                File providerAcceptedFile = providerAcceptedFiles[i];
338
                if (FilenameUtils.getBaseName(providerAcceptedFile.getAbsolutePath()).equalsIgnoreCase(rowBaseName)) {
339
                    tileFile = providerAcceptedFile;
340
                }
341
            }
342
            if (tileFile == null || !tileFile.exists()) {
343
                tileFile = requestTileFile(zoomLevel, structRow, structCol);
344
            }
345
            this.extension = FilenameUtils.getExtension(tileFile.getAbsolutePath());
346
        } else {
347
            if (tileFile == null) {
348
                tileFile =
349
                    new File(firstColumnFolder.getAbsolutePath() + File.separatorChar + rowBaseName + "."
350
                        + this.extension);
351
            }
352
        }
353
        if (!tileFile.exists()) {
354
            tileFile = requestTileFile(zoomLevel, structRow, structCol);
355
        }
356
        RasterStore tileStore = null;
357
        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
358
        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory(providerName);
309 359

  
310
                if (this.extension == null) {
311
                    File[] providerAcceptedFiles = firstColumnFolder.listFiles(factory);
312
                    for (int i = 0; i < providerAcceptedFiles.length; i++) {
313
                        File providerAcceptedFile = providerAcceptedFiles[i];
314
                        if (FilenameUtils.getBaseName(providerAcceptedFile.getAbsolutePath()).equalsIgnoreCase(
315
                            rowBaseName)) {
316
                            tileFile = providerAcceptedFile;
317
                        }
318
                    }
319
                    this.extension = FilenameUtils.getExtension(tileFile.getAbsolutePath());
320
                } else {
360
        DynObject params = providerFactory.createParameters();
361
        if (params.getDynClass().getDynField("file") != null) {
362
            params.setDynValue("file", tileFile);
363
        }
364
        if (params.getDynClass().getDynField("crs") != null) {
365
            params.setDynValue("crs", this.crs);
366
        }
321 367

  
322
                    tileFile =
323
                        new File(firstColumnFolder.getAbsolutePath() + File.separatorChar + rowBaseName + "."
324
                            + this.extension);
325
                }
326
                if (!tileFile.exists()) {
327
                    // TODO pedirselo al proveedor remoto
328
                }
329
                RasterStore tileStore = null;
330
                DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
331
                DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory(providerName);
368
        tileStore = (RasterStore) manager.openStore(providerName, params);
369
        return tileStore;
370
    }
332 371

  
333
                DynObject params = providerFactory.createParameters();
334
                if (params.getDynClass().getDynField("file") != null) {
335
                    params.setDynValue("file", tileFile);
336
                }
337
                if (params.getDynClass().getDynField("crs") != null) {
338
                    params.setDynValue("crs", this.crs);
339
                }
372
    private File requestTileFile(int zoomLevel, int structRow, int structCol) throws CloneNotSupportedException, CreateEnvelopeException, BufferException, ValidateDataParametersException, DataException {
340 373

  
341
                tileStore = (RasterStore) manager.openStore(providerName, params);
342
                return tileStore;
343
            }
374
        RasterQuery rasterQuery = (RasterQuery) this.query.clone();
375

  
376
        Double pixelSize = this.pixelSizePerZoomLevel.get(zoomLevel);
377
        rasterQuery.setPixelSize(pixelSize);
378

  
379
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
380

  
381
        double minX = structExtent.getMinimum(DIMENSIONS.X)+structCol*(pixelSize*columnsPerTile);
382
        double minY = structExtent.getMaximum(DIMENSIONS.Y)-((structRow+1)*(pixelSize*rowsPerTile));
383
        double maxX = minX + pixelSize*columnsPerTile;
384
        double maxY = minY + pixelSize*rowsPerTile;
385

  
386
        Buffer buffer;
387

  
388
//        try {
389
            Envelope envelope = geomManager.createEnvelope(minX, minY, maxX, maxY, SUBTYPES.GEOM2D);
390
//            rasterQuery.setClip(envelope);
391
            buffer = innerProvider.createBuffer(rasterQuery);
392
            buffer = buffer.clip(envelope);
393
            buffer = buffer.createInterpolated((int)(buffer.getPixelSizeY()*buffer.getRows()/pixelSize), (int)(buffer.getPixelSizeX()*buffer.getColumns()/pixelSize), Buffer.INTERPOLATION_NearestNeighbour, null);
394
//        } catch (LocatorException | BufferException | CreateEnvelopeException e) {
395
//            logger.warn("Can't get tile file zoomLevel = "+zoomLevel+", structRow = "+structRow+", structColumn = "+structCol+".", e);
396
//            throw new RuntimeException("Can't get tile file zoomLevel = "+zoomLevel+", structRow = "+structRow+", structColumn = "+structCol+".", e);
397
//        }
398

  
399
        String providerName = "GTiff";
400
        String extension = "tif";
401

  
402
        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
403
        DataServerExplorerParameters eparams;
404
        eparams = manager.createServerExplorerParameters("FilesystemExplorer");
405

  
406
        int count = 0;
407
        StringBuilder builder = new StringBuilder();
408
        builder.append(tilesFolder);
409
        builder.append(File.separator);
410
        builder.append(zoomLevel);
411
        builder.append(File.separator);
412
        builder.append(structCol);
413
        builder.append(File.separator);
414
        builder.append(structRow);
415
        builder.append(".");
416
        builder.append(extension);
417
        String path = builder.toString();
418
        File destFile = new File(path);
419
        File parent = destFile.getParentFile();
420
        if(!parent.exists()){
421
            parent.mkdirs();
344 422
        }
345
        return null;
423
        eparams.setDynValue("initialpath", path);
424
        DataServerExplorer serverExplorer = manager.createServerExplorer(eparams);
425

  
426
        NewRasterStoreParameters params = (NewRasterStoreParameters) serverExplorer.getAddParameters(providerName);
427
        params.setDynValue("file", destFile);
428

  
429
        params.setDynValue("compress", "NONE");
430
        params.setDynValue("tfw", false);
431
        params.setDynValue("photometric", "RGB");
432
        params.setDynValue("alpha", "NON-PREMULTIPLIED");
433

  
434
        params.setBuffer(buffer);
435
        serverExplorer.add(providerName, params, true);
436

  
437
        return destFile;
346 438
    }
347 439

  
348 440
    /**
349 441
     * @return delegatedRasterStore
350
     * @throws ProviderNotRegisteredException
351
     * @throws InitializeException
442
     * @throws CloneNotSupportedException
352 443
     * @throws ValidateDataParametersException
444
     * @throws DataException
445
     * @throws BufferException
446
     * @throws CreateEnvelopeException
353 447
     */
354
    private RasterStore getDelegatedRasterStore() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException{
448
    private RasterStore getDelegatedRasterStore() throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
355 449
        int[] structRowCol = calculateStructRowCol(pixelSizePerZoomLevel.firstKey(), 0, 0);
356 450
        return createTileStore(0, structRowCol[0], structRowCol[1]);
357 451
    }
......
359 453

  
360 454
    /**
361 455
     * @return the band number
456
     * @throws CloneNotSupportedException
457
     * @throws ValidateDataParametersException
458
     * @throws DataException
459
     * @throws BufferException
460
     * @throws CreateEnvelopeException
461
     * @throws DynMethodException
362 462
     */
363
    public int getBandNumber(){
463
    public int getBandNumber() throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
364 464
        if(this.bandNumber == null){
365
            fillBandsInfo();
465
            fillStoreInfo();
366 466
        }
367 467
        return this.bandNumber;
368 468
    }
369 469

  
370 470
    /**
371 471
     * @return the data types
472
     * @throws CloneNotSupportedException
473
     * @throws ValidateDataParametersException
474
     * @throws DataException
475
     * @throws BufferException
476
     * @throws CreateEnvelopeException
477
     * @throws DynMethodException
372 478
     */
373
    public int[] getDataTypes(){
479
    public int[] getDataTypes() throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
374 480
        if(this.dataTypes == null){
375
            fillBandsInfo();
481
            fillStoreInfo();
376 482
        }
377 483
        return this.dataTypes;
378 484
    }
379 485

  
380 486
    /**
487
     * @throws CloneNotSupportedException
488
     * @throws ValidateDataParametersException
489
     * @throws DynMethodException
490
     * @throws DataException
491
     * @throws BufferException
492
     * @throws CreateEnvelopeException
381 493
     *
382 494
     */
383
    private void fillBandsInfo() {
495
    private void fillStoreInfo() throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
384 496
        RasterStore rasterStore = null;
385 497
        try {
386 498
            rasterStore = getDelegatedRasterStore();
......
389 501
            for (int i=0;i<this.bandNumber;i++){
390 502
                dataTypes[i]=rasterStore.getBandInfo(i).getDataType();
391 503
            }
392
        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
393
            logger.warn("Can't get the delegated raster store", e);
504
            try {
505
                this.colorInterpretation =
506
                    rasterStore.invokeDynMethod(RasterStore.DYNMETHOD_GETCOLORINTERPRETATION_NAME, null);
507
                this.colorTable = rasterStore.invokeDynMethod(RasterStore.DYNMETHOD_GETCOLORTABLE_NAME, null);
508
                this.legend = rasterStore.invokeDynMethod(RasterStore.DYNMETHOD_GETLEGEND_NAME, null);
509
            } catch (DynMethodException e) {
510
                logger.warn("Can't fill legend info from store.");
511
            }
512

  
394 513
        } finally {
395 514
            if(rasterStore != null){
396 515
                rasterStore.dispose();
......
404 523
     * @return rows per zoom level
405 524
     */
406 525
    public int getRows(int zoomLevel){
407
        return (int)(getEnvelopePerZoomLevel(zoomLevel).getLength(DIMENSIONS.Y)/pixelSizePerZoomLevel.get(zoomLevel));
526
        return (int)(getEnvelope().getLength(DIMENSIONS.Y)/pixelSizePerZoomLevel.get(zoomLevel));
408 527
    }
409 528

  
410 529
    /**
......
412 531
     * @return columns per zoom level
413 532
     */
414 533
    public int getColumns(int zoomLevel){
415
        return (int)(getEnvelopePerZoomLevel(zoomLevel).getLength(DIMENSIONS.X)/pixelSizePerZoomLevel.get(zoomLevel));
534
        return (int)(this.getEnvelope().getLength(DIMENSIONS.X)/pixelSizePerZoomLevel.get(zoomLevel));
416 535
    }
417 536

  
418 537
    /**
419
     * @param zoomLevel
420 538
     * @return envelope per zoom level
421 539
     */
422
    public Envelope getEnvelopePerZoomLevel(int zoomLevel){
423
        Envelope envelope = envelopePerZoomLevel.get(zoomLevel);
424
        if(envelope==null){
540
    public Envelope getEnvelope(){
541
//        Envelope envelope = null;
542

  
543
//        if(envelopePerZoomLevel != null){
544
//            envelope = envelopePerZoomLevel.get(zoomLevel);
545
//        }
546

  
547
//        if(envelope == null){
425 548
            return structExtent;
426
        }
427
        return envelope;
549
//        }
550
//
551
//        return envelope;
428 552
    }
429 553

  
430 554
    /**
......
474 598
    /**
475 599
     * @return the color interpretation
476 600
     * @throws DynMethodException
601
     * @throws CloneNotSupportedException
602
     * @throws ValidateDataParametersException
603
     * @throws DataException
604
     * @throws BufferException
605
     * @throws CreateEnvelopeException
477 606
     */
478
    public Object getColorInterpretation() throws DynMethodException {
607
    public Object getColorInterpretation() throws DynMethodException, ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
479 608
        if(this.colorInterpretation == null){
480
            RasterStore delegatedRasterStore = null;
481
            try {
482
                delegatedRasterStore = getDelegatedRasterStore();
483
            } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
484
                logger.warn("Can't get raster store", e);
485
            }
486
            if (delegatedRasterStore != null) {
487
                this.colorInterpretation =
488
                    delegatedRasterStore.invokeDynMethod(RasterStore.DYNMETHOD_GETCOLORINTERPRETATION_NAME, null);
489
            }
609
            fillStoreInfo();
490 610
        }
491 611
        return this.colorInterpretation;
492 612
    }
......
495 615
     * @return the color table
496 616
     * @throws ValidateDataParametersException
497 617
     * @throws DynMethodException
618
     * @throws CloneNotSupportedException
619
     * @throws DataException
620
     * @throws BufferException
621
     * @throws CreateEnvelopeException
498 622
     * @throws InitializeException
499 623
     * @throws ProviderNotRegisteredException
500 624
     */
501
    public Object getColorTable() throws DynMethodException {
625
    public Object getColorTable() throws DynMethodException, ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
502 626
        if (this.colorTable == null) {
503

  
504
            RasterStore delegatedRasterStore = null;
505
            try {
506
                delegatedRasterStore = getDelegatedRasterStore();
507
            } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
508
                logger.warn("Can't get raster store {}.", e);
509
            }
510
            if (delegatedRasterStore != null) {
511
                this.colorTable = delegatedRasterStore.invokeDynMethod(RasterStore.DYNMETHOD_GETCOLORTABLE_NAME, null);
512
            }
627
            fillStoreInfo();
513 628
        }
514 629
        return this.colorTable;
515 630
    }
......
518 633
     * @return the legend
519 634
     * @throws ValidateDataParametersException
520 635
     * @throws DynMethodException
636
     * @throws CloneNotSupportedException
637
     * @throws DataException
638
     * @throws BufferException
639
     * @throws CreateEnvelopeException
521 640
     * @throws InitializeException
522 641
     * @throws ProviderNotRegisteredException
523 642
     */
524
    public Object getLegend() throws DynMethodException{
643
    public Object getLegend() throws DynMethodException, ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
525 644
        if(this.legend == null){
526
            RasterStore delegatedRasterStore = null;
527
            try {
528
                delegatedRasterStore = getDelegatedRasterStore();
529
            } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
530
                logger.warn("Can't get raster store {}.", e);
531
            }
532
            if (delegatedRasterStore != null) {
533
                this.legend = delegatedRasterStore.invokeDynMethod(RasterStore.DYNMETHOD_GETLEGEND_NAME, null);
534
            }
645
            fillStoreInfo();
535 646
        }
536 647
        return this.legend;
537 648
    }
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/TileCacheLibrary.java
43 43
 */
44 44
public class TileCacheLibrary extends AbstractLibrary {
45 45

  
46
    public static int                 DEFAULT_LEVELS       = 25;
47
    public static int                 DEFAULT_TILEWIDTH    = 256;
48
    public static int                 DEFAULT_TILEHEIGHT   = 256;
49

  
50

  
46 51
    @Override
47 52
    public void doRegistration() {
48 53
        registerAsServiceOf(DALLibrary.class);
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/TileCacheStoreProvider.java
37 37
import org.gvsig.fmap.dal.DataStoreNotification;
38 38
import org.gvsig.fmap.dal.FileHelper;
39 39
import org.gvsig.fmap.dal.exception.CloseException;
40
import org.gvsig.fmap.dal.exception.DataException;
40 41
import org.gvsig.fmap.dal.exception.InitializeException;
41 42
import org.gvsig.fmap.dal.exception.OpenException;
42 43
import org.gvsig.fmap.dal.exception.ReadException;
......
45 46
import org.gvsig.fmap.dal.raster.api.BandDescriptor;
46 47
import org.gvsig.fmap.dal.raster.api.BandQuery;
47 48
import org.gvsig.fmap.dal.raster.api.RasterQuery;
49
import org.gvsig.fmap.dal.raster.api.RasterStore;
48 50
import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProvider;
49
import org.gvsig.fmap.dal.resource.ResourceAction;
50
import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
51
import org.gvsig.fmap.dal.raster.spi.RasterCacheStoreProvider;
52
import org.gvsig.fmap.dal.raster.spi.RasterStoreProvider;
51 53
import org.gvsig.fmap.dal.resource.file.FileResource;
52 54
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
53 55
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
54 56
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
57
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
55 58
import org.gvsig.fmap.geom.primitive.Envelope;
56 59
import org.gvsig.metadata.MetadataLocator;
57 60
import org.gvsig.metadata.MetadataManager;
......
72 75

  
73 76
/**
74 77
 * Provider for Tile Cache
78
 *
75 79
 * @author dmartinezizquierdo
76 80
 *
77 81
 */
78
public class TileCacheStoreProvider extends AbstractRasterStoreProvider implements
79
ResourceConsumer{
82
public class TileCacheStoreProvider extends AbstractRasterStoreProvider implements RasterCacheStoreProvider,
83
    ResourceConsumer {
80 84

  
81
    private static final Logger logger =
82
        LoggerFactory.getLogger(TileCacheStoreProvider.class);
85
    private static final Logger logger = LoggerFactory.getLogger(TileCacheStoreProvider.class);
83 86

  
84 87
    public static String NAME = "TileCache";
85 88
    public static String DESCRIPTION = "Tile cache provider";
......
91 94
    private TileStructImage tileStructImage = null;
92 95

  
93 96
    private Envelope envelope = null;
94
    private IProjection projection= null;
97
    private IProjection projection = null;
95 98

  
96 99
    Map<Integer,List<PageManager>> pageManagersPerZoomLevel = null;
97 100

  
101
//    private RasterStore innerStore;
98 102

  
99
    protected static void registerMetadataDefinition()
100
        throws MetadataException {
103
    private RasterStoreProvider innerProvider;
104
    private int bandsNumber;
105

  
106
    protected static void registerMetadataDefinition() throws MetadataException {
101 107
        MetadataManager manager = MetadataLocator.getMetadataManager();
102 108
        if (manager.getDefinition(METADATA_DEFINITION_NAME) == null) {
103 109
            manager.addDefinition(METADATA_DEFINITION_NAME,
104
                TileCacheStoreProviderParameters.class
105
                    .getResourceAsStream("TileCacheMetadata.xml"),
110
                TileCacheStoreProviderParameters.class.getResourceAsStream("TileCacheMetadata.xml"),
106 111
                TileCacheStoreProviderParameters.class.getClassLoader());
107 112
        }
108 113
    }
109 114

  
110
    public TileCacheStoreProvider(TileCacheStoreProviderParameters params,
111
        DataStoreProviderServices storeServices)
115
    /**
116
     * @param params
117
     * @param storeServices
118
     * @throws InitializeException
119
     */
120
    public TileCacheStoreProvider(TileCacheStoreProviderParameters params, DataStoreProviderServices storeServices)
112 121
        throws InitializeException {
113
        super(
114
                params,
115
                storeServices,
116
                FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
117
        );
122
        super(params, storeServices, FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME));
118 123
        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
119 124
        this.taskStatus = manager.createDefaultSimpleTaskStatus("TileCache");
120 125
        this.init(params, storeServices);
121 126
    }
122 127

  
123
    protected TileCacheStoreProvider(TileCacheStoreProviderParameters params,
124
            DataStoreProviderServices storeServices, DynObject metadata)
125
            throws InitializeException {
128
    protected TileCacheStoreProvider(TileCacheStoreProviderParameters params, DataStoreProviderServices storeServices,
129
        DynObject metadata) throws InitializeException {
126 130
        super(params, storeServices, metadata);
127 131
        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
128 132
        this.taskStatus = manager.createDefaultSimpleTaskStatus("TileCache");
......
131 135

  
132 136
    protected void init(TileCacheStoreProviderParameters params,
133 137
        DataStoreProviderServices storeServices) throws InitializeException {
138
//        store = (RasterStore) storeServices.getStore();
139
        bandsNumber = ((RasterStore)storeServices).getBands();
140

  
134 141
        if (params == null) {
135 142
            throw new InitializeException(
136 143
                new NullPointerException("params is null"));
......
138 145

  
139 146
        this.projection=params.getCRS();
140 147

  
141
        File cacheFolder=null;
148
//      String rcacheDir = Launcher.getAppHomeDir() + File.separator + "gvsig_rcache";
142 149

  
143
        //FIXME: Get appropriate folder to cache tiles
144
        cacheFolder = new File("/home/paco/data/cartography/raster/tile-valencia1980");
145 150

  
151
//      Envelope storeEnvelope = store.getEnvelope();
152
//      store.getRasterSet().getPixelSizeX();
153

  
154
      File cacheFolder = (File) params.getDynValue(TileCacheStoreProviderParameters.TILECACHE_CACHEFOLDER_PARAMTER_NAME);
155

  
146 156
        resource = this.createResource(
147 157
            FileResource.NAME,
148 158
            new Object[] { cacheFolder.getAbsolutePath() }
......
158 168

  
159 169
    @Override
160 170
    public BandDescriptor getBandDescriptor(int band) {
161
        if(band > this.getBands()){
171
        if (band > this.getBands()) {
162 172
            throw new IllegalArgumentException("Invalid band");
163 173
        }
164
        return getStoreServices().createBandDescriptor(band,
165
            new ArrayList<BandAttributeDescriptor>());
174
        return getStoreServices().createBandDescriptor(band, new ArrayList<BandAttributeDescriptor>());
166 175
    }
167 176

  
168 177
    @Override
169 178
    public int getBands() {
170
        return tileStructImage.getBandNumber();
179
        return bandsNumber;
171 180
    }
172 181

  
173 182
    @Override
......
176 185
        int[] bandDataTypes;
177 186
        List<PageManager> pageManagers = new ArrayList<PageManager>();
178 187
        NoData[] bandNoData;
179
//        if (rasterQuery != null) {
180
            List<BandQuery> bands;
181
            bands = rasterQuery.getBands();
182
            bandDataTypes = new int[bands.size()];
183
            bandNoData = new NoData[bands.size()];
188
        // if (rasterQuery != null) {
189
        List<BandQuery> bands;
190
        bands = rasterQuery.getBands();
191
        bandDataTypes = new int[bandsNumber];
192
        bandNoData = new NoData[bandsNumber];
184 193

  
185
            int zoomLevel = tileStructImage.getZoomLvlForPixelSize(rasterQuery.getPixelSize());
186
            List<PageManager> pageManagersInZoom = getPageManagersInZoom(zoomLevel);
187
            for (BandQuery bandQuery : bands) {
188
                //FIXME:
189
                int band = bandQuery.getBand();
190
                bandDataTypes[band] = tileStructImage.getDataTypes()[band];
191
                bandNoData[band] = null;
192
                pageManagers.add(pageManagersInZoom.get(band));
194
        int zoomLevel = tileStructImage.getZoomLvlForPixelSize(rasterQuery.getPixelSize());
195
        List<PageManager> pageManagersInZoom;
196
        int[] tileStructDataTypes;
197
        try {
198
            pageManagersInZoom = getPageManagersInZoom(zoomLevel);
199
            tileStructDataTypes = tileStructImage.getDataTypes();
200
        } catch (ValidateDataParametersException | CreateEnvelopeException | DataException | CloneNotSupportedException e) {
201
            throw new BufferException(e);
202
        }
203
        try {
204
            for(int i = 0; i<tileStructImage.getBandNumber(); i++){
205
                bandDataTypes[i] = tileStructDataTypes[i];
206
                bandNoData[i] = null;
207
                pageManagers.add(pageManagersInZoom.get(i));
193 208
            }
194
//        } else {
195
//            int bands = getBands();
196
//            bandDataTypes = new int[bands];
197
//            bandNoData = new NoData[bands];
198
//            for (int i = 0; i < bands; i++) {
199
//                bandDataTypes[i] = tileStructImage.getDataTypes()[i];
200
//                bandNoData[i] = null;
201
//                pageManagers.add(new TileCacheBandPageManager(tileStructImage, rasterQuery.getPixelSize(), i));
202
//            }
209
        } catch (ValidateDataParametersException | CreateEnvelopeException | DataException | CloneNotSupportedException e) {
210
            throw new BufferException(e);
211
        }
212

  
213
//        for (BandQuery bandQuery : bands) {
214
//            // FIXME:
215
//            int band = bandQuery.getBand();
216
//            bandDataTypes[band] = tileStructDataTypes[band];
217
//            bandNoData[band] = null;
218
//            pageManagers.add(pageManagersInZoom.get(band));
203 219
//        }
204
        envelope=tileStructImage.getEnvelopePerZoomLevel(zoomLevel);
220
        // } else {
221
        // int bands = getBands();
222
        // bandDataTypes = new int[bands];
223
        // bandNoData = new NoData[bands];
224
        // for (int i = 0; i < bands; i++) {
225
        // bandDataTypes[i] = tileStructImage.getDataTypes()[i];
226
        // bandNoData[i] = null;
227
        // pageManagers.add(new TileCacheBandPageManager(tileStructImage,
228
        // rasterQuery.getPixelSize(), i));
229
        // }
230
        // }
231
        envelope = tileStructImage.getEnvelope();
205 232
        Buffer buffer =
206
            bufferManager.createBuffer(tileStructImage.getRows(zoomLevel), tileStructImage.getColumns(zoomLevel), bandDataTypes, bandNoData,
207
                projection, envelope, pageManagers);
233
            bufferManager.createBuffer(tileStructImage.getRows(zoomLevel), tileStructImage.getColumns(zoomLevel),
234
                bandDataTypes, bandNoData, projection, envelope, pageManagers);
208 235

  
209 236
        return buffer;
210 237
    }
211 238

  
212
    private List<PageManager> getPageManagersInZoom(int zoomLevel) {
239
    private List<PageManager> getPageManagersInZoom(int zoomLevel) throws ValidateDataParametersException, CreateEnvelopeException, BufferException, DataException, CloneNotSupportedException {
213 240
        List<PageManager> pageManagersInZoom = this.pageManagersPerZoomLevel.get(zoomLevel);
214 241
        if (pageManagersInZoom == null) {
215 242
            pageManagersInZoom = new ArrayList<PageManager>();
......
221 248
        return pageManagersInZoom;
222 249
    }
223 250

  
224

  
225 251
    @Override
226 252
    public BandInfo getBandInfo(int band) {
227
        //FIXME
228
        return null;//tileStructImage.getBandInfo(band);
253
        // FIXME
254
        return null;// tileStructImage.getBandInfo(band);
229 255
    }
230 256

  
231 257
    @Override
232
    public DataServerExplorer getExplorer()
233
        throws ReadException, ValidateDataParametersException {
234
//        DataManager manager = DALLocator.getDataManager();
235
//        FilesystemServerExplorerParameters params;
236
//        try {
237
//            params = (FilesystemServerExplorerParameters) manager
238
//            .createServerExplorerParameters(FilesystemServerExplorer.NAME);
239
//            params.setRoot(this.getTileCacheParameters().getFile().getParent());
240
//            return manager.openServerExplorer(FilesystemServerExplorer.NAME,params);
241
//        } catch (DataException e) {
242
//            throw new ReadException(this.getProviderName(), e);
243
//        } catch (ValidateDataParametersException e) {
244
//            throw new ReadException(this.getProviderName(), e);
245
//        }
246
        //FIXME
258
    public DataServerExplorer getExplorer() throws ReadException, ValidateDataParametersException {
259
        // DataManager manager = DALLocator.getDataManager();
260
        // FilesystemServerExplorerParameters params;
261
        // try {
262
        // params = (FilesystemServerExplorerParameters) manager
263
        // .createServerExplorerParameters(FilesystemServerExplorer.NAME);
264
        // params.setRoot(this.getTileCacheParameters().getFile().getParent());
265
        // return
266
        // manager.openServerExplorer(FilesystemServerExplorer.NAME,params);
267
        // } catch (DataException e) {
268
        // throw new ReadException(this.getProviderName(), e);
269
        // } catch (ValidateDataParametersException e) {
270
        // throw new ReadException(this.getProviderName(), e);
271
        // }
272
        // FIXME
247 273
        return null;
248 274
    }
249 275

  
......
251 277
        if (this.tileStructImage != null) {
252 278
            return;
253 279
        }
254
        openEver();
280
//        openEver();
255 281
    }
256 282

  
257
    private void openEver() throws OpenException {
258
        try {
259

  
260
            getResource().execute(new ResourceAction() {
261

  
262
                public Object run() throws Exception {
263

  
264
                    try {
265
                        File folder = (File) resource.get();
266
                        resource.notifyOpen();
267

  
268
                        //FIXME
269
                        tileStructImage = new TileStructImage(folder,getTileCacheParameters().getCRS());
270
                        pageManagersPerZoomLevel = new HashMap<Integer, List<PageManager>>();
271

  
272
//                        if (getTileCacheParameters().getWldParams()!=null){
273
//                            envelope=createWLDEnvelope(getTileCacheParameters().getWldParams());
274
//                        }else{
275
//                        envelope =
276
//                            GeometryLocator.getGeometryManager().createEnvelope(0, 0,
277
//                                tileStructImage.getColumns(), tileStructImage.getRows(), Geometry.SUBTYPES.GEOM2D);
278
//                        }
279

  
280
                        resource.notifyClose();
281

  
282
                        resource.setData(tileStructImage);
283
                    } finally  {
284
                        //TODO
285
                    }
286
                    return null;
287
                }
288

  
289
            });
290
        } catch (Exception e) {
291
            this.tileStructImage = null;
292
            try {
293
                throw new OpenException(resource.getName(), e);
294
            } catch (AccessResourceException e1) {
295
                throw new OpenException(getProviderName(), e);
296
            }
297
        } finally {
298
            this.taskStatus.remove();
299
        }
300
    }
301

  
302
//    private Envelope createWLDEnvelope(List<String> wldParams){
303
//        double pixelSizeX=Double.valueOf(wldParams.get(0));
304
//        double rotationAxisY = Double.valueOf(wldParams.get(1));
305
//        double rotationAxisX = Double.valueOf(wldParams.get(2));
306
//        double pixelSizeY = Double.valueOf(wldParams.get(3));
307
//        double upperLeftPixelCenterCoordX = Double.valueOf(wldParams.get(4));
308
//        double upperLeftPixelCenterCoordY = Double.valueOf(wldParams.get(5));
283
//    private void openEver() throws OpenException {
284
//        try {
309 285
//
310
//        if (0.0 != rotationAxisX || 0.0 != rotationAxisY) {
311
//            logger.warn(
312
//                "Rotation in wld file not implemented yet. It will be ignored");
313
//        }
286
//            getResource().execute(new ResourceAction() {
314 287
//
315
//        double leftMostX = upperLeftPixelCenterCoordX - (pixelSizeX * 0.5);
316
//        double upperMostY = upperLeftPixelCenterCoordY - (pixelSizeY * 0.5);
317
//        double height=tileStructImage.getRows()*pixelSizeY;
318
//        double width=tileStructImage.getColumns()*pixelSizeX;
288
//                public Object run() throws Exception {
319 289
//
320
//        // double minX, double minY, double maxX, double maxY, int subType
321
//        try {
322
//            envelope = GeometryLocator.getGeometryManager().createEnvelope(
323
//                Math.min(leftMostX,leftMostX + width),
324
//                Math.min(upperMostY,upperMostY + height),
325
//                Math.max(leftMostX,leftMostX + width),
326
//                Math.max(upperMostY,upperMostY + height),
327
//                Geometry.SUBTYPES.GEOM2D);
328
//        } catch (LocatorException | CreateEnvelopeException e) {
329
//            logger.warn(
330
//                "Failed to create envelope from wld file with coords: minx:"+leftMostX+
331
//                ", miny:"+upperMostY+", maxX: "+leftMostX + width+", maxY: "+upperMostY + height);
332
//            e.printStackTrace();
290
//                    try {
291
//                        File folder = (File) resource.get();
292
//                        resource.notifyOpen();
293
//
294
//                        // FIXME
295
//                        tileStructImage = new TileStructImage(folder, getTileCacheParameters().getCRS(), null);
296
//                        pageManagersPerZoomLevel = new HashMap<Integer, List<PageManager>>();
297
//
298
//                        // if (getTileCacheParameters().getWldParams()!=null){
299
//                        // envelope=createWLDEnvelope(getTileCacheParameters().getWldParams());
300
//                        // }else{
301
//                        // envelope =
302
//                        // GeometryLocator.getGeometryManager().createEnvelope(0,
303
//                        // 0,
304
//                        // tileStructImage.getColumns(),
305
//                        // tileStructImage.getRows(), Geometry.SUBTYPES.GEOM2D);
306
//                        // }
307
//
308
//                        resource.notifyClose();
309
//
310
//                        resource.setData(tileStructImage);
311
//                    } finally {
312
//                        // TODO
313
//                    }
314
//                    return null;
315
//                }
316
//
317
//            });
318
//        } catch (Exception e) {
319
//            this.tileStructImage = null;
320
//            try {
321
//                throw new OpenException(resource.getName(), e);
322
//            } catch (AccessResourceException e1) {
323
//                throw new OpenException(getProviderName(), e);
324
//            }
325
//        } finally {
326
//            this.taskStatus.remove();
333 327
//        }
334
//
335
//        return envelope;
336 328
//    }
337 329

  
330
    // private Envelope createWLDEnvelope(List<String> wldParams){
331
    // double pixelSizeX=Double.valueOf(wldParams.get(0));
332
    // double rotationAxisY = Double.valueOf(wldParams.get(1));
333
    // double rotationAxisX = Double.valueOf(wldParams.get(2));
334
    // double pixelSizeY = Double.valueOf(wldParams.get(3));
335
    // double upperLeftPixelCenterCoordX = Double.valueOf(wldParams.get(4));
336
    // double upperLeftPixelCenterCoordY = Double.valueOf(wldParams.get(5));
337
    //
338
    // if (0.0 != rotationAxisX || 0.0 != rotationAxisY) {
339
    // logger.warn(
340
    // "Rotation in wld file not implemented yet. It will be ignored");
341
    // }
342
    //
343
    // double leftMostX = upperLeftPixelCenterCoordX - (pixelSizeX * 0.5);
344
    // double upperMostY = upperLeftPixelCenterCoordY - (pixelSizeY * 0.5);
345
    // double height=tileStructImage.getRows()*pixelSizeY;
346
    // double width=tileStructImage.getColumns()*pixelSizeX;
347
    //
348
    // // double minX, double minY, double maxX, double maxY, int subType
349
    // try {
350
    // envelope = GeometryLocator.getGeometryManager().createEnvelope(
351
    // Math.min(leftMostX,leftMostX + width),
352
    // Math.min(upperMostY,upperMostY + height),
353
    // Math.max(leftMostX,leftMostX + width),
354
    // Math.max(upperMostY,upperMostY + height),
355
    // Geometry.SUBTYPES.GEOM2D);
356
    // } catch (LocatorException | CreateEnvelopeException e) {
357
    // logger.warn(
358
    // "Failed to create envelope from wld file with coords: minx:"+leftMostX+
359
    // ", miny:"+upperMostY+", maxX: "+leftMostX + width+", maxY: "+upperMostY +
360
    // height);
361
    // e.printStackTrace();
362
    // }
363
    //
364
    // return envelope;
365
    // }
366

  
338 367
    @Override
339 368
    public Object getDynValue(String name) throws DynFieldNotFoundException {
340
        if( DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name) ) {
369
        if (DataStore.METADATA_ENVELOPE.equalsIgnoreCase(name)) {
341 370
            return this.envelope;
342
        } else if( DataStore.METADATA_CRS.equalsIgnoreCase(name) ) {
371
        } else if (DataStore.METADATA_CRS.equalsIgnoreCase(name)) {
343 372
            IProjection pro = this.getTileCacheParameters().getCRS();
344 373
            if (pro != null) {
345 374
                return pro;
......
358 387
        return this.resource;
359 388
    }
360 389

  
361

  
362 390
    @Override
363 391
    public Object getSourceId() {
364
        return this.getTileCacheParameters().getName();
392
        return this.getTileCacheParameters().getCacheFolder();
365 393
    }
366 394

  
367 395
    @Override
......
371 399

  
372 400
    @Override
373 401
    public String getName() {
374
        String name = this.getTileCacheParameters().getName();
375
        return name; //FilenameUtils.getBaseName(name);
402
        String name = this.getTileCacheParameters().getCacheFolder().getName();
403
        return name; // FilenameUtils.getBaseName(name);
376 404

  
377 405
    }
378 406

  
379 407
    @Override
380 408
    public String getFullName() {
381
        return this.getTileCacheParameters().getName();
409
        return this.getTileCacheParameters().getCacheFolder().getAbsolutePath();
382 410
    }
383 411

  
384 412
    @Override
......
395 423
     * gvsig.fmap.dal.resource.spi.ResourceProvider)
396 424
     */
397 425
    public void resourceChanged(ResourceProvider resource) {
398
        this.getStoreServices().notifyChange(
399
            DataStoreNotification.RESOURCE_CHANGED,
400
            resource);
426
        this.getStoreServices().notifyChange(DataStoreNotification.RESOURCE_CHANGED, resource);
401 427
    }
402 428

  
403 429
    @Override
404
    /* (non-Javadoc)
405
     * @see org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider#doDispose()
430
    /*
431
     * (non-Javadoc)
432
     *
433
     * @see
434
     * org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider#doDispose
435
     * ()
406 436
     */
407 437
    protected void doDispose() throws BaseException {
408 438
        super.doDispose();
409 439
        resource.removeConsumer(this);
410 440
    }
411 441

  
442
    /**
443
     * @return TileStructImage
444
     */
412 445
    public TileStructImage getTileStructImage() {
413 446
        return tileStructImage;
414 447
    }
448

  
449
    @Override
450
    public void apply(RasterStoreProvider provider, IProjection crs, RasterQuery query) throws DataException {
451

  
452
        this.innerProvider = provider;
453
        pageManagersPerZoomLevel = new HashMap<Integer, List<PageManager>>();
454

  
455
        this.tileStructImage =
456
            new TileStructImage(((FileResource)resource).getFile(), crs, provider, query);
457
    }
458

  
459
    @Override
460
    public RasterStoreProvider getInnerProvider() {
461
        return innerProvider;
462
    }
415 463
}
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/TileCacheStoreProviderParameters.java
43 43
import org.slf4j.LoggerFactory;
44 44

  
45 45
/**
46
 * Parameters to create a JIMI Provider
46
 * Parameters to create a TileCache Provider
47 47
 * @author dmartinezizquierdo
48 48
 *
49 49
 */
......
53 53
    private static final Logger logger = LoggerFactory.getLogger(TileCacheStoreProviderParameters.class);
54 54

  
55 55
    public static final String PARAMETERS_DEFINITION_NAME = "TileCacheStoreProviderParameters";
56
    public static final String TILECACHE_NAME_PARAMTER_NAME = "name";
56
    public static final String TILECACHE_CACHEFOLDER_PARAMTER_NAME = "cacheFolder";
57 57
    public static final String CRS_PARAMTER_NAME = "crs";
58 58
    public static final String WLD_PARAMS_NAME= "wldParams";
59 59

  
......
90 90

  
91 91
    @Override
92 92
    public boolean isValid() {
93
        return (this.getName() != null);
93
        return (this.getCacheFolder() != null);
94 94
    }
95 95

  
96 96
    @Override
......
98 98
        return this.getDynClass().getDescription();
99 99
    }
100 100

  
101
    public String getName() {
102
        return (String) this.getDynValue(TILECACHE_NAME_PARAMTER_NAME);
101
    public File getCacheFolder() {
102
        return (File) this.getDynValue(TILECACHE_CACHEFOLDER_PARAMTER_NAME);
103 103
    }
104 104

  
105
    public void setName(String name) {
106
        this.setDynValue(TILECACHE_NAME_PARAMTER_NAME, name);
105
    public void setCacheFolder(File cacheFolder) {
106
        this.setDynValue(TILECACHE_CACHEFOLDER_PARAMTER_NAME, cacheFolder);
107 107
    }
108 108

  
109 109
    /**
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider/src/main/resources/org/gvsig/raster/tilecache/provider/TileCacheParameters.xml
8 8
      </extends>
9 9
      <description>Store the parameters need to open a tile cache file</description>
10 10
      <fields>
11
        <field name="name" type="string" mandatory="true" group="Basic">
11
        <field name="cacheFolder" type="folder" mandatory="true" group="Basic">
12 12
          <description>Name to identify the tile structure</description>
13 13
        </field>
14 14
        <field name="crs" type="crs" mandatory="true" group="Basic">
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.provider/pom.xml
28 28
   <groupId>com.sun</groupId>
29 29
   <artifactId>jimi</artifactId>
30 30
  </dependency>
31
<!--   <dependency>
32
    <groupId>org.gvsig</groupId>
33
    <artifactId>org.gvsig.andami</artifactId>
34
  </dependency> -->
31 35
</dependencies>
32 36
</project>
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/java/org/gvsig/raster/tilecache/app/mainplugin/AddTestRasterLayerExtension.java
1 1
package org.gvsig.raster.tilecache.app.mainplugin;
2 2

  
3 3
import java.io.File;
4
import java.io.IOException;
5
import java.security.MessageDigest;
6
import java.security.NoSuchAlgorithmException;
7
import java.util.ArrayList;
8
import java.util.HashMap;
9
import java.util.List;
10
import java.util.Map;
4 11

  
12
import javax.xml.parsers.DocumentBuilder;
13
import javax.xml.parsers.DocumentBuilderFactory;
14
import javax.xml.parsers.ParserConfigurationException;
15
import javax.xml.transform.Transformer;
16
import javax.xml.transform.TransformerException;
17
import javax.xml.transform.TransformerFactory;
18
import javax.xml.transform.dom.DOMSource;
19
import javax.xml.transform.stream.StreamResult;
20

  
5 21
import org.slf4j.Logger;
6 22
import org.slf4j.LoggerFactory;
23
import org.w3c.dom.Attr;
24
import org.w3c.dom.Document;
25
import org.w3c.dom.Element;
7 26

  
8 27
import org.gvsig.andami.IconThemeHelper;
28
import org.gvsig.andami.Launcher;
9 29
import org.gvsig.andami.plugins.Extension;
10 30
import org.gvsig.app.ApplicationLocator;
11 31
import org.gvsig.app.ApplicationManager;
......
22 42
import org.gvsig.fmap.dal.exception.InitializeException;
23 43
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
24 44
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
45
import org.gvsig.fmap.dal.raster.RasterStoreProviderFactory;
46
import org.gvsig.fmap.dal.raster.api.RasterSet;
25 47
import org.gvsig.fmap.dal.raster.api.RasterStore;
26 48
import org.gvsig.fmap.dal.raster.spi.NewRasterStoreParameters;
27 49
import org.gvsig.fmap.dal.spi.DALSPILocator;
28 50
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
51
import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
52
import org.gvsig.fmap.geom.primitive.Envelope;
29 53
import org.gvsig.fmap.mapcontext.MapContext;
30 54
import org.gvsig.fmap.mapcontext.MapContextLocator;
31 55
import org.gvsig.fmap.mapcontext.MapContextManager;
......
34 58
import org.gvsig.fmap.mapcontrol.MapControl;
35 59
import org.gvsig.raster.lib.buffer.api.Buffer;
36 60
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
61
import org.gvsig.raster.tilecache.provider.TileCacheStoreProvider;
62
import org.gvsig.tools.ToolsLocator;
37 63
import org.gvsig.tools.dynobject.DynObject;
38 64

  
39 65
/**
......
65 91
        final MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
66 92
        FLayer layer = null;
67 93
        DataManager dataManager = DALLocator.getDataManager();
68
        DataStore dataStore = openTileCache();
94
//        DataStore dataStore = openFileCached(new File("/home/paco/data/cartography/raster/ecw/valencia_1980_tif.tif"));
95
        DataStore dataStore = openFileCached(new File("/home/paco/data/Testdata/raster/JPG/relieve_andalucia.png"));
69 96
        String layerName = dataStore.getName();
70 97
        try {
71 98
            layer = mapContextManager.createLayer(layerName, dataStore);
......
259 286
        return store;
260 287
    }
261 288

  
289
    private RasterStore openFileCached(File file){
290
        DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
291
//        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("GTiff");
292
        DataStoreProviderFactory providerFactory = manager.getStoreProviderFactory("JIMI");
293
        DynObject params = providerFactory.createParameters();
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff