diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MetaDataService.java @ 1015:9a1a3080ad98

Bring user specific meta data service to life. flys-artifacts/trunk@2461 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 03 Aug 2011 16:40:04 +0000
parents b81626b10cb7
children ff7b81cf9999
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MetaDataService.java	Wed Aug 03 11:23:13 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MetaDataService.java	Wed Aug 03 16:40:04 2011 +0000
@@ -1,8 +1,5 @@
 package de.intevation.flys.artifacts.services;
 
-import java.sql.Connection;
-import java.sql.SQLException;
-
 import org.w3c.dom.Document;
 
 import org.apache.log4j.Logger;
@@ -23,29 +20,19 @@
 
 import de.intevation.artifacts.common.ArtifactNamespaceContext;
 
-import de.intevation.flys.artifacts.datacage.templating.Builder;
-import de.intevation.flys.artifacts.datacage.templating.NoneUserSpecific;
+import de.intevation.flys.artifacts.datacage.Recommendations;
 
 import de.intevation.flys.artifacts.FLYSArtifact;
 
-import de.intevation.flys.backend.SessionHolder;
-
-import org.hibernate.Session;
-
-import org.hibernate.jdbc.Work;
-
 public class MetaDataService
 extends      DefaultService
 {
     private static Logger log = Logger.getLogger(MetaDataService.class);
 
-    // old service. To be removed
-    public static final String XPATH_RIVER = "/art:river/text()";
-
-    public static final String XPATH_UUID       = "/art:meta/art:uuid/@value";
-    public static final String XPATH_OUTS       = "/art:meta/art:outs/@value";
-    public static final String XPATH_PARAMETERS = "/art:meta/art:parameters/@value";
-    public static final String XPATH_FILTERS    = "/art:meta/art:filters/@value";
+    public static final String XPATH_ARTIFACT_ID = "/art:meta/art:artifact-id/@value";
+    public static final String XPATH_USER_ID     = "/art:meta/art:user-id/@value";
+    public static final String XPATH_OUTS        = "/art:meta/art:outs/@value";
+    public static final String XPATH_PARAMETERS  = "/art:meta/art:parameters/@value";
 
     /** The global context key of the artifact database */
     public static final String ARTIFACT_DATA_BASE_KEY =
@@ -54,56 +41,31 @@
     public MetaDataService() {
     }
 
-    protected static Map<String, Object> extractParameters(Document data) {
-        HashMap<String, Object> parameters = new HashMap<String, Object>();
-
-        String river = XMLUtils.xpathString(
-            data, XPATH_RIVER, ArtifactNamespaceContext.INSTANCE);
+    @Override
+    public Document process(
+        Document      data,
+        GlobalContext globalContext,
+        CallMeta      callMeta
+    ) {
+        log.debug("MetaDataService.process");
 
-        if (river == null || (river = river.trim()).length() == 0) {
-            river = "%"; // matches all rivers
-        }
+        String artifactId = XMLUtils.xpathString(
+            data, XPATH_ARTIFACT_ID, ArtifactNamespaceContext.INSTANCE);
 
-        parameters.put("river", river);
+        String userId = XMLUtils.xpathString(
+            data, XPATH_USER_ID, ArtifactNamespaceContext.INSTANCE);
 
-        return parameters;
+        String outs = XMLUtils.xpathString(
+            data, XPATH_OUTS, ArtifactNamespaceContext.INSTANCE);
+
+        String parameters = XMLUtils.xpathString(
+            data, XPATH_PARAMETERS, ArtifactNamespaceContext.INSTANCE);
+
+        return doService(
+            artifactId, userId, outs, parameters, globalContext);
     }
 
-    /** The old service. To be removed. */
-    protected Document oldService(Document data) {
-
-        final Document result = XMLUtils.newDocument();
-
-        final Builder builder = NoneUserSpecific.getInstance().getBuilder();
-
-        if (builder == null) {
-            log.error("MetaDataService is not setup properly.");
-            return result;
-        }
-
-        final Map<String, Object> parameters = extractParameters(data);
-
-        Session session = SessionHolder.acquire();
-        try {
-            session.doWork(new Work() {
-                @Override
-                public void execute(Connection connection)
-                throws SQLException
-                {
-                    log.debug("MetaDataService.execute");
-                    builder.build(connection, result, parameters);
-                }
-            });
-        }
-        finally {
-            session.close();
-            SessionHolder.release();
-        }
-
-        return result;
-    }
-
-    protected static Map<String, Object> parameters(
+    protected static Map<String, Object> splitParameters(
         String              parameters,
         Map<String, Object> data
     ) {
@@ -121,23 +83,11 @@
         return data;
     }
 
-    protected static Map<String, Object> filters(
-        String              filters,
-        Map<String, Object> data
-    ) {
-        if (filters != null) {
-            for (String filter: filters.split("\\s*,\\*s")) {
-                data.put(filter, "true");
-            }
-        }
-        return data;
-    }
-
-    protected Document newService(
-        String        uuid,
+    protected Document doService(
+        String        artifactId,
+        String        userId,
         String        outsString,
         String        parameters,
-        String        filters,
         GlobalContext globalContext
     ) {
         Document result = XMLUtils.newDocument();
@@ -145,14 +95,20 @@
         FLYSArtifact flysArtifact;
 
         if (log.isDebugEnabled()) {
-            log.debug("uuid: " + uuid);
-            log.debug("outs: " + outsString);
-            log.debug("filters: " + filters);
+            log.debug("artifact  : " + artifactId);
+            log.debug("user      : " + userId);
+            log.debug("outs      : " + outsString);
+            log.debug("parameters: " + parameters);
         }
 
-        if (uuid != null && uuid.length() != 0) {
-            if (!StringUtils.checkUUID(uuid)) {
-                log.warn("'" + uuid + "' is not a UUID");
+        if (userId != null && !StringUtils.checkUUID(userId)) {
+            log.warn("'" + userId + "' is not a UUID");
+            return result;
+        }
+
+        if (artifactId != null) {
+            if (!StringUtils.checkUUID(artifactId)) {
+                log.warn("'" + artifactId + "' is not a UUID");
                 return result;
             }
 
@@ -169,7 +125,7 @@
             Artifact artifact;
 
             try {
-                artifact = db.getRawArtifact(uuid);
+                artifact = db.getRawArtifact(artifactId);
             }
             catch (ArtifactDatabaseException adbe) {
                 log.warn("fetching artifact failed", adbe);
@@ -187,43 +143,17 @@
             flysArtifact = null;
         }
 
-        Map<String, Object> data =
-            filters(filters,
-                parameters(parameters, 
-                    new HashMap<String, Object>()));
+
+        Map<String, Object> data = splitParameters(
+            parameters, new HashMap<String, Object>());
 
         String [] outs = outsString.split("\\s*,\\s*");
         
-        NoneUserSpecific dc = NoneUserSpecific.getInstance();
-
-        dc.recommend(flysArtifact, outs, data, result);
+        Recommendations rec = Recommendations.getInstance();
+        rec.recommend(
+            flysArtifact, userId, outs, data, result);
 
         return result;
     }
-
-    @Override
-    public Document process(
-        Document      data,
-        GlobalContext globalContext,
-        CallMeta      callMeta
-    ) {
-        log.debug("MetaDataService.process");
-
-        String uuid = XMLUtils.xpathString(
-            data, XPATH_UUID, ArtifactNamespaceContext.INSTANCE);
-
-        String outs = XMLUtils.xpathString(
-            data, XPATH_OUTS, ArtifactNamespaceContext.INSTANCE);
-
-        String parameters = XMLUtils.xpathString(
-            data, XPATH_PARAMETERS, ArtifactNamespaceContext.INSTANCE);
-
-        String filters = XMLUtils.xpathString(
-            data, XPATH_FILTERS, ArtifactNamespaceContext.INSTANCE);
-
-        return outs != null
-            ? newService(uuid, outs, parameters, filters, globalContext)
-            : oldService(data);
-    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org