Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dalfile / src / org / gvsig / fmap / dal / store / shp / SHPFilesystemServerProvider.java @ 25789

History | View | Annotate | Download (5.43 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
* 2008 IVER T.I. S.A.   {{Task}}
26
*/
27

    
28
/**
29
 *
30
 */
31
package org.gvsig.fmap.dal.store.shp;
32

    
33
import java.io.File;
34
import java.io.IOException;
35

    
36
import org.gvsig.fmap.dal.DALLocator;
37
import org.gvsig.fmap.dal.DataManager;
38
import org.gvsig.fmap.dal.DataStoreParameters;
39
import org.gvsig.fmap.dal.NewDataStoreParameters;
40
import org.gvsig.fmap.dal.exception.CreateException;
41
import org.gvsig.fmap.dal.exception.DataException;
42
import org.gvsig.fmap.dal.exception.InitializeException;
43
import org.gvsig.fmap.dal.exception.RemoveException;
44
import org.gvsig.fmap.dal.feature.EditableFeatureType;
45
import org.gvsig.fmap.dal.feature.FeatureType;
46
import org.gvsig.fmap.dal.resource.file.FileResource;
47
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
48
import org.gvsig.fmap.dal.store.dbf.DBFFilesystemServerProvider;
49

    
50
/**
51
 * @author jmvivo
52
 *
53
 */
54
public class SHPFilesystemServerProvider extends DBFFilesystemServerProvider {
55

    
56
        public boolean accept(File pathname) {
57
                return pathname.getName().toLowerCase().endsWith(".shp");
58
        }
59

    
60
        public boolean canCreate() {
61
                return true;
62
        }
63

    
64
        public boolean canCreate(NewDataStoreParameters parameters) {
65
                if (!super.canCreate(parameters)) {
66
                        return false;
67
                }
68
                SHPNewStoreParameters params = (SHPNewStoreParameters) parameters;
69
                if (params.getSHPFile().getParentFile().canWrite()) {
70
                        return false;
71
                }
72
                if (params.getSHPFile().exists()) {
73
                        if (!params.getSHPFile().canWrite()) {
74
                                return false;
75
                        }
76
                }
77
                if (params.getSHXFile().getParentFile().canWrite()) {
78
                        return false;
79
                }
80
                if (params.getSHXFile().exists()) {
81
                        if (!params.getSHXFile().canWrite()) {
82
                                return false;
83
                        }
84
                }
85
                return true;
86
        }
87

    
88
        public boolean closeResourceRequested(ResourceProvider resource) {
89
                // while it is using a resource anyone can't close it
90
                return false;
91
        }
92

    
93
        public void create(NewDataStoreParameters parameters, boolean overwrite)
94
        throws CreateException {
95

    
96
                SHPNewStoreParameters params = (SHPNewStoreParameters) parameters;
97
                FeatureType fType = params.getDefaultFeatureType();
98
                // TODO Comprobar que el campo de geometria
99
                EditableFeatureType dbfFtype = fType.getEditable();
100

    
101
                SHPStoreProvider.removeGeometryColumn(dbfFtype);
102
                File shpFile = params.getSHPFile();
103
                File shxFile = params.getSHXFile();
104

    
105
                if (shpFile.exists()) {
106
                        if (overwrite) {
107
                                if (!shpFile.delete()) {
108
                                        throw new CreateException(this.getDataStoreProviderName(), new IOException(
109
                                                        "cannot delete file: " + shpFile.getPath()));
110
                                }
111
                                if (shxFile.exists()) {
112
                                        if (!shxFile.delete()) {
113
                                                throw new CreateException(this.getDataStoreProviderName(),
114
                                                                new IOException("cannot delete file: "
115
                                                                                + shxFile.getPath()));
116
                                        }
117

    
118
                                }
119
                        } else {
120
                                throw new CreateException(this.getDataStoreProviderName(),
121
                                                new IOException(
122
                                                "file already exist"));
123
        }
124
                }
125

    
126
                FileResource resource;
127
                try {
128
                        resource = (FileResource) this.serverExplorer
129
                                        .getServerExplorerProviderServices().createResource(
130
                                                        FileResource.NAME,
131
                                        new Object[] { shpFile.getAbsolutePath() });
132
                } catch (InitializeException e1) {
133
                        throw new CreateException(shpFile.getPath(), e1);
134
                }
135
                resource.addConsumer(this);
136

    
137
                SHPFeatureWriter writer = null;
138
                try {
139
                        resource.begin();
140

    
141
                        writer = new SHPFeatureWriter(this.getDataStoreProviderName());
142

    
143
                        writer.begin(params, fType, dbfFtype, 0);
144

    
145
                        writer.end();
146

    
147
                        resource.notifyChanges();
148
                } catch (Exception e) {
149
                        throw new CreateException(this.getDataStoreProviderName(), e);
150
                } finally {
151
                        resource.end();
152
                        resource.removeConsumer(this);
153
                }
154
        }
155

    
156

    
157
        public NewDataStoreParameters getCreateParameters() {
158
                SHPNewStoreParameters params = (SHPNewStoreParameters) super
159
                                .getCreateParameters();
160

    
161
                EditableFeatureType fType = (EditableFeatureType) params
162
                                .getDefaultFeatureType();
163
                SHPStoreProvider.addGeometryColumn(fType);
164
                params.setDefaultFeatureType(fType);
165
                return params;
166
        }
167

    
168
        protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
169
                return new SHPNewStoreParameters();
170
        }
171

    
172
        public String getDataStoreProviderName() {
173
                return SHPStoreProvider.NAME;
174
        }
175

    
176
        public String getDescription() {
177
                return SHPStoreProvider.DESCRIPTION;
178
        }
179

    
180

    
181
        public DataStoreParameters getParameters(File file) throws DataException {
182
                DataManager manager = DALLocator.getDataManager();
183
                SHPStoreParameters params = (SHPStoreParameters) manager
184
                                .createStoreParameters(this.getDataStoreProviderName());
185
                params.setSHPFileName(file.getPath());
186
                return params;
187

    
188
        }
189

    
190
        public void remove(DataStoreParameters parameters) throws RemoveException {
191
                // TODO Auto-generated method stub
192
                super.remove(parameters);
193
        }
194

    
195
}