Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wcs / trunk / org.gvsig.raster.wcs / org.gvsig.raster.wcs.io / src / main / java / org / gvsig / raster / wcs / io / WCSDataParametersImpl.java @ 768

History | View | Annotate | Download (16.2 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
* MA  02110-1301, USA.
20
*
21
*/
22

    
23
package org.gvsig.raster.wcs.io;
24

    
25
import java.awt.geom.Point2D;
26
import java.awt.geom.Rectangle2D;
27
import java.util.Hashtable;
28
import java.util.Map;
29

    
30
import org.cresques.cts.IProjection;
31
import org.gvsig.compat.net.ICancellable;
32
import org.gvsig.fmap.crs.CRSFactory;
33
import org.gvsig.fmap.dal.DataTypes;
34
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
35
import org.gvsig.tools.ToolsLocator;
36
import org.gvsig.tools.dynobject.DelegatedDynObject;
37
import org.gvsig.tools.dynobject.DynClass;
38
import org.gvsig.tools.dynobject.DynField;
39
import org.gvsig.tools.dynobject.DynObjectManager;
40
import org.gvsig.tools.dynobject.DynStruct;
41
import org.gvsig.tools.persistence.PersistenceManager;
42
import org.gvsig.tools.persistence.PersistentState;
43
import org.gvsig.tools.persistence.exception.PersistenceException;
44

    
45
/**
46
 * Parameters for the WCS provider
47
 * @author Nacho Brodin (nachobrodin@gmail.com)
48
 */
49
public class WCSDataParametersImpl extends AbstractRasterDataParameters implements WCSDataParameters {
50
        public static final String       DYNCLASS_NAME         = "WCSDataParameters";
51
        private static final String      FIELD_TIME            = "time";
52
        private static final String      FIELD_MAXRES          = "maxres";
53
        private static final String      FIELD_PARAM           = "parameter";
54
        private static final String      FIELD_SRS             = "srs";
55
        private static final String      FIELD_FORMAT          = "format";
56
        private static final String      FIELD_NAME            = "name";
57
        private static final String      FIELD_SRSSTR          = "srsstr";
58
        private static final String      FIELD_EXTENT          = "extent";
59
        private static final String      FIELD_WIDTH           = "width";
60
        private static final String      FIELD_HEIGHT          = "height";
61
        private static final String      FIELD_CANCEL          = "cancellable";
62
        private static final String      FIELD_OVERRIDE        = "override";
63
        private static final String      FIELD_ONLINERESOURC   = "onlineresources";
64
        private static final String      FIELD_DEPTH           = "depth";
65
        private static final String      FIELD_DELETECACHE     = "deletecache";
66
        
67
        private DelegatedDynObject       delegatedDynObject    = null;
68
        protected static DynClass        DYNCLASS              = null;
69
        
70
        public WCSDataParametersImpl() {
71
                super();
72
                initialize();
73
        }
74
        
75
        protected void initialize() {
76
                this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
77
                                .getDynObjectManager().createDynObject(
78
                                                DYNCLASS);
79
        }
80
        
81
        public static void registerPersistence() {
82
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
83
                DynStruct definition = manager.getDefinition("WCSDataParametersImpl_Persistent");
84
                if( definition == null ) {
85
                        definition = manager.addDefinition(
86
                                        WCSDataParametersImpl.class,
87
                                        "WCSDataParametersImpl_Persistent",
88
                                        "WCS DataParameters Persistency",
89
                                        null, 
90
                                        null
91
                        );
92
                        AbstractRasterDataParameters.registerPersistence(definition);
93
                        
94
                        definition.addDynFieldObject(FIELD_EXTENT).setClassOfValue(Rectangle2D.class).setMandatory(false);
95
                        definition.addDynFieldInt(FIELD_WIDTH).setMandatory(false);
96
                        definition.addDynFieldInt(FIELD_HEIGHT).setMandatory(false);
97
                        definition.addDynFieldObject(FIELD_MAXRES).setClassOfValue(Point2D.class).setMandatory(false);
98
                        definition.addDynFieldString(FIELD_FORMAT).setMandatory(false);
99
                        definition.addDynFieldString(FIELD_PARAM).setMandatory(false);
100
                        definition.addDynFieldString(FIELD_NAME).setMandatory(false);                        
101
                        definition.addDynFieldString(FIELD_SRSSTR).setMandatory(false);
102
                        definition.addDynFieldBoolean(FIELD_OVERRIDE).setMandatory(false);
103
                        definition.addDynFieldMap(FIELD_ONLINERESOURC).setClassOfItems(String.class).setMandatory(false);
104
                        definition.addDynFieldString(FIELD_DEPTH).setMandatory(false);
105
                        definition.addDynFieldString(FIELD_TIME).setMandatory(false);
106
                }
107
        }
108
        
109
        public void saveToState(PersistentState state) throws PersistenceException {
110
                super.saveToState(state);
111
                state.set(FIELD_FORMAT, getFormat());
112
                state.set(FIELD_MAXRES, getMaxResolution());
113
                state.set(FIELD_PARAM, getParameter());
114
                state.set(FIELD_DEPTH, getDepth());
115
                state.set(FIELD_TIME, getTime());
116
                state.set(FIELD_NAME, getCoverageName());        
117
                state.set(FIELD_SRSSTR, getSRSCode());
118
                state.set(FIELD_OVERRIDE, isOverridingHost());
119
                state.set(FIELD_ONLINERESOURC, getOnlineResource());
120
                state.set(FIELD_EXTENT, getExtent());
121
                state.set(FIELD_WIDTH, getWidth());
122
                state.set(FIELD_HEIGHT, getHeight());
123
        }
124
        
125
        @SuppressWarnings("unchecked")
126
        public void loadFromState(PersistentState state)
127
        throws PersistenceException {
128
                super.loadFromState(state);
129

    
130
                setFormat(state.getString(FIELD_FORMAT));
131
                setMaxResolution((Point2D)state.get(FIELD_MAXRES));
132
                setParameter(state.getString(FIELD_PARAM));
133
                setDepth(state.getString(FIELD_DEPTH));
134
                setTime(state.getString(FIELD_TIME));
135
                setCoverageName(state.getString(FIELD_NAME));
136
                setSRS(state.getString(FIELD_SRSSTR));
137
                setOverrideHost(state.getBoolean(FIELD_OVERRIDE));
138
                if(state.getMap(FIELD_ONLINERESOURC) != null)
139
                        setOnlineResources(new Hashtable(state.getMap(FIELD_ONLINERESOURC)));
140
                setExtent((Rectangle2D)state.get(FIELD_EXTENT));
141
                setWidth(state.getInt(FIELD_WIDTH));
142
                setHeight(state.getInt(FIELD_HEIGHT));
143
        }
144

    
145
        @SuppressWarnings("deprecation")
146
        public static void registerDynClass() {
147
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
148
                DynClass dynClass;
149
                DynField field;
150
                
151
                if(dynman == null)
152
                        return;
153
                
154
                if (DYNCLASS == null) {
155
                        dynClass = AbstractRasterDataParameters.registerDynClass(WCSDataParametersImpl.DYNCLASS_NAME);
156

    
157
                        field = dynClass.addDynField(FIELD_MAXRES);
158
                        field.setTheTypeOfAvailableValues(DynField.ANY);
159
                        field.setDescription("Maxresolution");
160
                        field.setType(DataTypes.OBJECT);
161
                        field.setMandatory(false);
162
                        
163
                        field = dynClass.addDynField(FIELD_PARAM);
164
                        field.setTheTypeOfAvailableValues(DynField.ANY);
165
                        field.setDescription("Parameters");
166
                        field.setType(DataTypes.STRING);
167
                        field.setMandatory(false);
168
                        
169
                        field = dynClass.addDynField(FIELD_SRS);
170
                        field.setTheTypeOfAvailableValues(DynField.ANY);
171
                        field.setDescription("SRS");
172
                        field.setType(DataTypes.CRS);
173
                        field.setMandatory(false);
174

    
175
                        field = dynClass.addDynField(FIELD_FORMAT);
176
                        field.setTheTypeOfAvailableValues(DynField.ANY);
177
                        field.setDescription("Format");
178
                        field.setType(DataTypes.STRING);
179
                        field.setMandatory(true);
180
                        
181
                        field = dynClass.addDynField(FIELD_NAME);
182
                        field.setTheTypeOfAvailableValues(DynField.ANY);
183
                        field.setDescription("Name");
184
                        field.setType(DataTypes.STRING);
185
                        field.setMandatory(true);
186
                        
187
                        field = dynClass.addDynField(FIELD_SRSSTR);
188
                        field.setTheTypeOfAvailableValues(DynField.ANY);
189
                        field.setDescription("String that represents the SRS");
190
                        field.setType(DataTypes.STRING);
191
                        field.setMandatory(true);
192
                        
193
                        field = dynClass.addDynField(FIELD_CANCEL);
194
                        field.setTheTypeOfAvailableValues(DynField.ANY);
195
                        field.setDescription("Cancellable");
196
                        field.setType(DataTypes.OBJECT);
197
                        field.setMandatory(false);
198
                        
199
                        field = dynClass.addDynField(FIELD_EXTENT);
200
                        field.setTheTypeOfAvailableValues(DynField.ANY);
201
                        field.setDescription("Extent");
202
                        field.setType(DataTypes.OBJECT);
203
                        field.setMandatory(false);
204
                        
205
                        field = dynClass.addDynField(FIELD_WIDTH);
206
                        field.setTheTypeOfAvailableValues(DynField.ANY);
207
                        field.setDescription("Width");
208
                        field.setType(DataTypes.INT);
209
                        field.setMandatory(false);
210
                        
211
                        field = dynClass.addDynField(FIELD_HEIGHT);
212
                        field.setTheTypeOfAvailableValues(DynField.ANY);
213
                        field.setDescription("Height");
214
                        field.setType(DataTypes.INT);
215
                        field.setMandatory(false);
216
                        
217
                        field = dynClass.addDynField(FIELD_OVERRIDE);
218
                        field.setTheTypeOfAvailableValues(DynField.ANY);
219
                        field.setDescription("Override a host capabilities");
220
                        field.setType(DataTypes.BOOLEAN);
221
                        field.setMandatory(false);
222
                        
223
                        field = dynClass.addDynField(FIELD_ONLINERESOURC);
224
                        field.setTheTypeOfAvailableValues(DynField.ANY);
225
                        field.setDescription("online resources");
226
                        field.setType(DataTypes.MAP);
227
                        field.setMandatory(false);
228
                        
229
                        field = dynClass.addDynField(FIELD_DEPTH);
230
                        field.setTheTypeOfAvailableValues(DynField.ANY);
231
                        field.setDescription("Depth");
232
                        field.setType(DataTypes.STRING);
233
                        field.setMandatory(false);
234
                        
235
                        field = dynClass.addDynField(FIELD_TIME);
236
                        field.setTheTypeOfAvailableValues(DynField.ANY);
237
                        field.setDescription("Time");
238
                        field.setType(DataTypes.STRING);
239
                        field.setMandatory(false);
240
                        
241
                        field = dynClass.addDynField(FIELD_DELETECACHE);
242
                        field.setTheTypeOfAvailableValues(DynField.ANY);
243
                        field.setDescription("Flag to delete cache the next request");
244
                        field.setType(DataTypes.BOOLEAN);
245
                        field.setMandatory(false);
246
                        
247
                        DYNCLASS = dynClass;
248
                }
249
        }
250
        
251
        /*
252
         * (non-Javadoc)
253
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#setMaxResolution(java.awt.geom.Point2D)
254
         */
255
        public void setMaxResolution(Point2D res) {
256
                this.setDynValue(FIELD_MAXRES, res);
257
        }
258
        
259
        public Point2D getMaxResolution() {
260
                return (Point2D) this.getDynValue(FIELD_MAXRES);
261
        }
262
        
263
        /*
264
         * (non-Javadoc)
265
         * @see org.gvsig.fmap.dal.coverage.store.parameter.WCSDataParameters#setParameter(java.lang.String)
266
         */
267
        public void setParameter(String parameter) {
268
                this.setDynValue(FIELD_PARAM, parameter);
269
        }
270
        
271
        /*
272
         * (non-Javadoc)
273
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#getParameter()
274
         */
275
        public String getParameter() {
276
                return (String) this.getDynValue(FIELD_PARAM);
277
        }
278
        
279
        /*
280
         * (non-Javadoc)
281
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#getFormat()
282
         */
283
        public String getFormat() {
284
                return (String) this.getDynValue(FIELD_FORMAT);
285
        }
286

    
287
        /*
288
         * (non-Javadoc)
289
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#setFormat(java.lang.String)
290
         */
291
        public void setFormat(String format) {
292
                this.setDynValue(FIELD_FORMAT, format);
293
        }
294
        
295
        /**
296
         * Devuelve el SRS.
297
         * @return SRS.
298
         */
299
        public String getSRSCode() {
300
                return (String) this.getDynValue(FIELD_SRSSTR);
301
        }
302
        
303
        /**
304
         * Inserta el SRS.
305
         * @param m_srs SRS.
306
         */
307
        public void setSRS(String m_srs) {
308
                this.setDynValue(FIELD_SRSSTR, m_srs);
309
                setSRS(CRSFactory.getCRS(m_srs));
310
        }
311
        
312
        public void setSRS(IProjection srs) {
313
                setDynValue(FIELD_SRS, srs);
314
        }
315

    
316
        /**
317
         * Returns the projection
318
         * @return
319
         */
320
        public IProjection getSRS() {
321
                if (this.getSRSID() == null) {
322
                        return null;
323
                }
324
                return (IProjection) getDynValue(FIELD_SRS);
325
        }
326
        
327
        public String getSRSID() {
328
                IProjection srs = (IProjection) getDynValue(FIELD_SRS);
329
                if (srs == null) {
330
                        return null;
331
                }
332
                return srs.getAbrev();
333
        }
334

    
335
        public void setSRSID(String srsid) {
336
                if (srsid == null) {
337
                        setDynValue(FIELD_SRS, null);
338
                } else {
339
                        setDynValue(FIELD_SRS, CRSFactory.getCRS(srsid));
340
                }
341
        }
342
        
343
        public String getCoverageName() {
344
                return (String) this.getDynValue(FIELD_NAME);
345
        }
346

    
347
        public void setCoverageName(String name) {
348
                this.setDynValue(FIELD_NAME, name);
349
        }
350
        
351
        public void setCancellable(ICancellable cancel) {
352
                this.setDynValue(FIELD_CANCEL, cancel);
353
        }
354
        
355
        public ICancellable getCancellable() {
356
                return (ICancellable) this.getDynValue(FIELD_CANCEL);
357
        }
358
        
359
        /*
360
         * (non-Javadoc)
361
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#setExtent(java.awt.geom.Rectangle2D)
362
         */
363
        public void setExtent(Rectangle2D bBox) {
364
                this.setDynValue(FIELD_EXTENT, bBox);
365
        }
366
        
367
        /*
368
         * (non-Javadoc)
369
         * @see org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters#setWidth(int)
370
         */
371
        public void setWidth(int w) {
372
                this.setDynValue(FIELD_WIDTH, new Integer(w));
373
        }
374
        
375
        /*
376
         * (non-Javadoc)
377
         * @see org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters#setHeight(int)
378
         */
379
        public void setHeight(int h) {
380
                this.setDynValue(FIELD_HEIGHT, new Integer(h));
381
        }
382
        
383
        /*
384
         * (non-Javadoc)
385
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#getExtent()
386
         */
387
        public Rectangle2D getExtent() {
388
                return (Rectangle2D)getDynValue(FIELD_EXTENT);
389
        }
390
        
391
        /**
392
         * Gets the width
393
         * @return
394
         */
395
        public int getWidth() {
396
                Integer b = (Integer)getDynValue(FIELD_WIDTH);
397
                if(b != null)
398
                        return ((Integer)b).intValue();
399
                return 0;
400
        }
401
        
402
        /**
403
         * Gets the height
404
         * @return
405
         */
406
        public int getHeight() {
407
                Integer b = (Integer)getDynValue(FIELD_HEIGHT);
408
                if(b != null)
409
                        return ((Integer)b).intValue();
410
                return 0;
411
        }
412
        
413
        /*public void setConnector(Object connector) {
414
                this.setDynValue(FIELD_CONNECTOR, connector);
415
        }
416
        
417
        public Object getConnector() {
418
                return (Object)getDynValue(FIELD_CONNECTOR);
419
        }*/
420
        
421
        //**********************************************
422
        
423
        /*
424
         * (non-Javadoc)
425
         * @see org.gvsig.fmap.dal.DataStoreParameters#getDataStoreName()
426
         */
427
        public String getDataStoreName() {
428
                return WCSProvider.NAME;
429
        }
430
        
431
        /*
432
         * (non-Javadoc)
433
         * @see org.gvsig.fmap.dal.DataStoreParameters#getDescription()
434
         */
435
        public String getDescription() {
436
                return WCSProvider.DESCRIPTION;
437
        }
438

    
439
        public String getExplorerName() {
440
                return WCSServerExplorer.NAME;
441
        }
442
        
443
        public boolean isValid() {
444
                return (this.getURI() != null);
445
        }
446
        
447
        protected DelegatedDynObject getDelegatedDynObject() {
448
                return delegatedDynObject;
449
        }
450
        
451
        /*
452
         * (non-Javadoc)
453
         * @see java.lang.Object#clone()
454
         */
455
        @SuppressWarnings("unchecked")
456
        public WCSDataParametersImpl clone() {
457
                WCSDataParametersImpl p = new WCSDataParametersImpl();
458
                p.setFormat(getFormat());
459
                p.setHeight(getHeight());
460
                p.setWidth(getWidth());
461
                p.setExtent(getExtent());
462
                p.setCoverageName(getCoverageName());
463
                p.setOverrideHost(isOverridingHost());
464
                p.setSRS(getSRS());
465
                p.setSRS(getSRSCode());
466
                p.setURI(getURI());
467
                p.setCancellable(getCancellable());
468
                p.setOnlineResources((Hashtable<String, String>)this.getDynValue(FIELD_ONLINERESOURC));
469
                p.setTime(getTime());
470
                return p;
471
        }
472

    
473
        /*
474
         * (non-Javadoc)
475
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#getTime()
476
         */
477
        public String getTime() {
478
                return (String) this.getDynValue(FIELD_TIME);
479
        }
480

    
481
        /*
482
         * (non-Javadoc)
483
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#setTime(java.lang.String)
484
         */
485
        public void setTime(String time) {
486
                this.setDynValue(FIELD_TIME, time);
487
        }
488
        
489
        /*
490
         * (non-Javadoc)
491
         * @see org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters#isOverridingHost()
492
         */
493
        public boolean isOverridingHost() {
494
                Boolean b = (Boolean)getDynValue(FIELD_OVERRIDE);
495
                if(b != null)
496
                        return ((Boolean)b).booleanValue();
497
                return false;
498
        }
499
        
500
        /*
501
         * (non-Javadoc)
502
         * @see org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters#setOverrideHost(boolean)
503
         */
504
        public void setOverrideHost(boolean over) {
505
                this.setDynValue(FIELD_OVERRIDE, new Boolean(over));;
506
        }
507
        
508
        /*
509
         * (non-Javadoc)
510
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#setOnlineResources(java.util.Hashtable)
511
         */
512
        public void setOnlineResources(Hashtable<String, String> onlineResources) {
513
                this.setDynValue(FIELD_ONLINERESOURC, onlineResources);
514
        }
515
        
516
        /*
517
         * (non-Javadoc)
518
         * @see org.gvsig.raster.wcs.io.WCSDataParameters#getOnlineResource()
519
         */
520
        @SuppressWarnings("unchecked")
521
        public Map<String,String> getOnlineResource() {
522
                return (Map<String,String>) this.getDynValue(FIELD_ONLINERESOURC);
523
        }
524

    
525
        /**
526
         * Gets the URL that should be accessed for an operation performed
527
         * to the server.
528
         *
529
         * @param onlineResources
530
         */
531
        public String getOnlineResource(String operation) {
532
                return (String) getOnlineResource().get(operation);
533
        }
534
        
535
        
536
        public String getDepth() {
537
                return (String) this.getDynValue(FIELD_DEPTH);
538
        }
539

    
540
        
541
        public void setDepth(String depth) {
542
                this.setDynValue(FIELD_DEPTH, depth);
543
        }
544

    
545
        public boolean isSizeFixed() {
546
                return true;
547
        }
548
        
549
        public void deleteCache(boolean deleteCache) {
550
                this.setDynValue(FIELD_DELETECACHE, new Boolean(deleteCache));
551
        }
552
        
553
        public boolean isDeletingCache() {
554
                return ((Boolean)getDynValue(FIELD_DELETECACHE)).booleanValue();
555
        }
556

    
557
}