Revision 10626 trunk/extensions/extPublish/src/com/iver/cit/gvsig/publish/servers/mapserver/MapServerLayerFactory.java
MapServerLayerFactory.java | ||
---|---|---|
13 | 13 |
import org.gvsig.remoteservices.conf.mapserver.MapServerConfiguration.MetadataLayer; |
14 | 14 |
import org.gvsig.remoteservices.conf.mapserver.MapServerConfiguration.PostgisLayer; |
15 | 15 |
|
16 |
import com.iver.cit.gvsig.fmap.DriverException; |
|
16 |
import com.hardcode.gdbms.driver.exceptions.ReadDriverException; |
|
17 |
import com.hardcode.gdbms.engine.data.driver.DriverException; |
|
18 |
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException; |
|
19 |
import com.iver.cit.gvsig.exceptions.layers.DriverLayerException; |
|
20 |
import com.iver.cit.gvsig.exceptions.layers.LoadLayerException; |
|
21 |
import com.iver.cit.gvsig.exceptions.layers.TypeLayerException; |
|
17 | 22 |
import com.iver.cit.gvsig.fmap.core.FShape; |
18 |
import com.iver.cit.gvsig.fmap.core.ISymbol; |
|
23 |
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol;
|
|
19 | 24 |
import com.iver.cit.gvsig.fmap.core.v02.FSymbol; |
20 | 25 |
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition; |
21 | 26 |
import com.iver.cit.gvsig.fmap.drivers.raster.CmsRasterDriver; |
... | ... | |
33 | 38 |
import com.iver.cit.gvsig.fmap.rendering.SingleSymbolLegend; |
34 | 39 |
import com.iver.cit.gvsig.fmap.rendering.VectorialIntervalLegend; |
35 | 40 |
import com.iver.cit.gvsig.fmap.rendering.VectorialUniqueValueLegend; |
36 |
import com.iver.cit.gvsig.publish.layers.LayerException; |
|
41 |
import com.iver.cit.gvsig.publish.layers.ParamsPostGisLayerException;
|
|
37 | 42 |
import com.iver.utiles.StringUtilities; |
38 | 43 |
import com.iver.utiles.swing.jcomboServer.ServerData; |
39 | 44 |
|
... | ... | |
81 | 86 |
* |
82 | 87 |
* $Id$ |
83 | 88 |
* $Log$ |
84 |
* Revision 1.18 2006-11-28 17:58:07 jvhigon |
|
89 |
* Revision 1.19 2007-03-06 16:50:30 caballero |
|
90 |
* Exceptions |
|
91 |
* |
|
92 |
* Revision 1.18 2006/11/28 17:58:07 jvhigon |
|
85 | 93 |
* problemas con publicacion en WCS. |
86 | 94 |
* |
87 | 95 |
* Revision 1.17 2006/11/17 13:49:24 dagilgon |
... | ... | |
147 | 155 |
* @author Jorge Piera Llodr? (piera_jor@gva.es) |
148 | 156 |
*/ |
149 | 157 |
public class MapServerLayerFactory { |
150 |
|
|
151 |
public MapLayer getMapLayer(FLayer lyr,String serviceType)throws LayerException { |
|
152 |
MapLayer mapLayer = null;
|
|
158 |
|
|
159 |
public MapLayer getMapLayer(FLayer lyr,String serviceType)throws LoadLayerException {
|
|
160 |
MapLayer mapLayer = null; |
|
153 | 161 |
if (lyr instanceof FLyrVect){ |
154 | 162 |
boolean publicable = false; |
155 | 163 |
if ((lyr instanceof FLayerFileVectorial) || |
... | ... | |
160 | 168 |
publicable = true; |
161 | 169 |
} |
162 | 170 |
if (publicable){ |
163 |
FLyrVect lyrVect = (FLyrVect) lyr;
|
|
171 |
FLyrVect lyrVect = (FLyrVect) lyr; |
|
164 | 172 |
if (lyrVect.getSource().getDriver() instanceof IndexedShpDriver){ |
165 | 173 |
mapLayer = new MapServerConfiguration.ShpLayer(); |
166 | 174 |
initShpLayer(lyrVect,mapLayer); |
... | ... | |
168 | 176 |
mapLayer = new MapServerConfiguration.PostgisLayer(); |
169 | 177 |
initPostgisLayer(lyrVect, |
170 | 178 |
(PostgisLayer)mapLayer); |
171 |
}
|
|
179 |
} |
|
172 | 180 |
initVectorialLayer((FLyrVect)lyr,mapLayer); |
173 | 181 |
} |
174 | 182 |
} else if (lyr instanceof FLyrRaster){ |
... | ... | |
179 | 187 |
initCmsRasterLayer((CmsRasterDriver)lyrRaster.getSource().getDriver(), |
180 | 188 |
lyrRaster, |
181 | 189 |
mapLayer, |
182 |
serviceType);
|
|
190 |
serviceType); |
|
183 | 191 |
} |
184 | 192 |
initRasterLayer((FLyrRaster)lyr,mapLayer); |
185 | 193 |
} |
... | ... | |
187 | 195 |
initLayer(lyr,mapLayer); |
188 | 196 |
} |
189 | 197 |
return mapLayer; |
190 |
}
|
|
191 |
|
|
198 |
} |
|
199 |
|
|
192 | 200 |
/** |
193 | 201 |
* Initializes the layer with common properties |
194 | 202 |
* @param layer |
... | ... | |
197 | 205 |
private void initLayer(FLayer layer,MapLayer mapLayer){ |
198 | 206 |
mapLayer.name = getLayerName(layer.getName()); |
199 | 207 |
mapLayer.title = getLayerName(layer.getName()); |
200 |
mapLayer.crs = new CRS(layer.getProjection().getAbrev(),true);
|
|
208 |
mapLayer.crs = new CRS(layer.getProjection().getAbrev(),true); |
|
201 | 209 |
if(mapLayer.metadata !=null){ |
202 | 210 |
mapLayer.metadata.name = mapLayer.name; |
203 | 211 |
mapLayer.metadata.label = mapLayer.name; |
204 | 212 |
} |
205 | 213 |
} |
206 |
|
|
214 |
|
|
207 | 215 |
/** |
208 | 216 |
* Initializes the raster layers |
209 | 217 |
* @param lyrRaster |
210 | 218 |
* @param mLayer |
211 | 219 |
*/ |
212 | 220 |
private void initRasterLayer(FLyrRaster lyrRaster,MapLayer mLayer){ |
213 |
mLayer.extent = null;
|
|
214 |
mLayer.classList = new ArrayList();
|
|
221 |
mLayer.extent = null; |
|
222 |
mLayer.classList = new ArrayList(); |
|
215 | 223 |
mLayer.metadata.setExtent(lyrRaster.getMinX(), |
216 | 224 |
lyrRaster.getMinY(), |
217 | 225 |
lyrRaster.getMaxX(), |
218 | 226 |
lyrRaster.getMaxY()); |
219 | 227 |
mLayer.metadata.title=mLayer.title; |
220 | 228 |
mLayer.title = null; |
221 |
}
|
|
222 |
|
|
229 |
} |
|
230 |
|
|
223 | 231 |
/** |
224 | 232 |
* Initializes the vectorial layers |
225 | 233 |
* @param lyrVect |
226 | 234 |
* @param mLayer |
227 |
* @throws LayerException
|
|
235 |
* @throws LayerException |
|
228 | 236 |
*/ |
229 |
private void initVectorialLayer(FLyrVect lyrVect,MapLayer mLayer) throws LayerException{
|
|
237 |
private void initVectorialLayer(FLyrVect lyrVect,MapLayer mLayer){ |
|
230 | 238 |
mLayer.classList = getMapClassList(lyrVect); |
231 | 239 |
mLayer.metadata = new ConfigFile.MetadataLayer(); |
232 | 240 |
try{ |
233 | 241 |
FSymbol sym = (FSymbol) lyrVect.getLegend().getDefaultSymbol(); |
234 |
mLayer.transparency = 255 - sym.getColor().getAlpha();
|
|
242 |
mLayer.transparency = 255 - sym.getColor().getAlpha(); |
|
235 | 243 |
}catch(NullPointerException e){ |
236 |
|
|
244 |
|
|
237 | 245 |
} |
238 | 246 |
try { |
239 | 247 |
mLayer.metadata.setExtent(lyrVect.getFullExtent()); |
240 |
} catch (DriverException e) { |
|
241 |
// TODO Auto-generated catch block |
|
248 |
} catch (ReadDriverException e) { |
|
242 | 249 |
e.printStackTrace(); |
243 |
} |
|
244 |
} |
|
245 |
|
|
250 |
} catch (ExpansionFileReadException e) { |
|
251 |
e.printStackTrace(); |
|
252 |
} |
|
253 |
} |
|
254 |
|
|
246 | 255 |
private void initCmsRasterLayer(CmsRasterDriver driver,FLyrRaster flyRaster,MapLayer mapLayer,String serviceType){ |
247 | 256 |
mapLayer.type = "RASTER"; |
248 | 257 |
String[] aux=driver.getFiles()[0].getName().split("/"); |
... | ... | |
259 | 268 |
mapLayer.metadata.name = mapLayer.name; |
260 | 269 |
mapLayer.metadata.label = mapLayer.name; |
261 | 270 |
} |
262 |
|
|
271 |
|
|
263 | 272 |
} |
264 |
|
|
265 |
private void initPostgisLayer(FLyrVect lyrVect,MapServerConfiguration.PostgisLayer mapLayer) throws LayerException{ |
|
273 |
|
|
274 |
private void initPostgisLayer(FLyrVect lyrVect,MapServerConfiguration.PostgisLayer mapLayer) throws LoadLayerException{
|
|
266 | 275 |
DBLayerDefinition layerDef =((ISpatialDB)lyrVect.getSource()).getLyrDef(); |
267 |
mapLayer.type = getShpType(layerDef.getShapeType()); |
|
276 |
mapLayer.type = getShpType(layerDef.getShapeType(),lyrVect);
|
|
268 | 277 |
try { |
269 | 278 |
mapLayer.data = layerDef.getFieldGeometry() + " from " + getLayerName(lyrVect.getName()); |
270 | 279 |
String user = layerDef.getConnection().getMetaData().getUserName(); |
... | ... | |
274 | 283 |
String port = getPostgisPort(layerDef.getConnection().getMetaData().getURL()); |
275 | 284 |
mapLayer.setConnParams(user, pass, host, dbname, port); |
276 | 285 |
} catch (SQLException e) { |
277 |
throw new LayerException(LayerException.EXC_NO_POSTGIS_PARAMS,e.getMessage());
|
|
278 |
}
|
|
279 |
}
|
|
280 |
|
|
281 |
private void initShpLayer(FLyrVect lyrVect,MapServerConfiguration.MapLayer mapLayer) throws LayerException{ |
|
286 |
throw new ParamsPostGisLayerException(getLayerName(lyrVect.getName()),e);
|
|
287 |
} |
|
288 |
} |
|
289 |
|
|
290 |
private void initShpLayer(FLyrVect lyrVect,MapServerConfiguration.MapLayer mapLayer) throws LoadLayerException{
|
|
282 | 291 |
mapLayer.type = getShpType(lyrVect); |
283 |
|
|
292 |
|
|
284 | 293 |
ReadableVectorial rv = lyrVect.getSource(); |
285 | 294 |
if (rv instanceof VectorialFileAdapter) { |
286 | 295 |
VectorialFileAdapter vfa = (VectorialFileAdapter) rv; |
287 | 296 |
mapLayer.data = vfa.getFile().getName(); |
288 |
}
|
|
297 |
} |
|
289 | 298 |
} |
290 |
|
|
299 |
|
|
291 | 300 |
/** |
292 | 301 |
* Remove the "." from the file name |
293 | 302 |
* @param file |
... | ... | |
300 | 309 |
} |
301 | 310 |
return file; |
302 | 311 |
} |
303 |
|
|
312 |
|
|
304 | 313 |
private String getPostgisHost(String url){ |
305 |
//jdbc:postgresql://sercartlin:5432/carto_300k
|
|
314 |
//jdbc:postgresql://sercartlin:5432/carto_300k |
|
306 | 315 |
String[] s = url.split(":"); |
307 | 316 |
return StringUtilities.replace(s[2],"//",""); |
308 | 317 |
} |
309 |
|
|
318 |
|
|
310 | 319 |
private String getPostgisPort(String url){ |
311 |
//jdbc:postgresql://sercartlin:5432/carto_300k
|
|
320 |
//jdbc:postgresql://sercartlin:5432/carto_300k |
|
312 | 321 |
String[] s = url.split(":"); |
313 | 322 |
return s[3].split("/")[0]; |
314 |
}
|
|
315 |
|
|
323 |
} |
|
324 |
|
|
316 | 325 |
/** |
317 | 326 |
* Gets the geometry type from a shape |
318 | 327 |
* @param lyrVect |
319 | 328 |
* @return |
320 |
* @throws LayerException
|
|
321 |
* @throws DriverException
|
|
322 |
* @throws DriverException
|
|
329 |
* @throws LayerException |
|
330 |
* @throws DriverException |
|
331 |
* @throws DriverException |
|
323 | 332 |
*/ |
324 |
private String getShpType(FLyrVect lyrVect) throws LayerException { |
|
333 |
private String getShpType(FLyrVect lyrVect) throws LoadLayerException { |
|
334 |
int lyrType=0; |
|
325 | 335 |
try { |
326 |
int lyrType = lyrVect.getShapeType(); |
|
327 |
return getShpType(lyrType); |
|
328 |
} catch (DriverException e) { |
|
329 |
throw new LayerException(LayerException.EXC_DRIVER,null); |
|
336 |
lyrType = lyrVect.getShapeType(); |
|
337 |
} catch (ReadDriverException e) { |
|
338 |
throw new DriverLayerException(getLayerName(lyrVect.getName()),e); |
|
330 | 339 |
} |
340 |
return getShpType(lyrType,lyrVect); |
|
331 | 341 |
} |
332 |
|
|
333 |
private String getShpType(int fshapeType) throws LayerException{
|
|
342 |
|
|
343 |
private String getShpType(int fshapeType,FLyrVect lyrVect) throws TypeLayerException{
|
|
334 | 344 |
switch(fshapeType){ |
335 | 345 |
case FShape.POLYGON: |
336 | 346 |
return org.gvsig.remoteservices.conf.mapserver.MapServerConfiguration.SHP_TYPE_POLYGON; |
337 |
case FShape.LINE:
|
|
347 |
case FShape.LINE: |
|
338 | 348 |
return org.gvsig.remoteservices.conf.mapserver.MapServerConfiguration.SHP_TYPE_LINE; |
339 | 349 |
case FShape.POINT: |
340 | 350 |
case FShape.MULTIPOINT: |
341 | 351 |
return org.gvsig.remoteservices.conf.mapserver.MapServerConfiguration.SHP_TYPE_POINT; |
342 | 352 |
} |
343 |
throw new LayerException(LayerException.EXC_NO_DETECTED_LAYER_TYPE,null);
|
|
353 |
throw new TypeLayerException(getLayerName(lyrVect.getName()),null);
|
|
344 | 354 |
} |
345 |
|
|
355 |
|
|
346 | 356 |
private ArrayList getMapClassList(FLyrVect lyrVect){ |
347 | 357 |
ArrayList mapClasses = new ArrayList(); |
348 |
Legend legend = lyrVect.getLegend();
|
|
358 |
Legend legend = lyrVect.getLegend(); |
|
349 | 359 |
if (legend instanceof SingleSymbolLegend){ |
350 | 360 |
MapClass mapClass = new MapClass(getLayerName(lyrVect.getName())); |
351 | 361 |
FSymbol sym = (FSymbol) legend.getDefaultSymbol(); |
... | ... | |
355 | 365 |
try{ |
356 | 366 |
mapClass.size = new Float(((BasicStroke)sym.getStroke()).getLineWidth()).intValue(); |
357 | 367 |
}catch(Exception e){ |
358 |
|
|
368 |
|
|
359 | 369 |
} |
360 | 370 |
mapClasses.add(mapClass); |
361 | 371 |
}else if(legend instanceof VectorialUniqueValueLegend){ |
... | ... | |
367 | 377 |
Color clr = auxSym.getColor(); |
368 | 378 |
Color outLineclr = auxSym.getOutlineColor(); |
369 | 379 |
mapClass.estilo = new ConfigFile.StyleMap(clr,outLineclr); |
370 |
mapClass.expression = "('[" + uniqueValueLegend.getFieldName() + "]' = '" +
|
|
380 |
mapClass.expression = "('[" + uniqueValueLegend.getFieldName() + "]' = '" + |
|
371 | 381 |
symbols[i].getDescription() + "')"; |
372 | 382 |
try{ |
373 | 383 |
mapClass.size = new Float(((BasicStroke)auxSym.getStroke()).getLineWidth()).intValue(); |
374 | 384 |
}catch(Exception e){ |
375 |
|
|
385 |
|
|
376 | 386 |
} |
377 | 387 |
mapClasses.add(mapClass); |
378 | 388 |
} |
379 |
|
|
389 |
|
|
380 | 390 |
}else if(legend instanceof VectorialIntervalLegend){ |
381 | 391 |
MapClass mapClass = new MapClass(getLayerName(lyrVect.getName())); |
382 | 392 |
|
... | ... | |
387 | 397 |
try{ |
388 | 398 |
mapClass.size = new Float(((BasicStroke)sym.getStroke()).getLineWidth()).intValue(); |
389 | 399 |
}catch(Exception e){ |
390 |
|
|
391 |
}
|
|
400 |
|
|
401 |
} |
|
392 | 402 |
mapClasses.add(mapClass); |
393 |
}
|
|
403 |
} |
|
394 | 404 |
return mapClasses; |
395 | 405 |
} |
396 | 406 |
|
397 |
|
|
407 |
|
|
398 | 408 |
} |
Also available in: Unified diff