Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java @ 604:938ce81a6bd0
Integrated Database-Support for the Mapviewer-Interface
gnv-artifacts/trunk@666 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Tue, 09 Feb 2010 13:01:20 +0000 |
parents | cf38b983d1f3 |
children | 9efc1c256dbb |
comparison
equal
deleted
inserted
replaced
603:78499af390a2 | 604:938ce81a6bd0 |
---|---|
25 import de.intevation.artifacts.CallMeta; | 25 import de.intevation.artifacts.CallMeta; |
26 import de.intevation.artifacts.ServiceFactory; | 26 import de.intevation.artifacts.ServiceFactory; |
27 import de.intevation.gnv.artifacts.services.requestobjects.DefaultFIS; | 27 import de.intevation.gnv.artifacts.services.requestobjects.DefaultFIS; |
28 import de.intevation.gnv.artifacts.services.requestobjects.DefaultLayer; | 28 import de.intevation.gnv.artifacts.services.requestobjects.DefaultLayer; |
29 import de.intevation.gnv.artifacts.services.requestobjects.DefaultMapService; | 29 import de.intevation.gnv.artifacts.services.requestobjects.DefaultMapService; |
30 import de.intevation.gnv.artifacts.services.requestobjects.DefaultParameter; | |
30 import de.intevation.gnv.artifacts.services.requestobjects.FIS; | 31 import de.intevation.gnv.artifacts.services.requestobjects.FIS; |
31 import de.intevation.gnv.artifacts.services.requestobjects.Layer; | 32 import de.intevation.gnv.artifacts.services.requestobjects.Layer; |
32 import de.intevation.gnv.artifacts.services.requestobjects.MapService; | 33 import de.intevation.gnv.artifacts.services.requestobjects.MapService; |
33 import de.intevation.gnv.artifacts.services.requestobjects.Parameter; | 34 import de.intevation.gnv.artifacts.services.requestobjects.Parameter; |
34 import de.intevation.gnv.geobackend.base.Result; | 35 import de.intevation.gnv.geobackend.base.Result; |
47 * the logger, used to log exceptions and additionally information | 48 * the logger, used to log exceptions and additionally information |
48 */ | 49 */ |
49 private static Logger log = Logger.getLogger(MetaDataService.class); | 50 private static Logger log = Logger.getLogger(MetaDataService.class); |
50 | 51 |
51 | 52 |
52 private final static String FIS_REGION_QUERY_ID = "fis_region"; | 53 private final static String FIS_REGION_QUERY_ID = |
54 "mapviewer_interface_fis_region"; | |
53 private final static String MAPSERVICES_HAS_FIS_QUERY_ID = | 55 private final static String MAPSERVICES_HAS_FIS_QUERY_ID = |
54 "mapservices_has_fis"; | 56 "mapviewer_interface_mapservices_has_fis"; |
57 private final static String MAPSERVICES_HAS_PARAMETER_QUERY_ID = | |
58 "mapviewer_interface_mapservices_has_parameter"; | |
59 | |
60 private final static String MAPSERVICES_HAS_PARAMETER_USING_LAYER_QUERY_ID = | |
61 "mapviewer_interface_mapservices_has_parameter_using_layer"; | |
55 | 62 |
56 private static String ATTRIBUTE_ID = "id"; | 63 private static String ATTRIBUTE_ID = "id"; |
57 private static String ATTRIBUTE_NAME = "name"; | 64 private static String ATTRIBUTE_NAME = "name"; |
58 private static String ATTRIBUTE_TYPE = "type"; | 65 private static String ATTRIBUTE_TYPE = "type"; |
59 private static String ATTRIBUTE_URL = "url"; | 66 private static String ATTRIBUTE_URL = "url"; |
93 Collection<MapService> mapServices = this.parseMapServices(data); | 100 Collection<MapService> mapServices = this.parseMapServices(data); |
94 Collection<FIS> resultFIS = this.unionFIS(this.getFIS(g), | 101 Collection<FIS> resultFIS = this.unionFIS(this.getFIS(g), |
95 this.getFIS(mapServices)); | 102 this.getFIS(mapServices)); |
96 document = XMLUtils.newDocument(); | 103 document = XMLUtils.newDocument(); |
97 this.writeFIS2Document(document, resultFIS); | 104 this.writeFIS2Document(document, resultFIS); |
105 log.debug(new ArtifactXMLUtilities().writeDocument2String(document)); | |
98 } catch (MetaDataServiceException e) { | 106 } catch (MetaDataServiceException e) { |
99 log.error(e,e); | 107 log.error(e,e); |
100 document = new ArtifactXMLUtilities() | 108 document = new ArtifactXMLUtilities() |
101 .createExceptionReport(e.getMessage(), document); | 109 .createExceptionReport(e.getMessage(), document); |
102 } | 110 } |
265 if (result != null){ | 273 if (result != null){ |
266 resultValue = new ArrayList<FIS>(result.size()); | 274 resultValue = new ArrayList<FIS>(result.size()); |
267 Iterator<Result> it = result.iterator(); | 275 Iterator<Result> it = result.iterator(); |
268 while (it.hasNext()){ | 276 while (it.hasNext()){ |
269 Result value = it.next(); | 277 Result value = it.next(); |
270 String fis_id = value.getString(0); | 278 String fis_id = value.getString(0).trim(); |
271 resultValue.add(new DefaultFIS(fis_id)); | 279 resultValue.add(new DefaultFIS(fis_id)); |
272 } | 280 } |
273 } | 281 } |
274 } catch (QueryException e) { | 282 } catch (QueryException e) { |
275 log.error(e,e); | 283 log.error(e,e); |
295 Iterator<MapService> mit = mapServices.iterator(); | 303 Iterator<MapService> mit = mapServices.iterator(); |
296 while(mit.hasNext()){ | 304 while(mit.hasNext()){ |
297 if (mapServiceNames.length() > 0){ | 305 if (mapServiceNames.length() > 0){ |
298 mapServiceNames += " , "; | 306 mapServiceNames += " , "; |
299 } | 307 } |
300 mapServiceNames += "\""+mit.next().getID()+"\""; | 308 mapServiceNames += "'"+mit.next().getID()+"'"; |
301 } | 309 } |
302 | 310 |
303 QueryExecutor queryExecutor = QueryExecutorFactory | 311 QueryExecutor queryExecutor = QueryExecutorFactory |
304 .getInstance() | 312 .getInstance() |
305 .getQueryExecutor(); | 313 .getQueryExecutor(); |
309 if (result != null){ | 317 if (result != null){ |
310 resultValue = new ArrayList<FIS>(result.size()); | 318 resultValue = new ArrayList<FIS>(result.size()); |
311 Iterator<Result> it = result.iterator(); | 319 Iterator<Result> it = result.iterator(); |
312 while (it.hasNext()){ | 320 while (it.hasNext()){ |
313 Result value = it.next(); | 321 Result value = it.next(); |
314 String fis_id = value.getString(0); | 322 String fis_id = value.getString(0).trim(); |
315 | 323 String mapServiceID = value.getString(1).trim(); |
316 // TODO: QUERY PARAMS | 324 |
317 // FIRST LOOK IF ONE MAPSERVICE REPRESENTS ONLY ONE PARAM | 325 // FIRST LOOK IF ONE MAPSERVICE REPRESENTS ONLY ONE PARAM |
318 // IF FALSE LOOK IF THE GIVEN LAYERs TO AN MAPSERVICE | 326 Collection<Result> result2 = queryExecutor.executeQuery( |
319 // REPRESENTS DIFFERENT PARAMS | 327 MAPSERVICES_HAS_PARAMETER_QUERY_ID, |
328 new String[]{"'"+mapServiceID+"'"}); | |
320 Collection<Parameter> parameter = null; | 329 Collection<Parameter> parameter = null; |
330 if (result2 != null && result2.size() == 1){ | |
331 Iterator<Result> it2 = result2.iterator(); | |
332 parameter = new ArrayList<Parameter>(1); | |
333 while (it2.hasNext()){ | |
334 Result parameterValue = it2.next(); | |
335 String parameterID = parameterValue.getString(0) | |
336 .trim(); | |
337 parameter.add(new DefaultParameter(parameterID, | |
338 parameterID)); | |
339 } | |
340 }else{ | |
341 // IF FALSE LOOK IF THE GIVEN LAYERs TO AN MAPSERVICE | |
342 // REPRESENTS DIFFERENT PARAMS | |
343 MapService service = this.getMapService(mapServices, | |
344 mapServiceID); | |
345 Collection<Layer> layer = service.getLayer(); | |
346 if (layer != null && !layer.isEmpty()){ | |
347 String layerQueryString = | |
348 this.createLayerQueryString(layer); | |
349 Collection<Result> parameterResult = | |
350 queryExecutor.executeQuery( | |
351 MAPSERVICES_HAS_PARAMETER_USING_LAYER_QUERY_ID, | |
352 new String[]{"'"+mapServiceID+"'", | |
353 layerQueryString}); | |
354 if (parameterResult != null && | |
355 !parameterResult.isEmpty()){ | |
356 Iterator<Result> it2 = parameterResult.iterator(); | |
357 parameter = new ArrayList<Parameter>(parameterResult.size()); | |
358 while (it2.hasNext()){ | |
359 Result parameterValue = it2.next(); | |
360 String parameterID = parameterValue.getString(0) | |
361 .trim(); | |
362 parameter.add(new DefaultParameter(parameterID, | |
363 parameterID)); | |
364 } | |
365 } | |
366 } | |
367 | |
368 } | |
321 resultValue.add(new DefaultFIS(fis_id, parameter)); | 369 resultValue.add(new DefaultFIS(fis_id, parameter)); |
322 } | 370 } |
323 } | 371 } |
324 } catch (QueryException e) { | 372 } catch (QueryException e) { |
325 log.error(e,e); | 373 log.error(e,e); |
326 throw new MetaDataServiceException("Cannot Query FIS from DB."); | 374 throw new MetaDataServiceException("Cannot Query FIS from DB."); |
327 } | 375 } |
328 | 376 |
329 } | 377 } |
330 return resultValue; | 378 return resultValue; |
379 } | |
380 | |
381 | |
382 private MapService getMapService(Collection<MapService> mapServices, | |
383 String mapServiceID){ | |
384 log.debug("MetaDataService.getMapService"); | |
385 Iterator<MapService> it = mapServices.iterator(); | |
386 while (it.hasNext()){ | |
387 MapService service = it.next(); | |
388 if (service.getID().equals(mapServiceID)){ | |
389 return service; | |
390 } | |
391 } | |
392 return null; | |
393 } | |
394 | |
395 private String createLayerQueryString(Collection<Layer> layer){ | |
396 log.debug("MetaDataService.createLayerQueryString"); | |
397 StringBuffer sb = new StringBuffer();; | |
398 Iterator<Layer> it = layer.iterator(); | |
399 synchronized (sb) { | |
400 while (it.hasNext()){ | |
401 Layer l = it.next(); | |
402 if (!l.isGroupLayer()){ | |
403 sb.append(l.getID()); | |
404 if (it.hasNext()){ | |
405 sb.append(" , "); | |
406 } | |
407 } | |
408 | |
409 } | |
410 } | |
411 String returnValue = sb.toString(); | |
412 if (returnValue.endsWith(" , ")){ | |
413 returnValue = returnValue.substring(0,returnValue | |
414 .lastIndexOf(",")) | |
415 .trim(); | |
416 } | |
417 return returnValue; | |
331 } | 418 } |
332 | 419 |
333 /** | 420 /** |
334 * @see de.intevation.artifactdatabase.DefaultService#setup(de.intevation.artifacts.ServiceFactory, java.lang.Object) | 421 * @see de.intevation.artifactdatabase.DefaultService#setup(de.intevation.artifacts.ServiceFactory, java.lang.Object) |
335 */ | 422 */ |