Statistics
| Revision:

gvsig-raster / org.gvsig.raster.multifile / branches / org.gvsig.raster.multifile_dataaccess_refactoring / org.gvsig.raster.multifile.io / src / main / java / org / gvsig / raster / multifile / io / MultiFileDataParametersImpl.java @ 2321

History | View | Annotate | Download (7.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
/*
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.AbstractRasterProvider;
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.DynStruct;
48
import org.gvsig.tools.persistence.PersistenceManager;
49
import org.gvsig.tools.persistence.PersistentState;
50
import org.gvsig.tools.persistence.exception.PersistenceException;
51

    
52
/**
53
 * Parameters for the Multifile provider
54
 * @author Nacho Brodin (nachobrodin@gmail.com)
55
 */
56
public class MultiFileDataParametersImpl extends AbstractRasterFileDataParameters implements MultiFileDataParameters {
57
        private List<RasterProvider>    providerList = null;
58
        
59
        public MultiFileDataParametersImpl() {
60
                super();
61
                providerList = new ArrayList<RasterProvider>();
62
                initialize();
63
        }
64
        
65
        protected void initialize() {
66
                delegatedDynObject = (DelegatedDynObject) ToolsLocator
67
                                .getDynObjectManager().createDynObject(
68
                                                registerDynClass());
69
        }
70
        
71
        @SuppressWarnings("unchecked")
72
        public void loadFromState(PersistentState state)
73
                        throws PersistenceException {
74
                super.loadFromState(state);
75
                DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
76
                
77
                List<RasterDataParameters> parameters = state.getList("parameters");
78
                for (int i = 0; i < parameters.size(); i++) {
79
                        try {
80
                                DefaultRasterStore dSet = new DefaultRasterStore();
81
                                AbstractRasterProvider provider = (AbstractRasterProvider)dataManager.createProvider(dSet, parameters.get(i));
82
                                addProvider(provider);
83
                        } catch (InitializeException e) {
84
                                throw new PersistenceException(e);
85
                        } catch (ProviderNotRegisteredException e) {
86
                                throw new PersistenceException(e);
87
                        }
88
                }
89
        }
90

    
91
        public void saveToState(PersistentState state) throws PersistenceException {
92
                super.saveToState(state);
93
                List<RasterProvider> provList = getProviders();
94
                List<RasterDataParameters> rasterDataParametersList = new ArrayList<RasterDataParameters>(); 
95
                for (int j = 0; j < provList.size(); j++) {
96
                        rasterDataParametersList.add(provList.get(j).getDataParameters());        
97
                }
98
                
99
                state.set("parameters", rasterDataParametersList);        
100
        }        
101
        
102
        public static DynStruct registerDynClass() {
103
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
104
                DynStruct definition = manager.getDefinition("MultiFileDataParameters_Persistent");
105
                if( definition == null ) {
106
                        definition = manager.addDefinition(
107
                                        MultiFileDataParametersImpl.class,
108
                                        "MultiFileDataParameters_Persistent",
109
                                        "MultiFileDataParameters Persistent",
110
                                        null, 
111
                                        null
112
                        );
113
                        AbstractRasterDataParameters.registerDynClass(definition);
114
                }
115
                
116
                definition.addDynFieldList("parameters")
117
                .setClassOfItems(RasterDataParameters.class)
118
                .setMandatory(false);
119
                
120
                return definition;
121
        }
122
        
123
        public void removeAllProviders() {
124
                getProviders().clear();
125
                getParams().clear();
126
        }
127
        
128
        public boolean hasProviders() {
129
                return getProviders().size() > 0;
130
        }
131
        
132
        public void removeProvider(String uri) {
133
                if(getProviders() != null) {
134
                        List<RasterProvider> provList = getProviders();
135
                        List<RasterDataParameters> paramList = getParams();
136
                        for (int i = 0; i < provList.size(); i++) {
137
                                RasterProvider rProv = provList.get(i);
138
                                if(rProv.getURIOfFirstProvider().compareTo(uri) == 0) {
139
                                        provList.remove(i);
140
                                        paramList.remove(i);
141
                                        return;
142
                                }
143
                        }
144
                }
145
        }
146
        
147
        public void addProviderNotTiled(DataStoreProvider provider) {
148
                if(provider instanceof RasterProvider) {
149
                        RasterProvider prov = (RasterProvider)provider;
150
                        if(!prov.isTiled()) {
151
                                addToList(prov);
152
                        }
153
                }
154
        }
155
        
156
        public void setFirstProvider(DataStoreProvider provider) {
157
                if(provider instanceof RasterProvider) {
158
                        RasterProvider prov = (RasterProvider)provider;
159
                        if(getProviders() != null) {
160
                                getProviders().set(0, prov);
161
                                getParams().set(0, prov.getDataParameters());
162
                        }
163
                }
164
        }
165
        
166
        public void addProvider(DataStoreProvider provider) {
167
                if(provider instanceof RasterProvider) {
168
                        RasterProvider prov = (RasterProvider)provider;
169
                        addToList(prov);
170
                }
171
        }
172

    
173
        public void addProvider(RasterDataStore rasterDataStore) {
174
                if(rasterDataStore instanceof DefaultRasterStore) {
175
                        RasterProvider prov = (RasterProvider)((DefaultRasterStore)rasterDataStore).getProvider();
176
                        addToList(prov);
177
                }
178
        }
179
        
180
        private void addToList(RasterProvider prov) {
181
                addProviderToList(prov);
182
                addParamToList(prov);
183
        }
184
        
185
        @SuppressWarnings("unchecked")
186
        private List<RasterDataParameters> getParams() {
187
                return (List<RasterDataParameters>)getDynValue("parameters");
188
        }
189
        
190
        private void addParamToList(RasterProvider prov) {
191
                List<RasterDataParameters> paramList = getParams();
192
                if(paramList == null) {
193
                        paramList = new ArrayList<RasterDataParameters>();
194
                        paramList.add(prov.getDataParameters());
195
                        setDynValue("parameters", paramList);
196
                } else {
197
                        paramList.add(prov.getDataParameters());
198
                }
199
        }
200
        
201
        public List<RasterProvider> getProviders() {
202
                return this.providerList;
203
        }
204
        
205
        private void addProviderToList(RasterProvider prov) {
206
                List<RasterProvider> provList = getProviders(); 
207
                if(provList == null) {
208
                        provList = new ArrayList<RasterProvider>();
209
                        provList.add(prov);
210
                        setDynValue("parameters", provList);
211
                } else {
212
                        provList.add(prov);
213
                }
214
        }
215
        
216
        
217
        public void setProviders(ArrayList<RasterProvider> provList) {
218
                List<RasterDataParameters> paramsList = new ArrayList<RasterDataParameters>();
219
                for (int i = 0; i < provList.size(); i++) {
220
                        paramsList.add(provList.get(i).getDataParameters());
221
                }
222
                setDynValue("parameters", paramsList);
223
                providerList = provList;
224
        }
225

    
226
        public String getDataStoreName() {
227
                return MultiFileProvider.NAME;
228
        }
229

    
230
        public String getDescription() {
231
                return MultiFileProvider.DESCRIPTION;
232
        }
233
        
234
}