Revision 44309 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVFilesystemServerProvider.java

View differences:

CSVFilesystemServerProvider.java
24 24
package org.gvsig.fmap.dal.store.csv;
25 25

  
26 26
import java.io.File;
27
import java.io.IOException;
28
import org.gvsig.fmap.dal.DALLocator;
29
import org.gvsig.fmap.dal.DataManager;
27 30

  
28 31
import org.gvsig.fmap.dal.DataServerExplorer;
32
import org.gvsig.fmap.dal.DataStoreParameters;
33
import org.gvsig.fmap.dal.NewDataStoreParameters;
34
import org.gvsig.fmap.dal.exception.CreateException;
35
import org.gvsig.fmap.dal.exception.DataException;
36
import org.gvsig.fmap.dal.exception.FileNotFoundException;
37
import org.gvsig.fmap.dal.exception.InitializeException;
38
import org.gvsig.fmap.dal.exception.RemoveException;
39
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
40
import org.gvsig.fmap.dal.feature.EditableFeatureType;
41
import org.gvsig.fmap.dal.feature.FeatureType;
42
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
43
import org.gvsig.fmap.dal.resource.ResourceAction;
44
import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
45
import org.gvsig.fmap.dal.resource.file.FileResource;
29 46
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
47
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
48
import org.gvsig.fmap.dal.serverexplorer.filesystem.AbsolutePathRequiredException;
30 49
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
31 50
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
51
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
52
import org.gvsig.tools.dataTypes.DataTypes;
53
import org.supercsv.prefs.CsvPreference;
32 54

  
33
public class CSVFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider 
34
	implements FilesystemServerExplorerProvider, ResourceConsumer {
55
public class CSVFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider
56
        implements FilesystemServerExplorerProvider, ResourceConsumer {
35 57

  
58
    protected FilesystemServerExplorerProviderServices serverExplorer;
59

  
36 60
    @Override
37
	public String getDataStoreProviderName() {
38
		return CSVStoreProvider.NAME;
39
	}
61
    public String getDataStoreProviderName() {
62
        return CSVStoreProvider.NAME;
63
    }
40 64

  
41 65
    @Override
42
	public int getMode() {
43
		return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
44
	}
66
    public int getMode() {
67
        return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
68
    }
45 69

  
46 70
    @Override
47
	public boolean accept(File pathname) {
48
		return (pathname.getName().toLowerCase().endsWith(".csv"));
49
	}
71
    public boolean accept(File pathname) {
72
        return (pathname.getName().toLowerCase().endsWith(".csv"));
73
    }
50 74

  
51 75
    @Override
52
	public String getDescription() {
53
		return CSVStoreProvider.DESCRIPTION;
54
	}
76
    public String getDescription() {
77
        return CSVStoreProvider.DESCRIPTION;
78
    }
55 79

  
80
    @Override
81
    public DataStoreParameters getParameters(File file) throws DataException {
82
        DataManager manager = DALLocator.getDataManager();
83
        CSVStoreParameters params = (CSVStoreParameters) manager
84
                .createStoreParameters(this.getDataStoreProviderName());
85
        params.setFile(file);
86
        return params;
87
    }
56 88

  
89
    @Override
90
    public boolean canCreate() {
91
        return true;
92
    }
93

  
94
    @Override
95
    public boolean canCreate(NewDataStoreParameters parameters) {
96
        CSVNewStoreParameters params = (CSVNewStoreParameters) parameters;
97
        if (params.getFile().getParentFile().canWrite()) {
98
            return false;
99
        }
100
        if (params.getFile().exists()) {
101
            if (!params.getFile().canWrite()) {
102
                return false;
103
            }
104
        }
105
        if (params.getDefaultFeatureType() == null) {
106
            return false;
107
        }
108
        return true;
109
    }
110

  
111
    public void create(NewDataStoreParameters parameters, boolean overwrite)
112
            throws CreateException {
113

  
114
        final CSVNewStoreParameters params = (CSVNewStoreParameters) parameters;
115
        final File file = params.getFile();
116

  
117
        if (!file.isAbsolute()) {
118
            throw new AbsolutePathRequiredException(file.getPath());
119
        }
120

  
121
        if (file.exists()) {
122
            if (overwrite) {
123
//				if (!file.delete()) {
124
//					throw new CreateException(this.getDataStoreProviderName(),
125
//							new IOException(
126
//							"cannot delete file"));
127
//				}
128
            } else {
129
                throw new CreateException(this.getDataStoreProviderName(),
130
                        new IOException(
131
                                "file already exist"));
132
            }
133
        }
134

  
135
        final FileResource resource;
136
        try {
137

  
138
            resource = (FileResource) this.serverExplorer
139
                    .getServerExplorerProviderServices().createResource(
140
                            FileResource.NAME,
141
                            new Object[]{file.getAbsolutePath()});
142
        } catch (InitializeException e1) {
143
            throw new CreateException(params.getFile().getAbsolutePath(), e1);
144
        }
145
        resource.addConsumer(this);
146

  
147
        try {
148
            resource.execute(new ResourceAction() {
149
                @Override
150
                public Object run() throws Exception {
151
                    CSVFeatureWriter writer = new CSVFeatureWriter();
152
                    //TODO correct values to the writer from params
153
                    writer.initialize(params, file.getAbsoluteFile(), params.getDefaultFeatureType(), null);
154
                    writer.begin();
155

  
156
//                    writer.begin(
157
//                            params,
158
//                            fixFeatureType(params.getDefaultFeatureType()),
159
//                            0
160
//                    );
161
                    writer.end();
162
                    //writer.dispose();
163
                    resource.notifyChanges();
164
                    return null;
165
                }
166
            });
167
        } catch (ResourceExecuteException e) {
168
            throw new CreateException(this.getDataStoreProviderName(), e);
169
        } finally {
170
            resource.removeConsumer(this);
171
        }
172

  
173
    }
174

  
175
    protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
176
        return new CSVNewStoreParameters();
177
    }
178

  
179
    @Override
180
    public NewDataStoreParameters getCreateParameters() {
181
        NewFeatureStoreParameters params = (NewFeatureStoreParameters) this
182
                .createInstanceNewDataStoreParameters();
183
        params.setDefaultFeatureType(this.serverExplorer
184
                .getServerExplorerProviderServices().createNewFeatureType());
185
        return params;
186
    }
187

  
188
    @Override
189
    public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
190
        this.serverExplorer = serverExplorer;
191

  
192
    }
193

  
194
    @Override
195
    public void remove(DataStoreParameters parameters) throws RemoveException {
196
        CSVStoreParameters params = (CSVStoreParameters) parameters;
197
        File file = params.getFile();
198
        if (!file.exists()) {
199
            throw new RemoveException(this.getDataStoreProviderName(),
200
                    new FileNotFoundException(params.getFile()));
201
        }
202
        if (!file.delete()) {
203
            throw new RemoveException(this.getDataStoreProviderName(),
204
                    new IOException()); // FIXME Exception
205
        }
206
    }
207

  
208
    @Override
209
    public boolean closeResourceRequested(ResourceProvider resource) {
210
        // while it is using a resource anyone can't close it
211
        return !(this.equals(resource));
212
    }
213

  
214
    /*
215
	 * (non-Javadoc)
216
	 *
217
	 * @see
218
	 * org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.
219
	 * gvsig.fmap.dal.resource.spi.ResourceProvider)
220
     */
221
    @Override
222
    public void resourceChanged(ResourceProvider resource) {
223
        // Do nothing
224
    }
225

  
226
    protected EditableFeatureType fixFeatureType(FeatureType featureType) {
227
        EditableFeatureType newFeatureType;
228

  
229
        if (featureType instanceof EditableFeatureType) {
230
            newFeatureType = (EditableFeatureType) featureType.getCopy();
231
        } else {
232
            newFeatureType = featureType.getEditable();
233
        }
234

  
235
        for (int i = 0; i < newFeatureType.size(); i++) {
236
            EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) newFeatureType.getAttributeDescriptor(i);
237
            String s;
238
            switch (attr.getType()) {
239
                case DataTypes.INT:
240
                    s = String.valueOf(Integer.MAX_VALUE);
241
                    attr.setSize(18);
242
                    attr.setPrecision(0);
243
                    break;
244
                case DataTypes.LONG:
245
                    s = String.valueOf(Long.MAX_VALUE);
246
                    attr.setSize(18);
247
                    attr.setPrecision(0);
248
                    break;
249
                case DataTypes.FLOAT:
250
                    attr.setSize(18);
251
                    attr.setPrecision(6);
252
                    break;
253
                case DataTypes.DOUBLE:
254
                    attr.setSize(18);
255
                    attr.setPrecision(6);
256
                    break;
257
            }
258
        }
259
        return newFeatureType;
260
    }
57 261
}

Also available in: Unified diff