Statistics
| Revision:

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

History | View | Annotate | Download (4.76 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.file.FileResource;
17
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
18
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
19
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
20
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
21

    
22
public class DBFFilesystemServerProvider implements FilesystemServerExplorerProvider,
23
                ResourceConsumer {
24

    
25
        protected FilesystemServerExplorerProviderServices serverExplorer;
26

    
27
        public String getDataStoreProviderName() {
28
                return DBFStoreProvider.NAME;
29
        }
30

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

    
35
        public String getDescription() {
36
                return DBFStoreProvider.DESCRIPTION;
37
        }
38

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

    
47
        public boolean canCreate() {
48
                return true;
49
        }
50

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

    
67
        public void create(NewDataStoreParameters parameters, boolean overwrite)
68
                        throws CreateException {
69

    
70
                DBFNewStoreParameters params = (DBFNewStoreParameters) parameters;
71
                File file = params.getDBFFile();
72

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

    
87
                FileResource resource;
88
                try {
89

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

    
99
                try {
100
                        resource.begin();
101

    
102
                        DBFFeatureWriter writer = new DBFFeatureWriter(this
103
                                        .getDataStoreProviderName());
104

    
105
                        writer.begin(params, params.getDefaultFeatureType(), 0);
106
                        writer.end();
107
                        writer.dispose();
108

    
109
                        resource.notifyChanges();
110
                } catch (Exception e) {
111
                        throw new CreateException(this.getDataStoreProviderName(), e);
112
                } finally {
113
                        resource.end();
114
                        resource.removeConsumer(this);
115
                }
116

    
117

    
118
        }
119

    
120

    
121
        protected NewDataStoreParameters createInstanceNewDataStoreParameters() {
122
                return new DBFNewStoreParameters();
123
        }
124

    
125

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

    
134
        public void initialize(FilesystemServerExplorerProviderServices serverExplorer) {
135
                this.serverExplorer = serverExplorer;
136

    
137
        }
138

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

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

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

    
168
}