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 @ 4181

History | View | Annotate | Download (7.18 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.net.URI;
31
import java.util.ArrayList;
32
import java.util.List;
33

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

    
53
/**
54
 * Parameters for the Multifile provider
55
 * @author Nacho Brodin (nachobrodin@gmail.com)
56
 */
57
public class MultiFileDataParametersImpl extends AbstractRasterFileDataParameters implements MultiFileDataParameters {
58
        private List<RasterProvider>    providerList = null;
59

    
60
        public MultiFileDataParametersImpl() {
61
                super();
62
                providerList = new ArrayList<RasterProvider>();
63
                initialize();
64
        }
65

    
66
        protected void initialize() {
67
                delegatedDynObject = (DelegatedDynObject) ToolsLocator
68
                                .getDynObjectManager().createDynObject(
69
                                                registerDynClass());
70
        }
71

    
72
        @SuppressWarnings("unchecked")
73
        public void loadFromState(PersistentState state)
74
                        throws PersistenceException {
75
                super.loadFromState(state);
76
                DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
77

    
78
                List<RasterDataParameters> parameters = state.getList("parameters");
79
                for (int i = 0; i < parameters.size(); i++) {
80
                        try {
81
                                DefaultRasterStore dSet = new DefaultRasterStore();
82
                                AbstractRasterProvider provider = (AbstractRasterProvider)dataManager.createProvider(dSet, parameters.get(i));
83
                                addProvider(provider);
84
                        } catch (InitializeException e) {
85
                                throw new PersistenceException(e);
86
                        } catch (ProviderNotRegisteredException e) {
87
                                throw new PersistenceException(e);
88
                        }
89
                }
90
        }
91

    
92
        public void saveToState(PersistentState state) throws PersistenceException {
93
                super.saveToState(state);
94
                List<RasterProvider> provList = getProviders();
95
                List<RasterDataParameters> rasterDataParametersList = new ArrayList<RasterDataParameters>();
96
                for (int j = 0; j < provList.size(); j++) {
97
                        rasterDataParametersList.add(provList.get(j).getDataParameters());
98
                }
99

    
100
                state.set("parameters", rasterDataParametersList);
101
        }
102

    
103
        public static DynStruct registerDynClass() {
104
                PersistenceManager manager = ToolsLocator.getPersistenceManager();
105
                DynStruct definition = manager.getDefinition("MultiFileDataParameters_Persistent");
106
                if( definition == null ) {
107
                        definition = manager.addDefinition(
108
                                        MultiFileDataParametersImpl.class,
109
                                        "MultiFileDataParameters_Persistent",
110
                                        "MultiFileDataParameters Persistent",
111
                                        null,
112
                                        null
113
                        );
114
                        AbstractRasterDataParameters.registerDynClass(definition);
115
                }
116

    
117
                definition.addDynFieldList("parameters")
118
                .setClassOfItems(RasterDataParameters.class)
119
                .setMandatory(false);
120

    
121
                return definition;
122
        }
123

    
124
        public void removeAllProviders() {
125
                getProviders().clear();
126
                getParams().clear();
127
        }
128

    
129
        public boolean hasProviders() {
130
                return getProviders().size() > 0;
131
        }
132

    
133
        public void removeProvider(URI uri) {
134
                if(getProviders() != null) {
135
                        List<RasterProvider> provList = getProviders();
136
                        List<RasterDataParameters> paramList = getParams();
137
                        for (int i = 0; i < provList.size(); i++) {
138
                                RasterProvider rProv = provList.get(i);
139
                                if(rProv.getURIOfFirstProvider().compareTo(uri) == 0) {
140
                                        provList.remove(i);
141
                                        paramList.remove(i);
142
                                        return;
143
                                }
144
                        }
145
                }
146
        }
147

    
148
        public void addProviderNotTiled(DataStoreProvider provider) {
149
                if(provider instanceof RasterProvider) {
150
                        RasterProvider prov = (RasterProvider)provider;
151
                        if(!prov.isTiled()) {
152
                                addToList(prov);
153
                        }
154
                }
155
        }
156

    
157
        public void setFirstProvider(DataStoreProvider provider) {
158
                if(provider instanceof RasterProvider) {
159
                        RasterProvider prov = (RasterProvider)provider;
160
                        if(getProviders() != null) {
161
                                getProviders().set(0, prov);
162
                                getParams().set(0, prov.getDataParameters());
163
                        }
164
                }
165
        }
166

    
167
        public void addProvider(DataStoreProvider provider) {
168
                if(provider instanceof RasterProvider) {
169
                        RasterProvider prov = (RasterProvider)provider;
170
                        addToList(prov);
171
                }
172
        }
173

    
174
        public void addProvider(RasterDataStore rasterDataStore) {
175
                if(rasterDataStore instanceof DefaultRasterStore) {
176
                        RasterProvider prov = (RasterProvider)((DefaultRasterStore)rasterDataStore).getProvider();
177
                        addToList(prov);
178
                }
179
        }
180

    
181
        private void addToList(RasterProvider prov) {
182
                addProviderToList(prov);
183
                addParamToList(prov);
184
        }
185

    
186
        @SuppressWarnings("unchecked")
187
        private List<RasterDataParameters> getParams() {
188
                return (List<RasterDataParameters>)getDynValue("parameters");
189
        }
190

    
191
        private void addParamToList(RasterProvider prov) {
192
                List<RasterDataParameters> paramList = getParams();
193
                if(paramList == null) {
194
                        paramList = new ArrayList<RasterDataParameters>();
195
                        paramList.add(prov.getDataParameters());
196
                        setDynValue("parameters", paramList);
197
                } else {
198
                        paramList.add(prov.getDataParameters());
199
                }
200
        }
201

    
202
        public List<RasterProvider> getProviders() {
203
                return this.providerList;
204
        }
205

    
206
        private void addProviderToList(RasterProvider prov) {
207
                List<RasterProvider> provList = getProviders();
208
                if(provList == null) {
209
                        provList = new ArrayList<RasterProvider>();
210
                        provList.add(prov);
211
                        setDynValue("parameters", provList);
212
                } else {
213
                        provList.add(prov);
214
                }
215
        }
216

    
217

    
218
        public void setProviders(ArrayList<RasterProvider> provList) {
219
                List<RasterDataParameters> paramsList = new ArrayList<RasterDataParameters>();
220
                for (int i = 0; i < provList.size(); i++) {
221
                        paramsList.add(provList.get(i).getDataParameters());
222
                }
223
                setDynValue("parameters", paramsList);
224
                providerList = provList;
225
        }
226

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

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

    
235
}