Statistics
| Revision:

gvsig-raster / org.gvsig.raster.multifile / trunk / org.gvsig.raster.multifile / org.gvsig.raster.multifile.io / src / main / java / org / gvsig / raster / multifile / io / MultiFileDataParametersImpl.java @ 1874

History | View | Annotate | Download (7.64 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
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 IVER T.I   {{Task}}
26
*/
27

    
28
package org.gvsig.raster.multifile.io;
29

    
30
import java.util.ArrayList;
31
import java.util.List;
32

    
33
import org.gvsig.fmap.dal.DALLocator;
34
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
35
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
36
import org.gvsig.fmap.dal.exception.InitializeException;
37
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
38
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
39
import org.gvsig.fmap.dal.spi.DataStoreProvider;
40
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
41
import org.gvsig.raster.impl.provider.RasterProvider;
42
import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
43
import org.gvsig.raster.impl.store.AbstractRasterFileDataParameters;
44
import org.gvsig.raster.impl.store.DefaultRasterStore;
45
import org.gvsig.tools.ToolsLocator;
46
import org.gvsig.tools.dynobject.DelegatedDynObject;
47
import org.gvsig.tools.dynobject.DynClass;
48
import org.gvsig.tools.dynobject.DynField;
49
import org.gvsig.tools.dynobject.DynObjectManager;
50
import org.gvsig.tools.dynobject.DynStruct;
51
import org.gvsig.tools.persistence.PersistenceManager;
52
import org.gvsig.tools.persistence.PersistentState;
53
import org.gvsig.tools.persistence.exception.PersistenceException;
54

    
55
/**
56
 * Parameters for the Multifile provider
57
 * @author Nacho Brodin (nachobrodin@gmail.com)
58
 */
59
public class MultiFileDataParametersImpl extends AbstractRasterFileDataParameters implements MultiFileDataParameters {
60
        public static final String            PARAMETERS_DEFINITION_NAME = "MultifileRasterDataParameters";
61
        private static DynClass               DYNCLASS                   = null;
62
        
63
        public MultiFileDataParametersImpl() {
64
                super();
65
                initialize();
66
        }
67
        
68
        protected void initialize() {
69
                delegatedDynObject = (DelegatedDynObject) ToolsLocator
70
                                .getDynObjectManager().createDynObject(
71
                                                DYNCLASS);
72
        }
73
        
74
        public static void registerDynClass() {
75
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
76
                DynClass dynClass;
77
                DynField field;
78
                
79
                if(dynman == null)
80
                        return;
81
                
82
                if (DYNCLASS == null) {
83
                        dynClass = AbstractRasterDataParameters.registerDynClass(PARAMETERS_DEFINITION_NAME);
84
                        //dynClass = dynman.add(AbstractRasterDataParameters.DYNCLASS_NAME);
85
                        
86
                        field = dynClass.addDynFieldObject(FIELD_PROVIDERS);
87
            field.setDescription("List of providers");
88
            field.setMandatory(false);
89
            field.setClassOfValue(Object.class); 
90

    
91
                        DYNCLASS = dynClass;
92
                }
93

    
94
        }
95
        
96
        /*
97
         * (non-Javadoc)
98
         * @see org.gvsig.raster.tools.multifile.io.MultifileDataParameters#removeProvider(java.lang.String)
99
         */
100
        public void removeProvider(String uri) {
101
                if(getProviders() != null) {
102
                        ArrayList<RasterProvider> pList = getProviders();
103
                        for (int i = 0; i < pList.size(); i++) {
104
                                RasterProvider rProv = pList.get(i);
105
                                if(rProv.getURIOfFirstProvider().compareTo(uri) == 0) {
106
                                        pList.remove(i);
107
                                        return;
108
                                }
109
                        }
110
                }
111
        }
112
        
113
        /*
114
         * (non-Javadoc)
115
         * @see org.gvsig.raster.tools.multifile.io.MultiFileDataParameters#addProviderNotTiled(org.gvsig.fmap.dal.spi.DataStoreProvider)
116
         */
117
        public void addProviderNotTiled(DataStoreProvider provider) {
118
                if(provider instanceof RasterProvider) {
119
                        RasterProvider prov = (RasterProvider)provider;
120
                        if(!prov.isTiled()) {
121
                                if(getProviders() == null) {
122
                                        ArrayList<RasterProvider> pList = new ArrayList<RasterProvider>();
123
                                        pList.add(prov);
124
                                        setProviders(pList);
125
                                } else {
126
                                        getProviders().add(prov);
127
                                }
128
                        }
129
                }
130
        }
131
        
132
        public void setFirstProvider(DataStoreProvider provider) {
133
                if(provider instanceof RasterProvider) {
134
                        RasterProvider prov = (RasterProvider)provider;
135
                        if(getProviders() != null) {
136
                                getProviders().set(0, prov);
137
                        }
138
                }
139
        }
140
        
141
        public void addProvider(DataStoreProvider provider) {
142
                if(provider instanceof RasterProvider) {
143
                        RasterProvider prov = (RasterProvider)provider;
144
                        if(getProviders() == null) {
145
                                ArrayList<RasterProvider> pList = new ArrayList<RasterProvider>();
146
                                pList.add(prov);
147
                                setProviders(pList);
148
                        } else {
149
                                getProviders().add(prov);
150
                        }
151
                }
152
        }
153

    
154
        public void addProvider(RasterDataStore rasterDataStore) {
155
                if(rasterDataStore instanceof DefaultRasterStore) {
156
                        RasterProvider prov = (RasterProvider)((DefaultRasterStore)rasterDataStore).getProvider();
157
                        addProvider(prov);
158
                }
159
        }
160
        
161
        public void setProviders(ArrayList<RasterProvider> provList) {
162
                setDynValue(MultiFileDataParameters.FIELD_PROVIDERS, provList);
163
        }
164

    
165
        public String getDataStoreName() {
166
                return MultiFileProvider.NAME;
167
        }
168

    
169
        public String getDescription() {
170
                return MultiFileProvider.DESCRIPTION;
171
        }
172

    
173
        @SuppressWarnings("unchecked")
174
        public ArrayList<RasterProvider> getProviders() {
175
                return (ArrayList<RasterProvider>)getDynValue(MultiFileDataParameters.FIELD_PROVIDERS);
176
        }
177
        
178
        /*
179
         * (non-Javadoc)
180
         * @see org.gvsig.raster.impl.store.AbstractRasterDataParameters#loadFromState(org.gvsig.tools.persistence.PersistentState)
181
         */
182
        @SuppressWarnings("unchecked")
183
        public void loadFromState(PersistentState state)
184
                        throws PersistenceException {
185
                super.loadFromState(state);
186
                DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
187
                
188
                List<RasterDataParameters> parameters = state.getList("parameters");
189
                for (int i = 0; i < parameters.size(); i++) {
190
                        try {
191
                                DefaultRasterStore dSet = new DefaultRasterStore();
192
                                DefaultRasterProvider provider = (DefaultRasterProvider)dataManager.createProvider(dSet, parameters.get(i));
193
                                addProvider(provider);
194
                        } catch (InitializeException e) {
195
                                throw new PersistenceException(e);
196
                        } catch (ProviderNotRegisteredException e) {
197
                                throw new PersistenceException(e);
198
                        }
199
                }
200
        }
201

    
202
        /*
203
         * (non-Javadoc)
204
         * @see org.gvsig.raster.impl.store.AbstractRasterDataParameters#saveToState(org.gvsig.tools.persistence.PersistentState)
205
         */
206
        public void saveToState(PersistentState state) throws PersistenceException {
207
                super.saveToState(state);
208
                ArrayList<RasterProvider> provList = getProviders();
209
                ArrayList<RasterDataParameters> rasterDataParametersList = new ArrayList<RasterDataParameters>(); 
210
                for (int j = 0; j < provList.size(); j++) {
211
                        rasterDataParametersList.add(provList.get(j).getDataParameters());        
212
                }
213
                
214
                state.set("parameters", rasterDataParametersList);        
215
        }        
216
        
217
        public static void registerPersistence() {
218
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
219
                DynStruct definition = manager.getDefinition("MultiFileDataParameters_Persistent");
220
                if( definition == null ) {
221
                        definition = manager.addDefinition(
222
                                        MultiFileDataParametersImpl.class,
223
                                        "MultiFileDataParameters_Persistent",
224
                                        "MultiFileDataParameters Persistent",
225
                                        null, 
226
                                        null
227
                        );
228
                        definition.addDynFieldList("parameters").setClassOfItems(RasterDataParameters.class).setMandatory(true);
229
                        AbstractRasterDataParameters.registerPersistence(definition);
230
                }
231
        }
232
}