# HG changeset patch # User Tim Englich # Date 1253533847 0 # Node ID 9b41f3688610def497ebac2c6b37f49af0620cd4 # Parent 29a7ba73183802b1c7ce71fddf49bef77fb0acab Added Support for TimeSeriesMesh gnv-artifacts/trunk@106 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/Changelog --- a/gnv-artifacts/Changelog Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/Changelog Mon Sep 21 11:50:47 2009 +0000 @@ -1,3 +1,24 @@ +2009-09-21 Tim Englich + + * src/test/ressources/queries.properties Edited: + Queryie for TimeSeriesMesh added. + * src/test/ressources/conf.xml Edited: + New Artifact representing the TimeSeries-Mesh added to the Configuration. + * src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java Edited: + Inputdata for the Chartgeneration will now be allocated by name and not by position in Transitionorder. + * src/main/java/de/intevation/gnv/transition/describedata/SingleValueDescribeData.java Added, + src/main/java/de/intevation/gnv/transition/describedata/DefaultSingleValueDescribeData.java Added, + src/main/java/de/intevation/gnv/transition/SingleInputTransition.java Added: + New Class for Representing a single Input Transition + * src/main/java/de/intevation/gnv/transition/TransitionBase.java Edited: + Added support of usage inputValues none or multiple times in Queries. + Added support for SingleInputTransitions in Describe-Output + * src/main/java/de/intevation/gnv/transition/InputValue.java Edited, + src/main/java/de/intevation/gnv/transition/DefaultInputValue.java Edited: + An InputValue now is possible to use none or multiple times in Queries. + * src/main/java/de/intevation/gnv/timeseries/TimeSeriesMeshArtifact.java Added: + ArtifactClass for the Representation of an Mesh-Timeseries-Artifact + 2009-09-17 Tim Englich * src/test/ressources/conf.xml Edited: diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/TimeSeriesMeshArtifact.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/TimeSeriesMeshArtifact.java Mon Sep 21 11:50:47 2009 +0000 @@ -0,0 +1,18 @@ +package de.intevation.gnv.timeseries; +public class TimeSeriesMeshArtifact extends TimeSeriesArtifact { + + /** + * + */ + private static final long serialVersionUID = 5680432486700275986L; + + /** + * + * Constructor + */ + public TimeSeriesMeshArtifact() { + super(); + super.name = super.name+ "Mesh"; + } + +} diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/DefaultInputValue.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/DefaultInputValue.java Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/DefaultInputValue.java Mon Sep 21 11:50:47 2009 +0000 @@ -15,15 +15,17 @@ private String name = null; private String type = null; private boolean multiselect = false; + private int usedInQueries = 1; /** * Constructor */ - public DefaultInputValue(String name, String type, boolean multiselect){ + public DefaultInputValue(String name, String type, boolean multiselect, int usedInQueries){ this.name = name; this.type = type; this.multiselect = multiselect; + this.usedInQueries = usedInQueries; } /** @@ -55,4 +57,8 @@ return this.multiselect; } + public int usedInQueries() { + return this.usedInQueries; + } + } diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/InputValue.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/InputValue.java Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/InputValue.java Mon Sep 21 11:50:47 2009 +0000 @@ -14,5 +14,6 @@ public String getName(); public String getType(); public boolean isMultiselect(); + public int usedInQueries(); } diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/SingleInputTransition.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/SingleInputTransition.java Mon Sep 21 11:50:47 2009 +0000 @@ -0,0 +1,61 @@ +/** + * + */ +package de.intevation.gnv.transition; + +import java.util.ArrayList; +import java.util.Collection; + +import org.apache.log4j.Logger; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.transition.describedata.DefaultSingleValueDescribeData; + +/** + * @author Tim Englich + * + */ +public class SingleInputTransition extends TransitionBase { + + /** + * the logger, used to log exceptions and additonaly information + */ + private static Logger log = Logger.getLogger(SingleInputTransition.class); + + /** + * + */ + private static final long serialVersionUID = -6169497306324917318L; + + /** + * Constructor + */ + public SingleInputTransition() { + } + + /** + * @see de.intevation.gnv.transition.Transition#validate() + */ + public boolean validate() { + return true; + } + + @Override + protected void purifyResult(Collection result) { + log.debug("SingleInputTransition.purifyResult"); + if (this.descibeData == null){ + this.descibeData = new ArrayList(); + } + String value = null; + if (result != null && result.size() == 1){ + Result tmpItem = result.iterator().next(); + value = tmpItem.getObject("MAX").toString(); + }else{ + value = ""; + } + + this.descibeData.add(new DefaultSingleValueDescribeData(this.dataName, value)); + } + + +} diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Mon Sep 21 11:50:47 2009 +0000 @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; @@ -31,6 +32,7 @@ import de.intevation.gnv.transition.describedata.MinMaxDescribeData; import de.intevation.gnv.transition.describedata.NamedArrayList; import de.intevation.gnv.transition.describedata.NamedCollection; +import de.intevation.gnv.transition.describedata.SingleValueDescribeData; import de.intevation.gnv.transition.exception.TransitionException; import de.intevation.gnv.utils.ArtifactXMLUtilities; @@ -54,7 +56,7 @@ private String description = null; - private String dataName = null; + protected String dataName = null; private boolean dataMultiSelect = false; @@ -130,7 +132,20 @@ this.inputValueNames = new ArrayList(inputValuesNodes.getLength()); for (int i = 0 ; i < inputValuesNodes.getLength(); i++){ Node inputValueNode = inputValuesNodes.item(i); - InputValue inputValue = new DefaultInputValue(Config.getStringXPath(inputValueNode,"@name"), Config.getStringXPath(inputValueNode,"@type"), Boolean.parseBoolean(Config.getStringXPath(inputValueNode,"@multiselect"))); + String usedinQueryValue = Config.getStringXPath(inputValueNode,"@usedinquery"); + int usedinQuery = 1; + if (usedinQueryValue != null){ + try { + usedinQuery = Integer.parseInt(usedinQueryValue); + } catch (NumberFormatException e) { + log.warn("Used in Query Value cannot be transformed into a Number"); + } + } + InputValue inputValue = new DefaultInputValue( + Config.getStringXPath(inputValueNode,"@name"), + Config.getStringXPath(inputValueNode,"@type"), + Boolean.parseBoolean(Config.getStringXPath(inputValueNode,"@multiselect")), + usedinQuery); log.debug(inputValue.toString()); this.inputValues.put(inputValue.getName(),inputValue); this.inputValueNames.add(inputValue.getName()); @@ -272,17 +287,30 @@ public void advance() throws TransitionException { log.debug("TransitionBase.advance"); try { - String[] filterValues = new String[this.inputValueNames.size()]; + List list = new ArrayList(); + + Iterator it = this.inputValueNames.iterator(); int i = 0; while (it.hasNext()){ String value = it.next(); InputData data = this.inputData.get(value); - filterValues[i++] = data.getValue(); + int size = this.inputValues.get(data.getName()).usedInQueries(); + for (int j = 0; j < size; j++){ + list.add(data.getValue()); + } } - QueryExecutor queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor(); - Collection result = queryExecutor.executeQuery(this.queryID, filterValues); - this.purifyResult(result); + String[] filterValues = list.toArray(new String[0]); + Collection result = null; + try { + if (this.queryID != null){ + QueryExecutor queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor(); + result = queryExecutor.executeQuery(this.queryID, filterValues); + } + this.purifyResult(result); + } catch (RuntimeException e) { + log.error(e,e); + } } catch (QueryException e) { log.error(e,e); throw new TransitionException(e); @@ -414,7 +442,29 @@ staticNode.appendChild(inputMinNode); staticNode.appendChild(inputMaxNode); } + }else if (o instanceof SingleValueDescribeData){ + + SingleValueDescribeData svdb = (SingleValueDescribeData)o; + + Element inputNode = xmlutilities.createXFormElement(document, "input"); + inputNode.setAttribute("ref", svdb.getName()); + + Element inputLableNode = xmlutilities.createXFormElement(document, "label"); + inputLableNode.setTextContent(svdb.getName()); + inputNode.appendChild(inputLableNode); + + Element inputValueNode = xmlutilities.createXFormElement(document, "value"); + inputValueNode.setTextContent(svdb.getValue()); + inputNode.appendChild(inputValueNode); + + + if (!it.hasNext()){ + dynamic.appendChild(inputNode); + }else{ + staticNode.appendChild(inputNode); + } } + } } } @@ -438,6 +488,6 @@ * @see de.intevation.gnv.transition.Transition#getInputData() */ public Collection getInputData() throws TransitionException { - return this.inputData.values(); + return this.inputData != null ? this.inputData.values() : null; } } diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/describedata/DefaultSingleValueDescribeData.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/describedata/DefaultSingleValueDescribeData.java Mon Sep 21 11:50:47 2009 +0000 @@ -0,0 +1,46 @@ +/** + * + */ +package de.intevation.gnv.transition.describedata; +/** + * @author Tim Englich + * + */ +public class DefaultSingleValueDescribeData implements SingleValueDescribeData { + + + /** + * + */ + private static final long serialVersionUID = 3580176842483316917L; + + private String name = null; + + private String value = null; + + /** + * Constructor + * @param name + * @param value + */ + public DefaultSingleValueDescribeData(String name, String value) { + super(); + this.name = name; + this.value = value; + } + + /** + * @see de.intevation.gnv.transition.describedata.SingleValueDescribeData#getName() + */ + public String getName() { + return this.name; + } + + /** + * @see de.intevation.gnv.transition.describedata.SingleValueDescribeData#getValue() + */ + public String getValue() { + return this.value; + } + +} diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/describedata/SingleValueDescribeData.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/describedata/SingleValueDescribeData.java Mon Sep 21 11:50:47 2009 +0000 @@ -0,0 +1,14 @@ +/** + * + */ +package de.intevation.gnv.transition.describedata; +/** + * @author Tim Englich + * + */ +public interface SingleValueDescribeData extends DescribeData { + + public String getName(); + + public String getValue(); +} diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java --- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java Mon Sep 21 11:50:47 2009 +0000 @@ -20,6 +20,7 @@ import de.intevation.gnv.geobackend.base.Result; import de.intevation.gnv.transition.OutputTransitionBase; import de.intevation.gnv.transition.describedata.KeyValueDescibeData; +import de.intevation.gnv.transition.describedata.NamedCollection; import de.intevation.gnv.transition.exception.TransitionException; /** @@ -53,7 +54,7 @@ public void out(String outputMode, OutputStream outputStream) throws TransitionException { log.debug("TimeSeriesOutputTransition"); try { - this.advance(); // TODO nur neu holen wenn hash auf chartResult sich geändert hat + this.advance(); // TODO nur neu holen wenn hash auf chartResult sich ge�ndert hat ChartFactory chartFactory = new ChartFactory(); Collection parameters = this.getParameters(); @@ -93,28 +94,31 @@ protected Collection getParameters(){ Iterator it = this.descibeData.iterator(); - int i = 0; + while (it.hasNext()){ Object o = it.next(); - if (i == 1){ // TODO über Identifier arbeiten This is just a hack - return (Collection)o; + if (o instanceof NamedCollection){ + NamedCollection nc = (NamedCollection)o; + if (nc.getName().equals("parameterid")){ // TODO: konfigurierbar machen. + return nc; + } } - i++; } return null; } protected Collection getMeasurements(){ Iterator it = this.descibeData.iterator(); - int i = 0; while (it.hasNext()){ Object o = it.next(); - if (i == 2){ // TODO über Identifier arbeiten This is just a hack - return (Collection)o; + if (o instanceof NamedCollection){ + NamedCollection nc = (NamedCollection)o; + if (nc.getName().equals("measurementid")){ // TODO: konfigurierbar machen. + return nc; + } } - i++; } return null; } diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/test/ressources/conf.xml --- a/gnv-artifacts/src/test/ressources/conf.xml Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/src/test/ressources/conf.xml Mon Sep 21 11:50:47 2009 +0000 @@ -4,13 +4,13 @@ de.intevation.gnv.artifacts.context.GNVArtifactContextFactory de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.artifacts.fis.FISArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.artifacts.fis.FISArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.artifacts.fis.FISArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.artifacts.fis.FISArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory @@ -18,7 +18,7 @@ de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory @@ -29,7 +29,7 @@ de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory @@ -40,7 +40,7 @@ de.intevation.artifactdatabase.DefaultArtifactFactory + ttl="300000" artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">de.intevation.artifactdatabase.DefaultArtifactFactory @@ -49,11 +49,117 @@ + + de.intevation.artifactdatabase.DefaultArtifactFactory + + + + + + + + timeseries_mesh + featureid + false + + timeseries_mesh_coordinate + + + + + + + mesh_coordinate + false + + timeseries_meshpointv + + + + + + + + timeseries_meshpoint + mesh_point + false + + timeseries_meshpoint_depthv + + + + + + + + + timeseries_meshpoint_depth + measurementid + true + + timeseries_meshpoint_parameterv + + + + + + + + + timeseries_mesh_parameter + parameterid + true + + timeseries_meshpoint_interval + + + + + + + + + + timeseries_mesh_interval + minvalue + false + + timeseries_meshpoint_calculate_results + + + + + + + + + + + timeseries_mesh_chart_data + + + + + + + + + + + + + + + + + + + - timeseries_timeseriespoint featureid @@ -134,8 +240,8 @@ 300000 - tim - test + + diff -r 29a7ba731838 -r 9b41f3688610 gnv-artifacts/src/test/ressources/queries.properties --- a/gnv-artifacts/src/test/ressources/queries.properties Thu Sep 17 14:25:24 2009 +0000 +++ b/gnv-artifacts/src/test/ressources/queries.properties Mon Sep 21 11:50:47 2009 +0000 @@ -3,3 +3,14 @@ timeseries_depth_height=SELECT DISTINCT m.MEASUREMENTID KEY, m.ZLOCATION VALUE from MEDIAN.MEASUREMENT m where m.MEASUREMENTID in (SELECT DISTINCT t_v.MEASUREMENTID from MEDIAN.TIMESERIESVALUE t_v where t_v.TIMESERIESID in (SELECT DISTINCT t.TIMESERIESID from MEDIAN.TIMESERIES t where t.PARAMETERID in (SELECT DISTINCT p.PARAMETERID from MEDIAN.PARAMETER p where m.FEATUREID IN ( ? ) and p.PARAMETERID IN (?))))ORDER BY m.ZLOCATION DESC timeseries_interval=select min(tv.TIMEVALUE) MIN, max(tv.TIMEVALUE) MAX from MEDIAN.TIMESERIES t , MEDIAN.TIMESERIESVALUE tv where tv.TIMESERIESID = t.TIMESERIESID AND t.PARAMETERID IN ( ? ) AND tv.MEASUREMENTID IN ( ? ) timeseries_chart_data=SELECT tv.TIMEVALUE, tv.DATAVALUE, t.PARAMETERID, tv.MEASUREMENTID, tv.TIMESERIESID FROM MEDIAN.TIMESERIESVALUE tv, MEDIAN.TIMESERIES t WHERE tv.TIMESERIESID = t.TIMESERIESID AND t.PARAMETERID IN ( ? ) AND tv.MEASUREMENTID IN ( ? ) AND tv.TIMEVALUE > TO_DATE ('?', 'YYYY.MM.DD HH24:MI:SS') AND tv.TIMEVALUE < TO_DATE ('?', 'YYYY.MM.DD HH24:MI:SS') ORDER BY tv.MEASUREMENTID ,tv.TIMESERIESID ,t.PARAMETERID ,tv.TIMEVALUE + + +# Zeitserie Mesh + +timeseries_mesh = SELECT OBJECTID KEY, m.NAME VALUE FROM MEDIAN.MESH m order by m.NAME +timeseries_meshpoint = SELECT FEATUREID KEY, SHAPE VALUE FROM MEDIAN.MESHPOINT mp , MEDIAN.MESH m WHERE m.OBJECTID = ? AND mp.MESHID = m.MESHID AND KPOSITION = 1 AND rownum < 10 +timeseries_meshpoint_depth = select mp.FEATUREID KEY, -ml.UPPERZLOCATION || ' - '|| -ml.LOWERZLOCATION as VALUE from MEDIAN.MESHLAYER ml, MEDIAN.MESHPOINT mp where ml.KPOSITION = mp.KPOSITION and ml.MESHID = mp.MESHID and mp.FEATUREID in ( select FEATUREID from MEDIAN.MESHPOINT mp, MEDIAN.MESH m where m.OBJECTID = ? AND mp.MESHID = m.MESHID AND IPOSITION = (select IPOSITION from MEDIAN.MESHPOINT where FEATUREID = ?) and JPOSITION = (select JPOSITION from MEDIAN.MESHPOINT where FEATUREID = ?)) order by ml.UPPERZLOCATION desc +timeseries_mesh_parameter=SELECT distinct p.PARAMETERID KEY , p.GERMANNAME VALUE from MEDIAN.PARAMETER p, MEDIAN.MESHSCALARVALUE msc, MEDIAN.MESH m where m.OBJECTID = ? AND msc.PARTID = m.PARTIDMIN AND msc.PARAMETERID = p.PARAMETERID +timeseries_mesh_interval=select /*+ parallel(TIMEVALUE,5) */ min(TIMEVALUE) MIN, max(TIMEVALUE) MAX from MEDIAN.MESHSCALARVALUE msc , MEDIAN.MESH m where m.OBJECTID = ? AND msc.PARTID >= m.PARTIDMIN AND msc.PARTID <= m.PARTIDMAX +timeseries_mesh_chart_data=select /*+ parallel(timevalue,10) */ msv.TIMEVALUE, msv.DATAVALUE, msv.PARAMETERID, msv.FEATUREID MEASUREMENTID, mp.FEATUREID TIMESERIESID from MEDIAN.MESHSCALARVALUE msv , MEDIAN.MESHPOINT mp, MEDIAN.MESH m where (m.OBJECTID = ? AND msv.PARTID >= m.PARTIDMIN AND msv.PARTID <= m.PARTIDMAX ) AND msv.FEATUREID in ( ? ) and msv.PARAMETERID in ( ? ) AND mp.FEATUREID = ? and TIMEVALUE >= to_date('?', 'YYYY.MM.DD HH24:MI:SS') and TIMEVALUE <= to_date('?', 'YYYY.MM.DD HH24:MI:SS') order by msv.FEATUREID, msv.PARAMETERID, msv.TIMEVALUE +