Statistics
| Revision:

gvsig-raster / org.gvsig.raster.mosaic / trunk / org.gvsig.raster.mosaic / org.gvsig.raster.mosaic.io / src / main / java / org / gvsig / raster / mosaic / io / MosaicDataParametersImpl.java @ 2193

History | View | Annotate | Download (10.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
package org.gvsig.raster.mosaic.io;
23

    
24
import java.util.ArrayList;
25
import java.util.Collections;
26
import java.util.List;
27

    
28
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
29
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
30
import org.gvsig.fmap.dal.spi.DataStoreProvider;
31
import org.gvsig.raster.cache.tile.provider.TileServer;
32
import org.gvsig.raster.impl.provider.RasterProvider;
33
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
34
import org.gvsig.raster.impl.store.AbstractRasterFileDataParameters;
35
import org.gvsig.timesupport.Time;
36
import org.gvsig.tools.ToolsLocator;
37
import org.gvsig.tools.dynobject.DelegatedDynObject;
38
import org.gvsig.tools.dynobject.DynClass;
39
import org.gvsig.tools.dynobject.DynField;
40
import org.gvsig.tools.dynobject.DynObjectManager;
41
import org.gvsig.tools.dynobject.DynStruct;
42
import org.gvsig.tools.persistence.PersistenceManager;
43
import org.gvsig.tools.persistence.PersistentState;
44
import org.gvsig.tools.persistence.exception.PersistenceException;
45

    
46
/**
47
 * Parameters for the MosaicProvider
48
 * @author Nacho Brodin (nachobrodin@gmail.com)
49
 */
50
public class MosaicDataParametersImpl extends AbstractRasterFileDataParameters implements MosaicDataParameters {
51
        public static final String            PARAMETERS_DEFINITION_NAME = "MosaicDataParameters";
52
        private static DynClass               DYNCLASS                   = null;
53
        private boolean                       paramsHasChanged           = false;
54
        //private ArrayList<Boolean>            visible                    = new ArrayList<Boolean>();
55
        
56
        public MosaicDataParametersImpl() {
57
                super();
58
                initialize();
59
        }
60
        
61
        protected void initialize() {
62
                delegatedDynObject = (DelegatedDynObject) ToolsLocator
63
                                .getDynObjectManager().createDynObject(
64
                                                DYNCLASS);
65
        }
66
        
67
        public static void registerDynClass() {
68
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
69
                DynClass dynClass;
70
                DynField field;
71
                
72
                if(dynman == null)
73
                        return;
74
                
75
                if (DYNCLASS == null) {
76
                        dynClass = AbstractRasterDataParameters.registerDynClass(PARAMETERS_DEFINITION_NAME);
77
                        //dynClass = dynman.add(AbstractRasterDataParameters.DYNCLASS_NAME);
78
                        
79
                        field = dynClass.addDynFieldObject(FIELD_PROVIDERS);
80
            field.setDescription("List of providers");
81
            field.setMandatory(false);
82
            field.setClassOfValue(Object.class); 
83
            
84
            field = dynClass.addDynFieldObject(FIELD_PIXELSIZE);
85
            field.setDescription("Pixel size");
86
            field.setMandatory(false);
87
            field.setClassOfValue(Double.class);
88
            
89
            field = dynClass.addDynFieldObject(FIELD_NODATA);
90
            field.setDescription("Assigned NoData value");
91
            field.setMandatory(false);
92
            field.setClassOfValue(Double.class);
93
            
94
            field = dynClass.addDynFieldObject(FIELD_OVERLAP);
95
            field.setDescription("Overlap method");
96
            field.setMandatory(false);
97
            field.setClassOfValue(Integer.class);
98
            
99
            field = dynClass.addDynFieldObject(FIELD_COLORCORRECTION);
100
            field.setDescription("Color correction method");
101
            field.setMandatory(false);
102
            field.setClassOfValue(Integer.class);
103
            
104
            field = dynClass.addDynFieldObject(FIELD_TIMESELECTION);
105
            field.setDescription("Time selection");
106
            field.setMandatory(false);
107
            field.setClassOfValue(Time.class);
108
            
109
            /*field = dynClass.addDynFieldObject(FIELD_PROVIDER_VISIBLE);
110
            field.setDescription("If the boolean in i position is true, that means that the i provider is visible");
111
            field.setMandatory(false);
112
            field.setClassOfValue(Object.class);*/
113

    
114
                        DYNCLASS = dynClass;
115
                }
116

    
117
        }
118
        
119
        public void removeProvider(String uri) {
120
                if(getProviders() != null) {
121
                        List<RasterProvider> pList = getProviders();
122
                        for (int i = 0; i < pList.size(); i++) {
123
                                RasterProvider rProv = pList.get(i);
124
                                if(rProv.getURIOfFirstProvider().compareTo(uri) == 0) {
125
                                        paramsHasChanged = true;
126
                                        pList.remove(i);
127
                                        return;
128
                                }
129
                        }
130
                }
131
        }
132
        
133
        public void addProvider(RasterProvider prov) {
134
                if(getProviders() == null) {
135
                        List<RasterProvider> pList = new ArrayList<RasterProvider>();
136
                        pList.add(prov);
137
                        setProviders(pList);
138
                } else {
139
                        getProviders().add(prov);
140
                }
141
                paramsHasChanged = true;
142
        }
143
        
144
        public boolean addNotTiledProvider(DataStoreProvider prov) {
145
                if(prov instanceof RasterProvider) {
146
                        if(((RasterProvider)prov).isTiled())
147
                                return false;
148
                        else {
149
                                addProvider((RasterProvider)prov);
150
                                return true;
151
                        }
152
                }
153
                return false;
154
        }
155
        
156
        public boolean existsProvider(String fileName) {
157
                List<RasterProvider> prov = getProviders();
158
                if(prov == null)
159
                        return false;
160
                
161
                for (int i = 0; i < prov.size(); i++) {
162
                        if(prov.get(i).getURI().compareTo(fileName) == 0) {
163
                                return true;
164
                        }
165
                }
166
                return false;
167
        }
168
        
169
        public void setProviders(List<RasterProvider> provList) {
170
                setDynValue(MosaicDataParameters.FIELD_PROVIDERS, provList);
171
                paramsHasChanged = true;
172
        }
173

    
174
        public String getDataStoreName() {
175
                return MosaicProvider.NAME;
176
        }
177

    
178
        public String getDescription() {
179
                return MosaicProvider.DESCRIPTION;
180
        }
181

    
182
        @SuppressWarnings("unchecked")
183
        public List<RasterProvider> getProviders() {
184
                return (List<RasterProvider>)getDynValue(MosaicDataParameters.FIELD_PROVIDERS);
185
        }
186
        
187
        public double getPixelSize() {
188
                Object obj = getDynValue(MosaicDataParameters.FIELD_PIXELSIZE);
189
                if(obj != null)
190
                        return ((Double)obj).doubleValue();
191
                return 0D;
192
        }
193
        
194
        public void setPixelSize(double ps) {
195
                setDynValue(MosaicDataParameters.FIELD_PIXELSIZE, new Double(ps));
196
                paramsHasChanged = true;
197
        }
198
        
199
        public double getNoData() {
200
                Object obj = getDynValue(MosaicDataParameters.FIELD_NODATA);
201
                if(obj != null)
202
                        return ((Double)obj).doubleValue();
203
                return 0D;
204
        }
205
        
206
        public void setNoData(double nd) {
207
                setDynValue(MosaicDataParameters.FIELD_NODATA, new Double(nd));
208
                paramsHasChanged = true;
209
        }
210

    
211
        public boolean hasParamsChanged() {
212
                return paramsHasChanged;
213
        }
214
        
215
        public void resetParamsChanged() {
216
                paramsHasChanged = false;
217
        }
218
        
219
        public void setOverlapMethod(int overlap) {
220
                setDynValue(MosaicDataParameters.FIELD_OVERLAP, new Integer(overlap));
221
                paramsHasChanged = true;
222
        }
223
        
224
        public int getOverlapMethod() {
225
                Object obj = getDynValue(MosaicDataParameters.FIELD_OVERLAP);
226
                if(obj != null)
227
                        return ((Integer)obj).intValue();
228
                return 0;
229
        }
230
        
231
        public void setColorCorrectionMethod(int colorCorrection) {
232
                setDynValue(MosaicDataParameters.FIELD_COLORCORRECTION, new Integer(colorCorrection));
233
                paramsHasChanged = true;
234
        }
235
        
236
        public int getColorCorrectionMethod() {
237
                Object obj = getDynValue(MosaicDataParameters.FIELD_COLORCORRECTION);
238
                if(obj != null)
239
                        return ((Integer)obj).intValue();
240
                return 0;
241
        }
242
        
243
        public void setTimeSelection(Time timeSelection) {
244
                setDynValue(MosaicDataParameters.FIELD_TIMESELECTION, timeSelection);
245
                paramsHasChanged = true;
246
        }
247
        
248
        public Time getTimeSelection() {
249
                Object obj = getDynValue(MosaicDataParameters.FIELD_TIMESELECTION);
250
                if(obj != null)
251
                        return ((Time)obj);
252
                return null;
253
        }
254

    
255
        public String getURIByProvider(int prov) {
256
                List<RasterProvider> provList = getProviders();
257
                return provList.get(prov).getURI();
258
        }
259
        
260
        public void removeProvider(int prov) {
261
                List<RasterProvider> provList = getProviders();
262
                provList.remove(prov).close();
263
        }
264
        
265
        public void swapProvider(int i, int j) {
266
                Collections.swap(getProviders(), i, j);
267
        }
268

    
269
        public void setVisibleProvider(int i, boolean b) {
270
                List<RasterProvider> provList = getProviders();
271
                provList.get(i).getDataParameters().setVisible(b);
272
        }
273
        
274
        public int getProviderCount() {
275
                return getProviders().size();
276
        }
277
        
278
        @SuppressWarnings("unchecked")
279
        public void loadFromState(PersistentState state)
280
                        throws PersistenceException {
281
                super.loadFromState(state);
282
                //DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
283
                
284
                List<RasterDataParameters> pList = state.getList(FIELD_PROVIDERS);
285
                for (int i = 0; i < pList.size(); i++) {
286
                        
287
                }
288
                /*setDataParameters((DataParameters)state.get(FIELD_PARAMETERS));
289
                setTileServer((TileServer)state.get(FIELD_TILESERVER));
290
                setSecondLevelCache(state.getBoolean(FIELD_SECONDLEVEL));
291
                deleteCache(state.getBoolean(FIELD_DELETECACHE));*/
292
        }
293
        
294
        public void saveToState(PersistentState state) throws PersistenceException {
295
                super.saveToState(state);
296
                
297
                state.set(FIELD_PROVIDERS, getProviders());
298
                state.set(FIELD_PIXELSIZE, getPixelSize());
299
                state.set(FIELD_NODATA, getNoData());
300
                state.set(FIELD_OVERLAP, getOverlapMethod());
301
        }        
302
        
303
        public static void registerPersistence() {
304
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
305
                DynStruct definition = manager.getDefinition("TileDataParameters_Persistent");
306
                if( definition == null ) {
307
                        definition = manager.addDefinition(
308
                                        TileDataParameters.class,
309
                                        "TileDataParameters_Persistent",
310
                                        "TileDataParameters Persistency",
311
                                        null, 
312
                                        null
313
                        );
314
                }
315
                AbstractRasterDataParameters.registerPersistence(definition);
316

    
317
                definition.addDynFieldList(FIELD_PROVIDERS).setClassOfItems(RasterDataParameters.class).setMandatory(true);
318
                definition.addDynFieldInt(FIELD_PIXELSIZE).setClassOfValue(TileServer.class).setMandatory(true);
319
                definition.addDynFieldDouble(FIELD_NODATA).setMandatory(true);
320
                definition.addDynFieldInt(FIELD_OVERLAP).setMandatory(true);
321
                definition.addDynFieldObject(FIELD_COLORCORRECTION).setMandatory(true);
322
        }
323
}