Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wmts / trunk / org.gvsig.raster.wmts / org.gvsig.raster.wmts.app.wmtsclient / src / main / java / org / gvsig / raster / wmts / app / wmtsclient / layer / FLyrWMTS.java @ 4439

History | View | Annotate | Download (21.6 KB)

1 2485 nbrodin
package org.gvsig.raster.wmts.app.wmtsclient.layer;
2
3
import java.awt.Dimension;
4
import java.awt.Graphics2D;
5
import java.awt.Image;
6
import java.awt.Point;
7
import java.awt.geom.Point2D;
8
import java.awt.geom.Rectangle2D;
9
import java.awt.image.BufferedImage;
10
import java.lang.ref.WeakReference;
11 4272 fdiaz
import java.net.URI;
12
import java.net.URISyntaxException;
13 2485 nbrodin
import java.util.ArrayList;
14
import java.util.HashMap;
15
import java.util.Iterator;
16
import java.util.List;
17
18
import javax.print.attribute.PrintRequestAttributeSet;
19
20
import org.cresques.cts.ICoordTrans;
21
import org.cresques.cts.IProjection;
22 4439 fdiaz
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
24 4272 fdiaz
25 2485 nbrodin
import org.gvsig.fmap.dal.DALLocator;
26
import org.gvsig.fmap.dal.DataManager;
27
import org.gvsig.fmap.dal.DataParameters;
28
import org.gvsig.fmap.dal.DataStore;
29
import org.gvsig.fmap.dal.DataStoreParameters;
30
import org.gvsig.fmap.dal.coverage.RasterLocator;
31
import org.gvsig.fmap.dal.coverage.RasterManager;
32
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
33
import org.gvsig.fmap.dal.coverage.datastruct.NoData;
34
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
35
import org.gvsig.fmap.dal.coverage.exception.FilePaletteException;
36
import org.gvsig.fmap.dal.coverage.exception.InfoByPointException;
37
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
38
import org.gvsig.fmap.dal.coverage.exception.QueryException;
39
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
40
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
41
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
42
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
43
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
44
import org.gvsig.fmap.dal.exception.DataException;
45
import org.gvsig.fmap.dal.exception.InitializeException;
46
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
47
import org.gvsig.fmap.dal.exception.ReadException;
48
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
49
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
50
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
51
import org.gvsig.fmap.geom.GeometryLocator;
52
import org.gvsig.fmap.geom.GeometryManager;
53
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
54
import org.gvsig.fmap.geom.primitive.Envelope;
55
import org.gvsig.fmap.mapcontext.ViewPort;
56
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
57
import org.gvsig.fmap.mapcontext.layers.FLayer;
58
import org.gvsig.fmap.mapcontext.layers.operations.IHasImageLegend;
59
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
60
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
61
import org.gvsig.raster.fmap.layers.IRasterLayerActions;
62
import org.gvsig.raster.fmap.layers.NotAvailableStateException;
63
import org.gvsig.raster.fmap.legend.ImageLegend;
64
import org.gvsig.raster.util.CancelTaskImpl;
65
import org.gvsig.raster.wmts.io.WMTSDataParameters;
66
import org.gvsig.raster.wmts.io.WMTSServerExplorer;
67
import org.gvsig.raster.wmts.io.WMTSServerExplorerParameters;
68
import org.gvsig.tools.ToolsLocator;
69
import org.gvsig.tools.dynobject.DynObjectSet;
70
import org.gvsig.tools.dynobject.DynStruct;
71
import org.gvsig.tools.persistence.PersistenceManager;
72 4175 jbadia
import org.gvsig.tools.persistence.PersistentState;
73
import org.gvsig.tools.persistence.exception.PersistenceException;
74
import org.gvsig.tools.persistence.exception.PersistenceRuntimeException;
75 2485 nbrodin
import org.gvsig.tools.task.Cancellable;
76
import org.gvsig.tools.task.SimpleTaskStatus;
77
import org.gvsig.tools.task.TaskStatusManager;
78 4272 fdiaz
79 2485 nbrodin
/**
80
 * WMTS Layer class.
81
 *
82
 * @author Nacho Brodin (nachobrodin@gmail.com)
83
 *
84
 */
85
public class FLyrWMTS extends DefaultFLyrRaster implements IHasImageLegend {
86
        private static final GeometryManager geomManager               = GeometryLocator.getGeometryManager();
87
        private static final Logger          logger                    = LoggerFactory.getLogger(FLyrWMTS.class);
88
        private List<WeakReference<Thread>>         disableUpdateDrawVersion;
89
        private Envelope                                         fullEnvelope              = null;
90
        private boolean                                                 firstLoad                 = false;
91
        private RasterManager                rManager                  = RasterLocator.getManager();
92
        private DataStoreParameters          params                    = null;
93
        private WMTSServerExplorer           wmtsExplorer              = null;
94
        private boolean                      deleteCache               = false;
95
96 4439 fdiaz
        /**
97
         * Register the persistence
98
         */
99 2485 nbrodin
        public static void registerPersistent() {
100
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
101
                DynStruct definition = manager.getDefinition("FLyrWMTS_Persistent");
102
                if( definition == null ) {
103
                        if (manager.getDefinition(DefaultFLyrRaster.class) == null) {
104 3066 jjdelcerro
                                DefaultFLyrRaster.registerPersistence();
105 2485 nbrodin
                        }
106
107
                        definition = manager.addDefinition(
108
                                        FLyrWMTS.class,
109
                                        "FLyrWMTS_Persistent",
110
                                        "FLyrWMTS Persistent Definition",
111 4272 fdiaz
                                        null,
112 2485 nbrodin
                                        null
113
                        );
114 4272 fdiaz
115 2485 nbrodin
                        definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, DefaultFLyrRaster.PERSISTENT_NAME);
116
                }
117
118
                DefaultFLyrRaster.registerPersistence(definition);
119
        }
120 4272 fdiaz
121 4439 fdiaz
        /**
122
         * Constructor
123
         */
124 2485 nbrodin
        public FLyrWMTS() {
125
                super();
126
                this.updateDrawVersion();
127
                try {
128
                        enableAwake();
129
                } catch (NotAvailableStateException e) {
130
                        logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
131
                }
132
        }
133 4272 fdiaz
134 4439 fdiaz
        /**
135
         * @param host
136
         * @param srs
137
         * @return the data store
138
         * @throws InitializeException
139
         */
140 2485 nbrodin
        public static DataStore createDataStore(String host, IProjection srs) throws InitializeException {
141
                DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
142
                RasterDataParameters params = null;
143
                try {
144
                        params = (RasterDataParameters)dataman.createServerExplorerParameters(WMTSServerExplorer.NAME);
145
                } catch (InitializeException e) {
146
                        return null;
147
                } catch (ProviderNotRegisteredException e) {
148
                        return null;
149
                }
150 4272 fdiaz
                URI hostURI;
151
        try {
152
            hostURI = new URI(host);
153
        } catch (URISyntaxException e1) {
154
            logger.warn("Can't create URI from "+host, e1);
155
            throw new InitializeException(e1);
156
        }
157
                params.setURI(hostURI);
158 2485 nbrodin
                params.setSRS(srs);
159 4272 fdiaz
160 2485 nbrodin
                try {
161
                        return dataman.openStore(params.getDataStoreName(), params);
162
                } catch (ValidateDataParametersException e) {
163
                        throw new InitializeException(e);
164
                } catch (ProviderNotRegisteredException e) {
165
                        throw new InitializeException(e);
166
                }
167
        }
168 4272 fdiaz
169 4175 jbadia
        public void loadFromState(PersistentState state)
170
                        throws PersistenceException {
171
                try {
172
                        super.loadFromState(state);
173 4272 fdiaz
174 4175 jbadia
                        /*
175 4272 fdiaz
                         * Needs to initialize variables using methods on setDataStore method of this class
176 4175 jbadia
                         */
177
                        this.setDataStore(getDataStore());
178
                        //this.setParameters(getDataStore().getParameters());
179
                }catch (PersistenceRuntimeException e) {
180
                        logger.debug("Unable to load store from persistence in layer: " + this.getName(), e);
181
                        this.setAvailable(false);
182
                        return;
183
                } catch (LoadLayerException e) {
184
                        logger.debug("Unable to load store to layer: " + this.getName(), e);
185
                        this.setAvailable(false);
186
                        return;
187
//                } catch (InitializeException e) {
188
//                        logger.debug("Unable to load store parameters to layer: " + this.getName(), e);
189
//                        this.setAvailable(false);
190
//                        return;
191
                }
192 2485 nbrodin
193 4175 jbadia
        }
194
195 2485 nbrodin
        public void setDataStore(DataStore dataStore) throws LoadLayerException {
196
                this.dataStore = (RasterDataStore) dataStore;
197
                try {
198
                        enableOpen();
199
                } catch (NotAvailableStateException e) {
200
                        logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
201
                }
202 4439 fdiaz
        if (this.dataStore != null) {
203
            setProjection(this.dataStore.getProjection());
204
            setFullExtent(this.dataStore.getExtent().toRectangle2D());
205
        }
206 2485 nbrodin
        }
207
208
        @SuppressWarnings("deprecation")
209
        public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
210
                        Cancellable cancel, double scale) throws ReadException {
211
                //CancelTaskImpl cancellable = new CancelTaskImpl(cancel);
212
213
                //Solo el zoom normal recalcula el nivel dependiendo de la escala. El zoom por niveles asigna
214
                //?l el nivel de zoom por lo que no habr? que recalcularlo.
215
                if(recalcLevel) {
216
                        double pixelSize = viewPort.getExtent().getWidth() / (double)viewPort.getImageWidth();
217
                        zoomLevel = dataStore.getNearestLevel(pixelSize);
218
                }
219
                recalcLevel = true;
220 4272 fdiaz
221 2485 nbrodin
                if(!firstLoad) {
222
                        try {
223
                                initFilters();
224
                                try {
225
                                        if(!isOpen())
226
                                                enableOpen();
227
                                } catch (NotAvailableStateException e) {
228
                                        throw new ReadException("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), e);
229
                                }
230
                        } catch (FilePaletteException e) {
231
                                throw new ReadException(e.getMessage(), e);
232
                        }
233
                        firstLoad = true;
234
                }
235 4272 fdiaz
236 2485 nbrodin
                enableStopped();
237
238
                if (isWithinScale(scale)) {
239 4439 fdiaz
                    Envelope adjustedExtent = viewPort.getAdjustedEnvelope();
240
                        if (!adjustedExtent.intersects(getFullEnvelope())) {
241 2485 nbrodin
                                return;
242 4439 fdiaz
                        }
243 2485 nbrodin
                        Extent ext = rManager.getDataStructFactory().createExtent(
244
                                        adjustedExtent.getLowerCorner().getX(),
245 4272 fdiaz
                                        adjustedExtent.getUpperCorner().getY(),
246 2485 nbrodin
                                        adjustedExtent.getUpperCorner().getX(),
247
                                        adjustedExtent.getLowerCorner().getY());
248
                        Dimension imgSz = viewPort.getImageSize();
249
                        ViewPortData vp2 = rManager.getDataStructFactory().createViewPortData(viewPort.getProjection(), ext, imgSz );
250
                        vp2.setMat(viewPort.getAffineTransform());
251 2851 cmartinez
                        vp2.setDPI((int)viewPort.getDPI());
252 4272 fdiaz
253 2485 nbrodin
                        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
254
                        SimpleTaskStatus taskStatus = new RasterTaskStatus("Drawing " + getName() + "...", cancel);
255
                        manager.add(taskStatus);
256
                        taskStatus.setAutoremove(true);
257
258
                        try {
259
                                WMTSDataParameters par = getWMTSParameters(getParameters());
260
                                //getParameters().setExtent(ext.toRectangle2D());
261
                                par.setWidth((int)viewPort.getImageSize().getWidth());
262
                                par.setHeight((int)viewPort.getImageSize().getHeight());
263 4272 fdiaz
264 2485 nbrodin
                                getRender().drawTiledService(g, vp2, viewPort.getImageSize(), taskStatus);
265
                        } catch (ProcessInterruptedException e) {
266
                                throw new ReadException("Problems drawing this layer: " + e.getMessage(), e);
267
                        } catch (QueryException e) {
268
                                throw new ReadException("Problems drawing this layer: " + e.getMessage(), e);
269
                        } finally {
270
                                taskStatus.terminate();
271
                        }
272
                }
273
                disableStopped();
274
        }
275
276 4272 fdiaz
277 2485 nbrodin
        /**
278 4439 fdiaz
         * @param g
279
         * @param viewPort
280
         * @param cancel
281
         * @param scale
282
         * @param properties
283
         * @throws ReadException
284 2485 nbrodin
         * @see com.iver.cit.gvsig.fmap.layers.FLayer#print(java.awt.Graphics2D,
285
         *                 com.iver.cit.gvsig.fmap.ViewPort,
286
         *                 com.iver.cit.gvsig.fmap.operations.Cancellable)
287
         */
288
        public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintRequestAttributeSet properties)
289
        throws ReadException {
290 4272 fdiaz
291 4439 fdiaz
292 2485 nbrodin
        }
293
294 4439 fdiaz
        /**
295
         * @param g
296
         * @param viewPort
297
         * @param cancel
298
         * @param scale
299
         * @throws ReadException
300
         */
301
        public void _print(Graphics2D g, ViewPort viewPort, Cancellable cancel,        double scale) throws ReadException {
302 2485 nbrodin
                draw(null, g, viewPort, cancel,scale);
303
        }
304
305
        /**
306
         * Inserta la extensi?n total de la capa.
307
         *
308
         * @param fullExtent
309
         *            Rectangulo.
310
         */
311
        public void setFullExtent(Rectangle2D fullExtent) {
312
                this.setFullEnvelope(this.getEnvelopeFromRectable2D(fullExtent));
313
        }
314
315
        /**
316
         * Inserta la extensi?n total de la capa en la proyeccion original.
317 4439 fdiaz
         * @param envelope
318 2485 nbrodin
         *
319
         */
320
        public void setFullEnvelope(Envelope envelope) {
321
                Envelope cur = this.getFullEnvelope();
322
                if (cur == envelope) {
323
                        return;
324
                }
325
                if (cur != null && cur.equals(envelope)) {
326
                        return;
327
                }
328
329
                this.fullEnvelope = envelope;
330
                this.updateDrawVersion();
331
        }
332
333 4439 fdiaz
        /**
334
         * @return the properties.
335
         */
336 2485 nbrodin
        public HashMap<String, Object> getProperties() {
337
                HashMap<String, Object> info = new HashMap<String, Object>();
338
                WMTSDataParameters par = getWMTSParameters(getParameters());
339
                String layerName = par.getLayer().getTitle();
340
                try {
341
                        info.put("name", getName());
342
                        info.put("selectedLayer", layerName);
343
                        info.put("host", par.getURI());
344
                        info.put("srs", par.getSRSCode());
345
                        info.put("imageformat", par.getImageFormat());
346
                        info.put("infoformat", par.getInfoFormat());
347
                        //info.put("styles", getParameters().getStyles());
348
                        return info;
349
                } catch (Exception e) {
350
                        e.printStackTrace();
351
                }
352
                return null;
353
        }
354
355
356
        public String getTocImageIcon() {
357
                return "icon-layer-wmts";
358
        }
359
360
        public boolean isActionEnabled(int action) {
361
                switch (action) {
362
                case IRasterLayerActions.ZOOM_PIXEL_RESOLUTION:
363
                case IRasterLayerActions.FLYRASTER_BAR_TOOLS:
364
                case IRasterLayerActions.BANDS_FILE_LIST:
365
                case IRasterLayerActions.COLOR_TABLE:
366
                case IRasterLayerActions.GEOLOCATION:
367
                case IRasterLayerActions.PANSHARPENING:
368
                case IRasterLayerActions.SAVE_COLORINTERP:
369
                case IRasterLayerActions.SAVEAS:
370
                case IRasterLayerActions.BANDS_RGB:
371
                case IRasterLayerActions.CLIPPING:
372
                case IRasterLayerActions.ENHANCED:
373
                case IRasterLayerActions.STATS:
374
                case IRasterLayerActions.NODATA:
375
                case IRasterLayerActions.HISTOGRAM:
376
                        return false;
377
                case IRasterLayerActions.REMOTE_ACTIONS:
378
                        return true;
379
                }
380
381
                return super.isActionEnabled(action);
382
        }
383
384
        public ILegend getLegend() {
385
                if(getDataStore() != null)
386
                        return new ImageLegend(getDataStore().getImageLegend());
387
                return null;
388
        }
389
390
        public boolean isRemote() {
391
                return true;
392
        }
393
394
        public boolean overviewsSupport() {
395
                return false;
396
        }
397
398
        protected void updateDrawVersion() {
399
                if (this.disableUpdateDrawVersion != null){
400
401
                        Thread curThread = Thread.currentThread();
402
403
                        Thread aThread;
404
405
                        Iterator<WeakReference<Thread>> iter = this.disableUpdateDrawVersion.iterator();
406
                        while (iter.hasNext()){
407
                                aThread = (Thread) ((WeakReference<?>)iter.next()).get();
408
                                if (aThread == null){
409
                                        iter.remove();
410
                                } else if(aThread.equals(curThread)){
411
                                        return;
412
                                }
413
                        }
414
                }
415
                super.updateDrawVersion();
416
        }
417
418
        protected void disableUpdateDrawVersion() {
419
                if (this.disableUpdateDrawVersion == null) {
420
                        this.disableUpdateDrawVersion = new ArrayList<WeakReference<Thread>>();
421
                }
422
                this.disableUpdateDrawVersion.add(new WeakReference<Thread>(Thread.currentThread()));
423
        }
424
425
        protected void enableUpdateDrawVersion() {
426
                if (this.disableUpdateDrawVersion == null) {
427
                        return;
428
                }
429
                Thread curThread = Thread.currentThread();
430
                Thread aThread;
431
432
                Iterator<WeakReference<Thread>> iter = this.disableUpdateDrawVersion.iterator();
433
                while (iter.hasNext()) {
434
                        aThread = (Thread) ((WeakReference<?>)iter.next()).get();
435
                        if (aThread == null) {
436
                                iter.remove();
437
                        } else if(aThread.equals(curThread)) {
438
                                iter.remove();
439
                                break;
440
                        }
441
                }
442
443
        }
444
445
        @SuppressWarnings("unused")
446
        private Rectangle2D.Double getRectable2DFromEnvelope(Envelope env) {
447
                return new Rectangle2D.Double(env.getMinimum(0), env.getMinimum(1), env
448
                                .getLength(0), env.getLength(1));
449
        }
450
451
        private Envelope getEnvelopeFromRectable2D(Rectangle2D rect) {
452
                try {
453
                        return geomManager.createEnvelope(rect.getMinX(), rect.getMinY(),
454
                                        rect.getMaxX(), rect.getMaxY(),
455
                                        SUBTYPES.GEOM2D);
456
                } catch (CreateEnvelopeException e) {
457
                        logger.error("Error creating the envelope", e);
458
                }
459
                return null;
460
        }
461 4272 fdiaz
462 2485 nbrodin
        @Override
463
        public String getFileFormat() {
464
                return "WMTS";
465
        }
466
467 4272 fdiaz
468 2485 nbrodin
        /**
469
         * Devuelve el envelope en la proyeccion de la vista
470
         */
471
        public Envelope getFullEnvelope() {
472
                Envelope rAux;
473
                rAux = this.fullEnvelope;
474
475
                // Esto es para cuando se crea una capa nueva con el fullExtent de ancho
476
                // y alto 0.
477
                if (rAux == null || rAux.getMaximum(0) - rAux.getMinimum(0) == 0
478
                                && rAux.getMaximum(1) - rAux.getMinimum(1) == 0) {
479
                        try {
480
                                rAux = geomManager.createEnvelope(0, 0, 100, 100, SUBTYPES.GEOM2D);
481
                        } catch (CreateEnvelopeException e) {
482
                                logger.error("Error creating the envelope", e);
483
                        }
484
                }
485
                // Si existe reproyecci?n, reproyectar el extent
486
                ICoordTrans ct = getCoordTrans();
487
                if (ct != null) {
488
                        Point2D pt1 = new Point2D.Double(rAux.getMinimum(0), rAux
489
                                        .getMinimum(1));
490
                        Point2D pt2 = new Point2D.Double(rAux.getMaximum(0), rAux
491
                                        .getMaximum(1));
492
                        pt1 = ct.convert(pt1, null);
493
                        pt2 = ct.convert(pt2, null);
494
                        try {
495
                                rAux = geomManager.createEnvelope(pt1.getX(), pt1.getY(), pt2
496
                                                .getX(), pt2.getY(), SUBTYPES.GEOM2D);
497
                        } catch (CreateEnvelopeException e) {
498
                                logger.error("Error creating the envelope", e);
499
                        }// new
500
                        // Rectangle2D.Double();
501
                }
502
                return rAux;
503
504
        }
505 4272 fdiaz
506 2485 nbrodin
        public Extent getFullRasterExtent() {
507
                Envelope env = getFullEnvelope();
508
                double minx = env.getMinimum(0);
509
                double miny = env.getMinimum(1);
510
                double maxx = env.getMaximum(0);
511
                double maxy = env.getMaximum(1);
512
                Point2D ul = new Point2D.Double(minx, maxy);
513
                Point2D ur = new Point2D.Double(maxx, maxy);
514
                Point2D ll = new Point2D.Double(minx, miny);
515
                Point2D lr = new Point2D.Double(maxx, miny);
516
                return rManager.getDataStructFactory().createExtent(ul, lr, ur, ll);
517
        }
518
519
    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel)
520
                throws LoadLayerException, DataException {
521 4272 fdiaz
522 2485 nbrodin
                return null;
523
        }
524 4272 fdiaz
525 2485 nbrodin
    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel, boolean fast)
526
    throws LoadLayerException, DataException {
527
528 4439 fdiaz
        org.gvsig.fmap.geom.primitive.Point pReal = getMapContext().getViewPort().convertToMapPoint(p);
529 2485 nbrodin
            String fInfo = null;
530
            try {
531
                    fInfo = getDataStore().getInfoByPoint(pReal.getX(), pReal.getY(), new CancelTaskImpl(cancel));
532
            } catch (InfoByPointException e) {
533
                    throw new LoadLayerException("Error in getInfoByPoint", e);
534
            }
535
            int type = DynObjectSetWMTSInfo.TYPE_TEXT;
536
            WMTSDataParameters wmtsParams = getWMTSParameters(params);
537
538
            if(wmtsParams.getInfoFormat() != null) {
539
                    if(wmtsParams.getInfoFormat().compareTo("text/html") == 0)
540
                            type = DynObjectSetWMTSInfo.TYPE_HTML;
541
                    if(wmtsParams.getInfoFormat().compareTo("application/vnd.ogc.gml") == 0)
542
                            type = DynObjectSetWMTSInfo.TYPE_XML;
543
            }
544
            return new DynObjectSetWMTSInfo(fInfo, type);
545
    }
546 4272 fdiaz
547 2485 nbrodin
    /**
548
     * Sets the data store parameters
549
     * @param params
550
     * @throws InitializeException
551
     */
552
    public void setParameters(DataStoreParameters params) throws InitializeException {
553
            this.params = params;
554
555
                if(params instanceof TileDataParameters) {
556
                        ((TileDataParameters)params).deleteCache(deleteCache);
557
                }
558 4272 fdiaz
559 2485 nbrodin
            DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
560
                try {
561
                        DataStore dStore = dataman.openStore(params.getDataStoreName(), params);
562
                        this.setDataStore(dStore);
563 4272 fdiaz
564 2485 nbrodin
                        if(params instanceof WMTSDataParameters) {
565 4272 fdiaz
                                this.setName(((WMTSDataParameters) params).getURI().getPath());
566 2485 nbrodin
                        }
567 4272 fdiaz
568 2485 nbrodin
                        if(params instanceof TileDataParameters) {
569
                                DataParameters p = ((TileDataParameters) params).getDataParameters();
570
                                if(p instanceof WMTSDataParameters) {
571 4272 fdiaz
                                        this.setName(((WMTSDataParameters) p).getURI().getPath());
572 2485 nbrodin
                                }
573
                        }
574 4272 fdiaz
575 2485 nbrodin
                } catch (ValidateDataParametersException e) {
576
                        throw new InitializeException(e);
577
                } catch (ProviderNotRegisteredException e) {
578
                        throw new InitializeException(e);
579
                } catch (InitializeException e) {
580
                        throw new InitializeException(e);
581
                } catch (LoadLayerException e) {
582
                        throw new InitializeException(e);
583
                }
584
    }
585 4272 fdiaz
586 4439 fdiaz
    /**
587
     * @return the data store parameters
588
     */
589 2485 nbrodin
    @SuppressWarnings("deprecation")
590
        public DataStoreParameters getParameters() {
591
            if(params == null) {
592
                    DataManager datamanager = DALLocator.getDataManager();
593
                        WMTSServerExplorerParameters explorerParams = null;
594
                        try {
595
                                explorerParams = (WMTSServerExplorerParameters) datamanager.createServerExplorerParameters(WMTSServerExplorer.NAME);
596
                                explorerParams.setHost("");
597
                                wmtsExplorer = (WMTSServerExplorer) datamanager.createServerExplorer(explorerParams);
598
                                params = wmtsExplorer.getStoredParameters();
599
                        } catch (InitializeException e) {
600
                        } catch (ProviderNotRegisteredException e) {
601
                        } catch (ValidateDataParametersException e) {
602
                        }
603
            }
604
            return getWMTSParameters(params);
605
    }
606 4272 fdiaz
607 2485 nbrodin
    /**
608
     * Gets <code>WMTSDataParameters</code>
609
     * @param parameters
610
     * @return
611
     */
612
    private WMTSDataParameters getWMTSParameters(DataStoreParameters parameters) {
613
            WMTSDataParameters params = null;
614
            if(parameters instanceof WMTSDataParameters) {
615
                        params = (WMTSDataParameters) parameters;
616
                }
617 4272 fdiaz
618 2485 nbrodin
                if(parameters instanceof TileDataParameters) {
619
                        DataParameters p = ((TileDataParameters) parameters).getDataParameters();
620
                        if(p instanceof WMTSDataParameters) {
621
                                params = (WMTSDataParameters) p;
622
                        }
623
                }
624
                return params;
625
    }
626 4272 fdiaz
627 2485 nbrodin
    /**
628
     * Sets the explorer
629
     * @param explorer
630
     */
631
    public void setExplorer(WMTSServerExplorer explorer) {
632
            this.wmtsExplorer = explorer;
633
    }
634 4272 fdiaz
635 2485 nbrodin
    /**
636
     * Gets the explorer
637 4439 fdiaz
     * @return the server explorer
638 2485 nbrodin
     */
639
    public WMTSServerExplorer getExplorer() {
640
            return this.wmtsExplorer;
641
    }
642
643
        public Image getImageLegend() {
644
                return dataStore.getImageLegend();
645
        }
646
647
        public String getPathImage() {
648
                return null;
649
        }
650 4272 fdiaz
651 2485 nbrodin
        public FLayer cloneLayer() throws Exception {
652
                RasterDataStore  ds = dataStore.cloneDataStore();
653
                FLyrWMTS newLayer = new FLyrWMTS();
654
                newLayer.setName(getName());
655
                newLayer.setOpenRasterStore(ds);
656
                newLayer.fullEnvelope = fullEnvelope;
657
                newLayer.params = params;
658
                newLayer.firstLoad = firstLoad;
659
                newLayer.wmtsExplorer = wmtsExplorer;
660 4272 fdiaz
661 2485 nbrodin
                List<RasterFilter> filters = getRender().getFilterList().getStatusCloned();
662
663
                //Hacemos una copia de las bandas a renderizar
664
                ColorInterpretation ci = getRender().getRenderColorInterpretation();
665
                if(ci != null) {
666
                        newLayer.getRender().setRenderColorInterpretation(ci.cloneColorInterpretation());
667
                }
668
669
                //Asignamos el entorno
670
                if(newLayer.getRender().getFilterList() == null)
671
                        newLayer.getRender().setFilterList(RasterLocator.getManager().createEmptyFilterList(getRender().getFilterList().getInitDataType()));
672
                newLayer.getRender().getFilterList().setEnv(getRender().getFilterList().getEnv());
673
                newLayer.getRender().getFilterList().setStatus(filters);
674
675
                // Asignamos los valores noData del original
676
                NoData nd = (NoData)getNoDataValue().clone();
677
                newLayer.setNoDataValue(nd);
678
                newLayer.enableOpen();
679 4272 fdiaz
680 2485 nbrodin
                return newLayer;
681
        }
682
683
        /**
684
         * Assigns the flag to delete this layer from the cache
685 4439 fdiaz
         * @param deleteCache
686 2485 nbrodin
         */
687
        public void deleteCache(boolean deleteCache) {
688
                this.deleteCache = deleteCache;
689
        }
690 3066 jjdelcerro
}