diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Recommendations.java @ 1046:0a5eff5511b1

Fixed flys/issue262: Unified user and system datacage template flys-artifacts/trunk@2508 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 19 Aug 2011 09:48:13 +0000
parents c586b6220f35
children 3ca999f507b7
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Recommendations.java	Thu Aug 18 14:58:17 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Recommendations.java	Fri Aug 19 09:48:13 2011 +0000
@@ -14,8 +14,6 @@
 import java.sql.Connection;
 import java.sql.SQLException;
 
-import javax.sql.DataSource;
-
 import org.apache.log4j.Logger;
 
 import org.w3c.dom.Document;
@@ -43,11 +41,11 @@
     private static final boolean DEVELOPMENT_MODE =
         Boolean.getBoolean("flys.datacage.recommendations.development");
 
-    public static final String XPATH_SYSTEM_TEMPLATE =
-        "/artifact-database/metadata/system/@template";
+    public static final String XPATH_TEMPLATE =
+        "/artifact-database/metadata/template/text()";
 
-    public static final String XPATH_USER_TEMPLATE =
-        "/artifact-database/metadata/user/@template";
+    public static final String DEFAULT_TEMPLATE_PATH =
+        "${artifacts.config.dir}/meta-data.xml";
 
     private static Recommendations INSTANCE;
 
@@ -102,25 +100,17 @@
         }
     } // class BuilderProvider
 
-    protected BuilderProvider systemBuilderProvider;
-    protected BuilderProvider userBuilderProvider;
+    protected BuilderProvider builderProvider;
 
     public Recommendations() {
     }
 
-    public Recommendations(
-        BuilderProvider systemBuilderProvider,
-        BuilderProvider userBuilderProvider) {
-        this.systemBuilderProvider = systemBuilderProvider;
-        this.userBuilderProvider   = userBuilderProvider;
+    public Recommendations(BuilderProvider builderProvider) {
+        this.builderProvider = builderProvider;
     }
 
-    public Builder getUserBuilder() {
-        return userBuilderProvider.getBuilder();
-    }
-
-    public Builder getSystemBuilder() {
-        return systemBuilderProvider.getBuilder();
+    public Builder getBuilder() {
+        return builderProvider.getBuilder();
     }
 
     protected static void artifactToParameters(
@@ -190,32 +180,29 @@
                 List<Builder.NamedConnection> connections =
                     new ArrayList<Builder.NamedConnection>(2);
 
-                if (userId != null) { // Use system and user templates.
-                    // Get connection to datacage db.
-                    DataSource dataSource = DBConfig
+                Connection userConnection = userId != null
+                    ? DBConfig
                         .getInstance()
                         .getDBConnection()
-                        .getDataSource();
+                        .getDataSource()
+                        .getConnection()
+                    : null;
 
-                    Connection userConnection = dataSource.getConnection();
-                    try {
+                try {
+                    if (userConnection != null) {
                         connections.add(new Builder.NamedConnection(
                             Builder.CONNECTION_USER, userConnection, false));
-
-                        connections.add(new Builder.NamedConnection(
-                            Builder.CONNECTION_SYSTEM, systemConnection, true));
+                    }
 
-                        getUserBuilder().build(connections, result, parameters);
-                    }
-                    finally {
-                        userConnection.close();
-                    }
-                }
-                else { // Use system template only.
                     connections.add(new Builder.NamedConnection(
                         Builder.CONNECTION_SYSTEM, systemConnection, true));
 
-                    getSystemBuilder().build(connections, result, parameters);
+                    getBuilder().build(connections, result, parameters);
+                }
+                finally {
+                    if (userConnection != null) {
+                        userConnection.close();
+                    }
                 }
             }
         });
@@ -253,62 +240,42 @@
         }
     }
 
-    public static Recommendations createRecommendations(
-        File systemFile,
-        File userFile
-    ) {
+    public static Recommendations createRecommendations(File file) {
         log.debug("Recommendations.createBuilder");
 
-        if (!systemFile.isFile() || !systemFile.canRead()) {
-            log.error("Cannot open template file '" + systemFile + "'");
+        if (!file.isFile() || !file.canRead()) {
+            log.error("Cannot open template file '" + file + "'");
             return null;
         }
 
-        if (!userFile.isFile() || !userFile.canRead()) {
-            log.error("Cannot open template file '" + userFile + "'");
-            return null;
-        }
+        FileBuilderProvider fbp = new FileBuilderProvider(file);
 
-        FileBuilderProvider ufbp = new FileBuilderProvider(userFile);
-        FileBuilderProvider sfbp = new FileBuilderProvider(systemFile);
-
-        if (ufbp.getBuilder() == null || sfbp.getBuilder() == null) {
+        if (fbp.getBuilder() == null) {
             log.error("failed loading builder");
             return null;
         }
 
-        BuilderProvider ubp;
-        BuilderProvider sbp;
+        BuilderProvider bp = DEVELOPMENT_MODE
+            ? fbp
+            : fbp.toStaticProvider();
 
-        if (DEVELOPMENT_MODE) {
-            ubp = ufbp;
-            sbp = sfbp;
-        }
-        else {
-            ubp = ufbp.toStaticProvider();
-            sbp = sfbp.toStaticProvider();
-        }
-
-        return new Recommendations(sbp, ubp);
+        return new Recommendations(bp);
     }
 
     protected static Recommendations createRecommendations() {
         log.debug("Recommendations.createRecommendations");
 
-        String systemPath = Config.getStringXPath(XPATH_SYSTEM_TEMPLATE);
-        String userPath   = Config.getStringXPath(XPATH_USER_TEMPLATE);
+        String path = Config.getStringXPath(XPATH_TEMPLATE);
 
-        if (systemPath == null || userPath == null) {
-            log.error("no path to template file given");
-            return null;
+        if (path == null) {
+            path = DEFAULT_TEMPLATE_PATH;
         }
 
-        systemPath = Config.replaceConfigDir(systemPath);
-        userPath   = Config.replaceConfigDir(userPath);
+        path = Config.replaceConfigDir(path);
 
-        return createRecommendations(
-            new File(systemPath),
-            new File(userPath));
+        log.info("Meta data template: " + path);
+
+        return createRecommendations(new File(path));
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org