Mercurial > dive4elements > river
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 :