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 */

http://dive4elements.wald.intevation.org