Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.newlayer / org.gvsig.newlayer.lib / org.gvsig.newlayer.lib.impl / src / main / java / org / gvsig / newlayer / impl / DefaultNewLayerService.java @ 47433

History | View | Annotate | Download (8.97 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.newlayer.impl;
25

    
26
import java.util.ArrayList;
27
import java.util.Iterator;
28
import java.util.LinkedHashSet;
29
import java.util.List;
30
import java.util.Set;
31
import org.cresques.cts.IProjection;
32

    
33
import org.gvsig.fmap.dal.DataServerExplorer;
34
import org.gvsig.fmap.dal.DataStoreParameters;
35
import org.gvsig.fmap.dal.feature.EditableFeatureType;
36
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
37
import org.gvsig.newlayer.NewLayerException;
38
import org.gvsig.newlayer.NewLayerManager;
39
import org.gvsig.newlayer.NewLayerProvider;
40
import org.gvsig.newlayer.NewLayerProviderFactory;
41
import org.gvsig.newlayer.NewLayerService;
42
import org.gvsig.newlayer.NewLayerServiceException;
43
import org.gvsig.tools.service.ServiceException;
44

    
45
/**
46
 * Default {@link NewLayerService} implementation.
47
 *
48
 * @author gvSIG Team
49
 */
50
@SuppressWarnings("UseSpecificCatch")
51
public class DefaultNewLayerService implements NewLayerService {
52

    
53
    private final NewLayerManager newLayerManager;
54
    private NewLayerProviderFactory type;
55
    private NewLayerProvider provider;
56
    private boolean addTableToProject = true;
57
    private IProjection defaultProjection;
58

    
59
    /**
60
     * {@link DefaultNewLayerService} constructor
61
     * @param manager
62
     */
63
    public DefaultNewLayerService(NewLayerManager manager) {
64
        this.newLayerManager = manager;
65
    }
66

    
67
    @Override
68
    public NewLayerProvider getProvider() {
69
        return provider;
70
    }
71

    
72
    @Override
73
    public void createTable() throws NewLayerServiceException {
74
        try {
75
            this.getExplorer().add(
76
                    this.getStoreProviderName(),
77
                    this.getNewStoreParameters(), 
78
                    true
79
            );
80
            firePostCreateTable();
81
        } catch (Exception e) {
82
            throw new CantCreateNewLayerException(e);
83
        }
84
    }
85

    
86
//    @Override
87
//    public void loadTable() throws NewLayerServiceException {
88
//        try {
89
//            if( this.getFeatureType().getDefaultGeometryAttribute()==null ) {
90
//                return;
91
//            }
92
//            String providerName = this.getStoreProviderName();
93
//            DataStoreParameters storeParameters = this.getOpenStoreParameters();
94
//            DataManager dataManager = DALLocator.getDataManager();
95
//            DataStore store = dataManager.openStore(providerName, storeParameters);
96
//            String layerName = store.getName();
97
//
98
//                MapContextManager mapContextManager = MapContextLocator.getMapContextManager();
99
//                FLayer lyr = mapContextManager.createLayer(layerName, store);
100
//                lyr.setActive(true);
101
//                lyr.setVisible(true);
102
//                mapContext.getLayers().addLayer(lyr);
103
//
104
//                lyr.dispose();
105
//        } catch (DataException | ValidateDataParametersException e) {
106
//            throw new CantOpenStoreException(e);
107
//        } catch (LoadLayerException e) {
108
//            throw new CantLoadNewLayerException(e);
109
//        } catch (Exception e) {
110
//            throw new NewLayerServiceException(e);
111
//        }
112
//
113
//    }
114

    
115
    public class CantCreateNewLayerException extends NewLayerServiceException {
116

    
117
        /**
118
         *
119
         */
120
        private static final long serialVersionUID = 4208215791054246118L;
121

    
122
        public CantCreateNewLayerException(Throwable cause) {
123
            super("Can't create the layer", cause, "_cant_create_the_layer",
124
                    serialVersionUID);
125
        }
126
    }
127

    
128
    public class CantOpenStoreException extends NewLayerServiceException {
129

    
130
        /**
131
         *
132
         */
133
        private static final long serialVersionUID = -2245228621032918630L;
134

    
135
        public CantOpenStoreException(Throwable cause) {
136
            super("Can't open store", cause, "_cant_open_store",
137
                    serialVersionUID);
138
        }
139
    }
140

    
141
    public class CantLoadNewLayerException extends NewLayerServiceException {
142

    
143
        /**
144
         *
145
         */
146
        private static final long serialVersionUID = -1711950651766745963L;
147

    
148
        public CantLoadNewLayerException(Throwable cause) {
149
            super("Can't load the new layer", cause,
150
                    "_cant_load_the_new_layer", serialVersionUID);
151
        }
152
    }
153

    
154
    @Override
155
    public void setType(String type) {
156
        try {
157
            setProviderFactory(this.newLayerManager.getNewLayerProviderFactory(type));
158
        } catch (ServiceException e) {
159
            throw new RuntimeException(e);
160
        }
161
    }
162

    
163
    @Override
164
    public DataServerExplorer getExplorer() throws NewLayerException {
165
        return getProvider().getExplorer();
166
    }
167

    
168
    @Override
169
    public String getStoreProviderName() {
170
        return getProvider().getStoreName();
171
    }
172

    
173
    @Override
174
    public EditableFeatureType getFeatureType() {
175
        return getProvider().getFeatureType();
176
    }
177

    
178
    @Override
179
    public NewFeatureStoreParameters getNewStoreParameters() throws NewLayerException {
180
        return getProvider().getNewStoreParameters();
181
    }
182

    
183
    @Override
184
    public DataStoreParameters getOpenStoreParameters() throws NewLayerException {
185
        return getProvider().getOpenStoreParameters();
186
    }
187

    
188
    @Override
189
    public NewFeatureStoreParameters getNewStoreParametersQuietly() {
190
        try {
191
            return getProvider().getNewStoreParameters();
192
        } catch(Exception ex) {   
193
            return null;
194
        }
195
    }
196

    
197
    @Override
198
    public DataStoreParameters getOpenStoreParametersQuietly() {
199
        try {
200
            return getProvider().getOpenStoreParameters();
201
        } catch(Exception ex) {
202
            return null;
203
        }
204
    }
205

    
206
    @Override
207
    public List<String> getTypes() {
208
        List<String> types = new ArrayList<>();
209
        List<NewLayerProviderFactory> providers = getProviderFactories();
210
        Iterator<NewLayerProviderFactory> it = providers.iterator();
211
        while (it.hasNext()) {
212
            NewLayerProviderFactory newLayerProviderFactory = it.next();
213
            types.add(newLayerProviderFactory.getName());
214
        }
215
        return types;
216
    }
217

    
218
    @Override
219
    public String getType() {
220
        return this.type.getName();
221
    }
222

    
223
    @Override
224
    public void setAddTableToProject(boolean b) {
225
        this.addTableToProject = b;
226
    }
227

    
228
    @Override
229
    public boolean isAddTableToProject() {
230
        return this.addTableToProject;
231
    }
232

    
233
    @Override
234
    public void setProviderFactory(NewLayerProviderFactory type) {
235
        this.type = type;
236
        this.provider = type.create(this);
237
    }
238

    
239
    @Override
240
    public NewLayerProviderFactory getProviderFactory() {
241
        return type;
242
    }
243

    
244
    @Override
245
    public List<NewLayerProviderFactory> getProviderFactories() {
246

    
247
        List<NewLayerProviderFactory> providers = new ArrayList<>(
248
                this.newLayerManager.getProviders(NewLayerManager.STORETYPE.ANY)
249
        );
250
        for (Iterator<NewLayerProviderFactory> iterator = providers.iterator(); iterator.hasNext();) {
251
            NewLayerProviderFactory newLayerProviderFactory = iterator.next();
252
            if (!newLayerProviderFactory.isEnabled()) {
253
                iterator.remove();
254
            }
255
        }
256
        return providers;
257
    }
258

    
259
    private Set<NewLayerServiceListener> listeners = null;
260
    
261
    @Override
262
    public void addNewLayerServiceListener(NewLayerServiceListener listener) {
263
        if( listener == null ) {
264
            return;
265
        }
266
        if( this.listeners==null ) {
267
            this.listeners = new LinkedHashSet<>();
268
        }
269
        this.listeners.add(listener);
270
    }
271

    
272
    protected void firePostCreateTable() {
273
        if( this.listeners==null ) {
274
            return;
275
        }
276
        for (NewLayerServiceListener listener : this.listeners) {
277
            if( listener==null ) {
278
                continue;
279
            }
280
            try {
281
                listener.postCreateTable(this);
282
            } catch(Throwable t) {
283
                // Do nothing.
284
            }
285
        }
286
    }
287

    
288
    @Override
289
    public void setDefaultProjection(IProjection projection) {
290
        this.defaultProjection = projection;
291
    }
292

    
293
    @Override
294
    public IProjection getDefaultProjection() {
295
        return this.defaultProjection;
296
    }
297
    
298
    
299
}