# HG changeset patch # User Sascha L. Teichmann # Date 1313747293 0 # Node ID 0a5eff5511b1d77bf9643041b90e361b1ff263c7 # Parent ba840385ad2eb1cd900ca28481f70ec8acdbf914 Fixed flys/issue262: Unified user and system datacage template flys-artifacts/trunk@2508 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Thu Aug 18 14:58:17 2011 +0000 +++ b/flys-artifacts/ChangeLog Fri Aug 19 09:48:13 2011 +0000 @@ -1,3 +1,20 @@ +2011-08-19 Sascha L. Teichmann + + Fixed flys/issue262 + + * src/main/java/de/intevation/flys/artifacts/datacage/Recommendations.java: + Unified user and system tempate. + Looks for "/artifact-database/metadata/template/text()" + in conf.xml. Defaults to "${artifacts.config.dir}/meta-data.xml". If user id is + given its the default connection for contexts. + + * doc/conf/conf.xml: Adjusted + * doc/conf/meta-data-system.xml, doc/conf/meta-data-user.xml: Deleted. + * doc/conf/meta-data.xml: Unified version of user and system template. + + * src/main/java/de/intevation/flys/artifacts/datacage/templating/App.java: + Adjusted the test program. + 2011-08-18 Sascha L. Teichmann Fixed flys/issue260 diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Thu Aug 18 14:58:17 2011 +0000 +++ b/flys-artifacts/doc/conf/conf.xml Fri Aug 19 09:48:13 2011 +0000 @@ -103,8 +103,7 @@ - - + diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/doc/conf/meta-data-system.xml --- a/flys-artifacts/doc/conf/meta-data-system.xml Thu Aug 18 14:58:17 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ - - - - - - SELECT id AS river_id, name as river_name FROM rivers - WHERE name ILIKE ${river} - - - - - - - - - - - SELECT id AS gauge_id, - name AS gauge_name - FROM gauges WHERE river_id = ${river_id} - - - - - - - - SELECT description AS gauge_desc, - d.id AS discharge_id, - ti.start_time AS g_start, - ti.stop_time AS g_stop - FROM discharge_tables d JOIN time_intervals ti - ON d.time_interval_id = ti.id - WHERE d.gauge_id = ${gauge_id} AND d.kind = 1 - - - - - - - - - - - - - - - - - - SELECT id AS fix_id, - description AS fix_description - FROM wsts WHERE kind = 2 AND river_id = ${river_id} - - - - - - - - - SELECT id AS fix_column_id, - name AS fix_column_name - FROM wst_columns WHERE wst_id = ${fix_id} - ORDER by position - - - - - - - - - - - - - - - - - SELECT id AS prot_id, - description AS prot_description - FROM wsts WHERE kind = 5 AND river_id = ${river_id} - - - - - - - - - SELECT id AS prot_column_id, - name AS prot_column_name - FROM wst_columns WHERE wst_id = ${prot_id} - ORDER by position - - - - - - - - - - - - - - - - - SELECT id AS fw_id, - description AS fw_description - FROM wsts WHERE kind = 4 AND river_id = ${river_id} - - - - - - - - - SELECT id AS fw_column_id, - name AS fw_column_name - FROM wst_columns WHERE wst_id = ${fw_id} - ORDER by position - - - - - - - - - - - - - - - - - SELECT id AS wl_id, - description AS wl_description - FROM wsts WHERE kind = 0 AND river_id = ${river_id} - - - - - - - - - SELECT id AS wl_column_id, - name AS wl_column_name - FROM wst_columns WHERE wst_id = ${wl_id} - ORDER by position - - - - - - - - - - - - - - - - - SELECT id AS els_id, - description AS els_description - FROM wsts WHERE kind = 1 AND river_id = ${river_id} - - - - - - - - - SELECT id AS els_column_id, - name AS els_column_name - FROM wst_columns WHERE wst_id = ${els_id} - ORDER by position - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FIXME: Following two macros look identical to me. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/doc/conf/meta-data-user.xml --- a/flys-artifacts/doc/conf/meta-data-user.xml Thu Aug 18 14:58:17 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ - - - - - User specific part - ------------------ - - - - - SELECT u.id AS user_id, c.id AS collection_id - FROM collections c JOIN users u ON c.user_id = u.id - WHERE u.gid = CAST(${user-id} AS uuid) - ORDER BY c.creation DESC - - - - SELECT id AS a_id, state AS a_state, gid AS a_gid, creation AS a_creation - FROM master_artifacts m - WHERE collection_id = ${collection_id} AND gid <> CAST(${artifact-id} AS uuid) - AND EXISTS ( - SELECT id FROM artifact_data WHERE artifact_id = m.id AND k = 'river' AND v = ${river}) - - - - - - SELECT id AS out_id FROM outs WHERE artifact_id = ${a_id} AND name = 'longitudinal_section' - - - - SELECT name AS facet_name, num as facet_num, description AS facet_description - FROM facets WHERE out_id = ${out_id} ORDER BY num ASC, name DESC - - - - - - - - - - - - - - - - - - - - - - - - - diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/doc/conf/meta-data.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/doc/conf/meta-data.xml Fri Aug 19 09:48:13 2011 +0000 @@ -0,0 +1,329 @@ + + + + + + User specific part + ------------------ + + + + + SELECT u.id AS user_id, c.id AS collection_id + FROM collections c JOIN users u ON c.user_id = u.id + WHERE u.gid = CAST(${user-id} AS uuid) + ORDER BY c.creation DESC + + + + SELECT id AS a_id, state AS a_state, gid AS a_gid, creation AS a_creation + FROM master_artifacts m + WHERE collection_id = ${collection_id} AND gid <> CAST(${artifact-id} AS uuid) + AND EXISTS ( + SELECT id FROM artifact_data WHERE artifact_id = m.id AND k = 'river' AND v = ${river}) + + + + + + SELECT id AS out_id FROM outs WHERE artifact_id = ${a_id} AND name = 'longitudinal_section' + + + + SELECT name AS facet_name, num as facet_num, description AS facet_description + FROM facets WHERE out_id = ${out_id} ORDER BY num ASC, name DESC + + + + + + + + + + + + + + + + + + + + + + + + + System specific part + -------------------- + + + + + SELECT id AS river_id, name as river_name FROM rivers + WHERE name ILIKE ${river} + + + + + + + + + + + SELECT id AS gauge_id, + name AS gauge_name + FROM gauges WHERE river_id = ${river_id} + + + + + + + + SELECT description AS gauge_desc, + d.id AS discharge_id, + ti.start_time AS g_start, + ti.stop_time AS g_stop + FROM discharge_tables d JOIN time_intervals ti + ON d.time_interval_id = ti.id + WHERE d.gauge_id = ${gauge_id} AND d.kind = 1 + + + + + + + + + + + + + + + + + + SELECT id AS fix_id, + description AS fix_description + FROM wsts WHERE kind = 2 AND river_id = ${river_id} + + + + + + + + + SELECT id AS fix_column_id, + name AS fix_column_name + FROM wst_columns WHERE wst_id = ${fix_id} + ORDER by position + + + + + + + + + + + + + + + + + SELECT id AS prot_id, + description AS prot_description + FROM wsts WHERE kind = 5 AND river_id = ${river_id} + + + + + + + + + SELECT id AS prot_column_id, + name AS prot_column_name + FROM wst_columns WHERE wst_id = ${prot_id} + ORDER by position + + + + + + + + + + + + + + + + + SELECT id AS fw_id, + description AS fw_description + FROM wsts WHERE kind = 4 AND river_id = ${river_id} + + + + + + + + + SELECT id AS fw_column_id, + name AS fw_column_name + FROM wst_columns WHERE wst_id = ${fw_id} + ORDER by position + + + + + + + + + + + + + + + + + SELECT id AS wl_id, + description AS wl_description + FROM wsts WHERE kind = 0 AND river_id = ${river_id} + + + + + + + + + SELECT id AS wl_column_id, + name AS wl_column_name + FROM wst_columns WHERE wst_id = ${wl_id} + ORDER by position + + + + + + + + + + + + + + + + + SELECT id AS els_id, + description AS els_description + FROM wsts WHERE kind = 1 AND river_id = ${river_id} + + + + + + + + + SELECT id AS els_column_id, + name AS els_column_name + FROM wst_columns WHERE wst_id = ${els_id} + ORDER by position + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FIXME: Following two macros look identical to me. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Recommendations.java --- 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 connections = new ArrayList(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 : diff -r ba840385ad2e -r 0a5eff5511b1 flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/App.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/App.java Thu Aug 18 14:58:17 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/App.java Fri Aug 19 09:48:13 2011 +0000 @@ -24,11 +24,8 @@ { private static Logger log = Logger.getLogger(App.class); - public static final String systemTemplate = - System.getProperty("meta.data.template", "meta-data-system.xml"); - - public static final String userTemplate = - System.getProperty("meta.data.template", "meta-data-user.xml"); + public static final String template = + System.getProperty("meta.data.template", "meta-data.xml"); public static final String userId = System.getProperty("user.id"); @@ -56,8 +53,7 @@ public static void main(String [] args) { Recommendations rec = Recommendations.createRecommendations( - new File(systemTemplate), - new File(userTemplate)); + new File(template)); if (rec == null) { System.err.println("No recommendations created");