Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dalfile / src / org / gvsig / fmap / dal / store / dbf / DBFFilesystemServerProvider.java @ 32880

History | View | Annotate | Download (5 KB)

1
package org.gvsig.fmap.dal.store.dbf;
2

    
3
import java.io.File;
4
import java.io.IOException;
5

    
6
import org.gvsig.fmap.dal.DALLocator;
7
import org.gvsig.fmap.dal.DataManager;
8
import org.gvsig.fmap.dal.DataStoreParameters;
9
import org.gvsig.fmap.dal.NewDataStoreParameters;
10
import org.gvsig.fmap.dal.exception.CreateException;
11
import org.gvsig.fmap.dal.exception.DataException;
12
import org.gvsig.fmap.dal.exception.FileNotFoundException;
13
import org.gvsig.fmap.dal.exception.InitializeException;
14
import org.gvsig.fmap.dal.exception.RemoveException;
15
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
16
import org.gvsig.fmap.dal.resource.ResourceAction;
17
import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
18
import org.gvsig.fmap.dal.resource.file.FileResource;
19
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
20
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
21
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
22
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
23

    
24
public class DBFFilesystemServerProvider implements FilesystemServerExplorerProvider,
25
                ResourceConsumer {
26

    
27
        protected FilesystemServerExplorerProviderServices serverExplorer;
28

    
29
        public String getDataStoreProviderName() {
30
                return DBFStoreProvider.NAME;
31
        }
32

    
33
        public boolean accept(File pathname) {
34
                return (pathname.getName().toLowerCase().endsWith(".dbf"));
35
        }
36

    
37
        public String getDescription() {
38
                return DBFStoreProvider.DESCRIPTION;
39
        }
40

    
41
        public DataStoreParameters getParameters(File file) throws DataException {
42
                DataManager manager = DALLocator.getDataManager();
43
                DBFStoreParameters params = (DBFStoreParameters) manager
44
                                .createStoreParameters(this.getDataStoreProviderName());
45
                params.setDBFFile(file.getPath());
46
                return params;
47
        }
48

    
49
        public boolean canCreate() {
50
                return true;
51
        }
52

    
53
        public boolean canCreate(NewDataStoreParameters parameters) {
54
                DBFNewStoreParameters params = (DBFNewStoreParameters) parameters;
55
                if (params.getDBFFile().getParentFile().canWrite()) {
56
                        return false;
57
                }
58
                if (params.getDBFFile().exists()) {
59
                        if (!params.getDBFFile().canWrite()) {
60
                                return false;
61
                        }
62
                }
63
                if (params.getDefaultFeatureType() == null) {
64
                        return false;
65
                }
66
                return true;
67
        }
68

    
69
        public void create(NewDataStoreParameters parameters, boolean overwrite)
70
                        throws CreateException {
71

    
72
                final DBFNewStoreParameters params = (DBFNewStoreParameters) parameters;
73
                File file = params.getDBFFile();
74

    
75
                if (file.exists()) {
76
                        if (overwrite) {
77
//                                if (!file.delete()) {
78
//                                        throw new CreateException(this.getDataStoreProviderName(),
79
//                                                        new IOException(
80
//                                                        "cannot delete file"));
81
//                                }
82
                        } else {
83
                                throw new CreateException(this.getDataStoreProviderName(),
84
                                                new IOException(
85
                                                "file already exist"));
86
                        }
87
                }
88

    
89
                final FileResource resource;
90
                try {
91

    
92
                        resource = (FileResource) this.serverExplorer
93
                                        .getServerExplorerProviderServices().createResource(
94
                                                        FileResource.NAME,
95
                                        new Object[] { file.getAbsolutePath() });
96
                } catch (InitializeException e1) {
97
                        throw new CreateException(params.getDBFFileName(), e1);
98
                }
99
                resource.addConsumer(this);
100

    
101
                try {
102
                        resource.execute(new ResourceAction() {
103
                                public Object run() throws Exception {
104
                                        DBFFeatureWriter writer =
105
                                                        new DBFFeatureWriter(getDataStoreProviderName());
106

    
107
                                        writer.begin(params, params.getDefaultFeatureType(), 0);
108
                                        writer.end();
109
                                        writer.dispose();
110
                                        resource.notifyChanges();
111
                                        return null;
112
                                }
113
                        });
114
                } catch (ResourceExecuteException e) {
115
                        throw new CreateException(this.getDataStoreProviderName(), e);
116
                } finally {
117
                        resource.removeConsumer(this);
118
                }
119

    
120

    
121
        }
122

    
123

    
124
        protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
125
                return new DBFNewStoreParameters();
126
        }
127

    
128

    
129
        public NewDataStoreParameters getCreateParameters() {
130
                NewFeatureStoreParameters params = (NewFeatureStoreParameters) this
131
                                .createInstanceNewDataStoreParameters();
132
                params.setDefaultFeatureType(this.serverExplorer
133
                                .getServerExplorerProviderServices().createNewFeatureType());
134
                return params;
135
        }
136

    
137
        public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
138
                this.serverExplorer = serverExplorer;
139

    
140
        }
141

    
142
        public void remove(DataStoreParameters parameters) throws RemoveException {
143
                DBFStoreParameters params = (DBFStoreParameters) parameters;
144
                File file = params.getDBFFile();
145
                if (!file.exists()) {
146
                        throw new RemoveException(this.getDataStoreProviderName(),
147
                                        new FileNotFoundException(params.getDBFFile()));
148
                }
149
                if (!file.delete()) {
150
                        throw new RemoveException(this.getDataStoreProviderName(),
151
                                        new IOException()); // FIXME Exception
152
                }
153
        }
154

    
155
        public boolean closeResourceRequested(ResourceProvider resource) {
156
                // while it is using a resource anyone can't close it
157
                return !(this.equals(resource));
158
        }
159

    
160
        /*
161
         * (non-Javadoc)
162
         *
163
         * @see
164
         * org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.
165
         * gvsig.fmap.dal.resource.spi.ResourceProvider)
166
         */
167
        public void resourceChanged(ResourceProvider resource) {
168
                // Do nothing
169
        }
170

    
171
}