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)

http://dive4elements.wald.intevation.org