Revision 10626 trunk/extensions/extPublish/src/com/iver/cit/gvsig/publish/servers/mapserver/MapServerLayerFactory.java

View differences:

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