Revision 245

View differences:

org.gvsig.dxf/trunk/org.gvsig.dxf/org.gvsig.dxf.provider/src/main/java/org/gvsig/fmap/dal/store/dxf/DXFFilesystemServerProvider.java
6 6
import org.cresques.cts.IProjection;
7 7
import org.gvsig.dxf.io.DxfFile;
8 8
import org.gvsig.dxf.px.dxf.DxfEntityMaker;
9
import org.gvsig.fmap.dal.DALLocator;
10
import org.gvsig.fmap.dal.DataManager;
11 9
import org.gvsig.fmap.dal.DataServerExplorer;
12 10
import org.gvsig.fmap.dal.DataStoreParameters;
13 11
import org.gvsig.fmap.dal.NewDataStoreParameters;
......
16 14
import org.gvsig.fmap.dal.exception.FileNotFoundException;
17 15
import org.gvsig.fmap.dal.exception.InitializeException;
18 16
import org.gvsig.fmap.dal.exception.RemoveException;
19
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
20 17
import org.gvsig.fmap.dal.resource.ResourceAction;
21 18
import org.gvsig.fmap.dal.resource.file.FileResource;
22 19
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
......
26 23
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
27 24
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
28 25

  
29
public class DXFFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider 
30
	implements FilesystemServerExplorerProvider, ResourceConsumer {
26
public class DXFFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider
27
        implements FilesystemServerExplorerProvider, ResourceConsumer {
31 28

  
32
	private FilesystemServerExplorerProviderServices serverExplorer;
29
    private FilesystemServerExplorerProviderServices serverExplorer;
33 30

  
34
	public String getDataStoreProviderName() {
35
		return DXFStoreProvider.NAME;
36
	}
31
    @Override
32
    public String getDataStoreProviderName() {
33
        return DXFStoreProvider.NAME;
34
    }
37 35

  
38
	public int getMode() {
39
		return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
40
	}
36
    @Override
37
    public int getMode() {
38
        return DataServerExplorer.MODE_FEATURE | DataServerExplorer.MODE_GEOMETRY;
39
    }
41 40

  
42
	public boolean accept(File pathname) {
43
		return (pathname.getName().toLowerCase().endsWith(".dxf"));
44
	}
41
    @Override
42
    public boolean accept(File pathname) {
43
        return (pathname.getName().toLowerCase().endsWith(".dxf"));
44
    }
45 45

  
46
	public String getDescription() {
47
		return DXFStoreProvider.DESCRIPTION;
48
	}
46
    @Override
47
    public String getDescription() {
48
        return DXFStoreProvider.DESCRIPTION;
49
    }
49 50

  
50
	public DataStoreParameters getParameters(File file) throws DataException {
51
		DataManager manager = DALLocator.getDataManager();
52
		DXFOpenStoreParameters params = (DXFOpenStoreParameters) manager
53
				.createStoreParameters(this
54
				.getDataStoreProviderName());
55
		params.setFile(file.getPath());
56
		return params;
57
	}
51
    @Override
52
    public boolean canCreate() {
53
        return true;
54
    }
58 55

  
59
	public boolean canCreate() {
60
		return true;
61
	}
56
    @Override
57
    public boolean canCreate(NewDataStoreParameters parameters) {
58
        if (!(parameters instanceof DXFOpenStoreParameters)) {
59
            throw new IllegalArgumentException(); // FIXME ???
60
        }
61
        DXFOpenStoreParameters dxfParams = (DXFOpenStoreParameters) parameters;
62
        // TODO comporbar si el ftype es correcto (para este formato es fijo)
63
        File file = new File(dxfParams.getFileName());
62 64

  
63
	public boolean canCreate(NewDataStoreParameters parameters) {
64
		if (!(parameters instanceof DXFOpenStoreParameters)) {
65
			throw new IllegalArgumentException(); // FIXME ???
66
		}
67
		DXFOpenStoreParameters dxfParams = (DXFOpenStoreParameters) parameters;
68
		// TODO comporbar si el ftype es correcto (para este formato es fijo)
69
		File file = new File(dxfParams.getFileName());
65
        if (dxfParams.getCRS() == null) {
66
            return false;
67
        }
68
        // TODO comprobamos extension del fichero ??
69
        if (file.exists()) {
70
            return file.canWrite();
71
        } else {
72
            return file.getParentFile().canWrite();
73
        }
74
    }
70 75

  
71
		if (dxfParams.getCRS() == null) {
72
			return false;
73
		}
74
		// TODO comprobamos extension del fichero ??
75
		if (file.exists()) {
76
			return file.canWrite();
77
		} else {
78
			return file.getParentFile().canWrite();
79
		}
80
	}
76
    @Override
77
    public void create(NewDataStoreParameters parameters, boolean overwrite)
78
            throws CreateException {
81 79

  
82
	public void create(NewDataStoreParameters parameters, boolean overwrite)
83
			throws CreateException {
80
        final IProjection projection = null;
81
        DXFNewStoreParameters params = (DXFNewStoreParameters) parameters;
84 82

  
85
		final IProjection projection = null;
86
		DXFOpenStoreParameters params = (DXFOpenStoreParameters) parameters;
83
        File file = params.getFile();
84
        if (!file.isAbsolute()) {
85
            throw new AbsolutePathRequiredException(file.getPath());
86
        }
87 87

  
88
		File file = params.getFile();
89
		if (!file.isAbsolute()) {
90
			throw new AbsolutePathRequiredException(file.getPath());
91
		}
88
        if (file.exists()) {
89
            if (overwrite) {
90
                if (!file.delete()) {
91
                    throw new CreateException(this.getDataStoreProviderName(),
92
                            new IOException(
93
                                    "cannot delete file"));
94
                }
95
            } else {
96
                throw new CreateException(this.getDataStoreProviderName(),
97
                        new IOException(
98
                                "file already exist"));
99
            }
100
        }
92 101

  
93
		if (file.exists()) {
94
			if (overwrite) {
95
				if (!file.delete()) {
96
					throw new CreateException(this.getDataStoreProviderName(),
97
							new IOException(
98
							"cannot delete file"));
99
				}
100
			} else {
101
				throw new CreateException(this.getDataStoreProviderName(),
102
						new IOException(
103
						"file already exist"));
104
			}
105
		}
106

  
107 102
		//		projection = CRSFactory.getCRS(params.getSRSID());
103
        final FileResource resource;
104
        try {
105
            resource = (FileResource) this.serverExplorer
106
                    .getServerExplorerProviderServices().createResource(
107
                            FileResource.NAME,
108
                            new Object[]{file.getAbsolutePath()});
109
        } catch (InitializeException e1) {
110
            throw new CreateException(params.getFileName(), e1);
111
        }
112
        resource.addConsumer(this);
108 113

  
114
        try {
115
            resource.execute(new ResourceAction() {
116
                public Object run() throws Exception {
117
                    Builder builder
118
                            = new Builder().initialice(resource.getFileName(),
119
                                    projection);
120
                    resource.notifyOpen();
121
                    builder.begin();
122
                    builder.create();
123
                    builder.end();
124
                    resource.notifyClose();
109 125

  
110
		final FileResource resource;
111
		try {
112
			resource = (FileResource) this.serverExplorer
113
					.getServerExplorerProviderServices().createResource(
114
							FileResource.NAME,
115
					new Object[] { file.getAbsolutePath() });
116
		} catch (InitializeException e1) {
117
			throw new CreateException(params.getFileName(), e1);
118
		}
119
		resource.addConsumer(this);
126
                    resource.setData(null); // FIXME: Seguro que hay que ponerlo
127
                    // a null ??
128
                    resource.notifyChanges();
129
                    return null;
130
                }
131
            });
132
        } catch (Exception e) {
133
            throw new CreateException(params.getFileName(), e);
134
        } finally {
135
            resource.removeConsumer(this);
136
        }
137
    }
120 138

  
121
		try {
122
			resource.execute(new ResourceAction() {
123
				public Object run() throws Exception {
124
					Builder builder =
125
							new Builder().initialice(resource.getFileName(),
126
									projection);
127
					resource.notifyOpen();
128
					builder.begin();
129
					builder.create();
130
					builder.end();
131
					resource.notifyClose();
139
    public class Builder {
132 140

  
133
					resource.setData(null); // FIXME: Seguro que hay que ponerlo
134
											// a null ??
135
					resource.notifyChanges();
136
					return null;
137
				}
138
			});
139
		} catch (Exception e) {
140
			throw new CreateException(params.getFileName(), e);
141
		} finally {
142
			resource.removeConsumer(this);
143
		}
144
	}
141
        private String fileName;
142
        private IProjection projection;
145 143

  
146
	public class Builder {
147
		private String fileName;
148
		private IProjection projection;
144
        public Builder initialice(String fileName, IProjection projection) {
145
            this.fileName = fileName;
146
            this.projection = projection;
147
            return this;
148
        }
149 149

  
150
		public Builder initialice(String fileName, IProjection projection) {
151
			this.fileName = fileName;
152
			this.projection = projection;
153
			return this;
154
		}
150
        public void begin() {
155 151

  
156
		public void begin() {
152
        }
157 153

  
158
		}
154
        public void end() {
159 155

  
160
		public void end() {
156
        }
161 157

  
162
		}
158
        public void create() throws IOException {
159
            DxfEntityMaker entityMaker = new DxfEntityMaker(projection);
160
            DxfFile dxfFile = new DxfFile(null, fileName, entityMaker);
161
            dxfFile.setCadFlag(true);
162
            dxfFile.setDxf3DFlag(false);
163
            dxfFile.save(fileName);
164
        }
165
    }
163 166

  
164
		public void create() throws IOException {
165
			DxfEntityMaker entityMaker = new DxfEntityMaker(projection);
166
			DxfFile dxfFile = new DxfFile(null, fileName, entityMaker);
167
			dxfFile.setCadFlag(true);
168
			dxfFile.setDxf3DFlag(false);
169
			dxfFile.save(fileName);
170
		}
171
	}
167
    @Override
168
    public NewDataStoreParameters getCreateParameters() throws DataException {
169
        return new DXFNewStoreParameters();
170
    }
172 171

  
173
	public NewDataStoreParameters getCreateParameters() throws DataException {
174
		return new DXFNewStoreParameters();
175
	}
172
    @Override
173
    public void initialize(
174
            FilesystemServerExplorerProviderServices serverExplorer) {
175
        this.serverExplorer = serverExplorer;
176
    }
176 177

  
177
	public void initialize(
178
			FilesystemServerExplorerProviderServices serverExplorer) {
179
		this.serverExplorer = serverExplorer;
180
	}
178
    @Override
179
    public void remove(DataStoreParameters parameters) throws RemoveException {
180
        File file = new File(((DXFOpenStoreParameters) parameters).getFileName());
181
        if (!file.exists()) {
182
            throw new RemoveException(this.getDataStoreProviderName(),
183
                    new FileNotFoundException(file));
184
        }
185
        if (!file.delete()) {
186
            // FIXME throws ???
187
        }
181 188

  
182
	public void remove(DataStoreParameters parameters) throws RemoveException {
183
		File file = new File(((DXFOpenStoreParameters) parameters).getFileName());
184
		if (!file.exists()) {
185
			throw new RemoveException(this.getDataStoreProviderName(),
186
					new FileNotFoundException(file));
187
		}
188
		if (!file.delete()) {
189
			// FIXME throws ???
190
		}
189
    }
191 190

  
192
	}
191
    public boolean closeResourceRequested(ResourceProvider resource) {
192
        // while it is using a resource anyone can't close it
193
        return false;
194
    }
193 195

  
194
	public boolean closeResourceRequested(ResourceProvider resource) {
195
		// while it is using a resource anyone can't close it
196
		return false;
197
	}
196
    @Override
197
    public void resourceChanged(ResourceProvider resource) {
198
        //Do nothing
198 199

  
199
	/*
200
	 * (non-Javadoc)
201
	 * 
202
	 * @see
203
	 * org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.
204
	 * gvsig.fmap.dal.resource.spi.ResourceProvider)
205
	 */
206
	public void resourceChanged(ResourceProvider resource) {
207
		//Do nothing
200
    }
208 201

  
209
	}
210

  
211

  
212 202
}

Also available in: Unified diff