# HG changeset patch # User Ingo Weinzierl # Date 1311245152 0 # Node ID ff6ce301c4723898c27e913e0f8fb99eaec9d48a # Parent f48cef242e7f85bac04ab9b98888381810e073b9 Modified the CollectionMonitor (for recommended artifacts) to use the DataCage. flys-artifacts/trunk@2384 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r f48cef242e7f -r ff6ce301c472 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Wed Jul 20 22:03:50 2011 +0000 +++ b/flys-artifacts/ChangeLog Thu Jul 21 10:45:52 2011 +0000 @@ -1,3 +1,22 @@ +2011-07-21 Ingo Weinzierl + + * doc/conf/meta-data-template.xml: Added conditions for each output type. + Splitted the "floodmap" output into two parts: a recommended one and a + complete one. The recommended part will only build the document tree for + the recommended artifacts; the complete part will build the whole document + tree that is available for a floodmap. + + * src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java: + This Hook now uses the DataCage to generate the recommended artifacts. + The output-defaults configurtion is needless now. + + * doc/conf/output-defaults.xml: Removed. The configuration of recommended + artifacts takes place in meta-data-template.xml. + + * src/main/java/de/intevation/flys/artifacts/services/meta/DataCage.java: + Bugfix: the DataCage didn't start working if its builder was NOT null, + but it shouldn't start if the builder IS null. + 2011-07-21 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/services/meta/Builder.java: diff -r f48cef242e7f -r ff6ce301c472 flys-artifacts/doc/conf/meta-data-template.xml --- a/flys-artifacts/doc/conf/meta-data-template.xml Wed Jul 20 22:03:50 2011 +0000 +++ b/flys-artifacts/doc/conf/meta-data-template.xml Thu Jul 21 10:45:52 2011 +0000 @@ -10,203 +10,243 @@ - - - - - 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 - - - - - - - - - - - - - - - - - - - - + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f48cef242e7f -r ff6ce301c472 flys-artifacts/doc/conf/output-defaults.xml --- a/flys-artifacts/doc/conf/output-defaults.xml Wed Jul 20 22:03:50 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ - - - - - - diff -r f48cef242e7f -r ff6ce301c472 flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java Wed Jul 20 22:03:50 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java Thu Jul 21 10:45:52 2011 +0000 @@ -1,7 +1,5 @@ package de.intevation.flys.artifacts; -import java.io.File; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -13,72 +11,31 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import org.w3c.dom.NodeList; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.Hook; -import de.intevation.artifacts.common.utils.Config; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; +import de.intevation.artifactdatabase.state.Output; + +import de.intevation.flys.artifacts.services.meta.DataCage; + public class CollectionMonitor implements Hook { - public static final String XPATH_STATES = "output-defaults/state"; public static final String XPATH_RESULT = "/art:result"; - protected Map> states; - - private static final Logger logger = Logger.getLogger(CollectionMonitor.class); @Override public void setup(Node cfg) { - Element config = (Element) cfg; - String xlink = config.getAttribute("xlink:href"); - xlink = Config.replaceConfigDir(xlink); - - File file = new File(xlink); - - if (file == null || !file.exists()) { - logger.error("The config file '" + xlink + "' does not exist."); - return; - } - - Document outputDefaults = XMLUtils.parseDocument(file); - - NodeList states = (NodeList) XMLUtils.xpath( - outputDefaults, - XPATH_STATES, - XPathConstants.NODESET); - - int len = states != null ? states.getLength() : 0; - - this.states = new HashMap>(len); - - for (int i = 0; i < len; i++) { - Element state = (Element) states.item(i); - - String stateId = state.getAttribute("id"); - String factory = state.getAttribute("artifact-factory"); - - if (stateId != null && factory != null) { - List factories = this.states.get(stateId); - - if (factories == null) { - factories = new ArrayList(); - this.states.put(stateId, factories); - } - - factories.add(factory); - } - } } @@ -86,21 +43,6 @@ public void execute(Artifact artifact, CallContext context, Document doc) { FLYSArtifact flys = (FLYSArtifact) artifact; - String stateId = flys.getCurrentStateId(); - - List factories = states.get(stateId); - - if (factories == null || factories.isEmpty()) { - return; - } - - logger.info("Found " + factories.size() + " recommended artifacts."); - - appendRecommendations(doc, factories); - } - - - protected void appendRecommendations(Document doc, List factories) { Element result = (Element) XMLUtils.xpath( doc, XPATH_RESULT, @@ -113,15 +55,39 @@ ArtifactNamespaceContext.NAMESPACE_PREFIX); Element recommended = creator.create("recommended-artifacts"); + result.appendChild(recommended); - for (String factory: factories) { - Element fac = creator.create("artifact-factory"); - creator.addAttr(fac, "name", factory); + String[] outs = extractOutputNames(flys, context); + Map params = getDataCageParameters(flys, context); - recommended.appendChild(fac); + DataCage dc = DataCage.getInstance(); + dc.recommend(flys, outs, params, recommended); + } + + + public static String[] extractOutputNames( + FLYSArtifact flys, + CallContext context) + { + List outs = flys.getOutputs(context); + String[] names = new String[outs.size()]; + + for (int i = 0, num = outs != null ? outs.size() : 0; i < num; i++) { + names[i] = outs.get(i).getName(); } - result.appendChild(recommended); + return names; + } + + + protected Map getDataCageParameters( + FLYSArtifact flys, + CallContext context) + { + Map params = new HashMap(1); + params.put("recommended", "true"); + + return params; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r f48cef242e7f -r ff6ce301c472 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/DataCage.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/DataCage.java Wed Jul 20 22:03:50 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/DataCage.java Thu Jul 21 10:45:52 2011 +0000 @@ -92,7 +92,7 @@ final Map parameters, final Node result ) { - if (builder != null) { + if (builder == null) { log.error("builder not configured properly."); return; }