Mercurial > dive4elements > gnv-client
diff 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 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java Fri Feb 05 14:15:09 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java Tue Feb 09 13:01:20 2010 +0000 @@ -27,6 +27,7 @@ import de.intevation.gnv.artifacts.services.requestobjects.DefaultFIS; import de.intevation.gnv.artifacts.services.requestobjects.DefaultLayer; import de.intevation.gnv.artifacts.services.requestobjects.DefaultMapService; +import de.intevation.gnv.artifacts.services.requestobjects.DefaultParameter; import de.intevation.gnv.artifacts.services.requestobjects.FIS; import de.intevation.gnv.artifacts.services.requestobjects.Layer; import de.intevation.gnv.artifacts.services.requestobjects.MapService; @@ -49,9 +50,15 @@ private static Logger log = Logger.getLogger(MetaDataService.class); - private final static String FIS_REGION_QUERY_ID = "fis_region"; + private final static String FIS_REGION_QUERY_ID = + "mapviewer_interface_fis_region"; private final static String MAPSERVICES_HAS_FIS_QUERY_ID = - "mapservices_has_fis"; + "mapviewer_interface_mapservices_has_fis"; + private final static String MAPSERVICES_HAS_PARAMETER_QUERY_ID = + "mapviewer_interface_mapservices_has_parameter"; + + private final static String MAPSERVICES_HAS_PARAMETER_USING_LAYER_QUERY_ID = + "mapviewer_interface_mapservices_has_parameter_using_layer"; private static String ATTRIBUTE_ID = "id"; private static String ATTRIBUTE_NAME = "name"; @@ -95,6 +102,7 @@ this.getFIS(mapServices)); document = XMLUtils.newDocument(); this.writeFIS2Document(document, resultFIS); + log.debug(new ArtifactXMLUtilities().writeDocument2String(document)); } catch (MetaDataServiceException e) { log.error(e,e); document = new ArtifactXMLUtilities() @@ -267,7 +275,7 @@ Iterator<Result> it = result.iterator(); while (it.hasNext()){ Result value = it.next(); - String fis_id = value.getString(0); + String fis_id = value.getString(0).trim(); resultValue.add(new DefaultFIS(fis_id)); } } @@ -297,7 +305,7 @@ if (mapServiceNames.length() > 0){ mapServiceNames += " , "; } - mapServiceNames += "\""+mit.next().getID()+"\""; + mapServiceNames += "'"+mit.next().getID()+"'"; } QueryExecutor queryExecutor = QueryExecutorFactory @@ -311,13 +319,53 @@ Iterator<Result> it = result.iterator(); while (it.hasNext()){ Result value = it.next(); - String fis_id = value.getString(0); - - // TODO: QUERY PARAMS + String fis_id = value.getString(0).trim(); + String mapServiceID = value.getString(1).trim(); + // FIRST LOOK IF ONE MAPSERVICE REPRESENTS ONLY ONE PARAM - // IF FALSE LOOK IF THE GIVEN LAYERs TO AN MAPSERVICE - // REPRESENTS DIFFERENT PARAMS + Collection<Result> result2 = queryExecutor.executeQuery( + MAPSERVICES_HAS_PARAMETER_QUERY_ID, + new String[]{"'"+mapServiceID+"'"}); Collection<Parameter> parameter = null; + if (result2 != null && result2.size() == 1){ + Iterator<Result> it2 = result2.iterator(); + parameter = new ArrayList<Parameter>(1); + while (it2.hasNext()){ + Result parameterValue = it2.next(); + String parameterID = parameterValue.getString(0) + .trim(); + parameter.add(new DefaultParameter(parameterID, + parameterID)); + } + }else{ + // IF FALSE LOOK IF THE GIVEN LAYERs TO AN MAPSERVICE + // REPRESENTS DIFFERENT PARAMS + MapService service = this.getMapService(mapServices, + mapServiceID); + Collection<Layer> layer = service.getLayer(); + if (layer != null && !layer.isEmpty()){ + String layerQueryString = + this.createLayerQueryString(layer); + Collection<Result> parameterResult = + queryExecutor.executeQuery( + MAPSERVICES_HAS_PARAMETER_USING_LAYER_QUERY_ID, + new String[]{"'"+mapServiceID+"'", + layerQueryString}); + if (parameterResult != null && + !parameterResult.isEmpty()){ + Iterator<Result> it2 = parameterResult.iterator(); + parameter = new ArrayList<Parameter>(parameterResult.size()); + while (it2.hasNext()){ + Result parameterValue = it2.next(); + String parameterID = parameterValue.getString(0) + .trim(); + parameter.add(new DefaultParameter(parameterID, + parameterID)); + } + } + } + + } resultValue.add(new DefaultFIS(fis_id, parameter)); } } @@ -329,6 +377,45 @@ } return resultValue; } + + + private MapService getMapService(Collection<MapService> mapServices, + String mapServiceID){ + log.debug("MetaDataService.getMapService"); + Iterator<MapService> it = mapServices.iterator(); + while (it.hasNext()){ + MapService service = it.next(); + if (service.getID().equals(mapServiceID)){ + return service; + } + } + return null; + } + + private String createLayerQueryString(Collection<Layer> layer){ + log.debug("MetaDataService.createLayerQueryString"); + StringBuffer sb = new StringBuffer();; + Iterator<Layer> it = layer.iterator(); + synchronized (sb) { + while (it.hasNext()){ + Layer l = it.next(); + if (!l.isGroupLayer()){ + sb.append(l.getID()); + if (it.hasNext()){ + sb.append(" , "); + } + } + + } + } + String returnValue = sb.toString(); + if (returnValue.endsWith(" , ")){ + returnValue = returnValue.substring(0,returnValue + .lastIndexOf(",")) + .trim(); + } + return returnValue; + } /** * @see de.intevation.artifactdatabase.DefaultService#setup(de.intevation.artifacts.ServiceFactory, java.lang.Object)