view flys-artifacts/doc/conf/meta-data.xml @ 5542:f3b270e5462e

Wst Parser: Another attempt to fix the order of the Q ranges.
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 03 Apr 2013 20:16:01 +0200
parents a11c6f680487
children 38713f32a785 38acd82feeac
line wrap: on
line source
<?xml version="1.0" encoding="UTF-8"?>
<dc:template xmlns:dc="http://www.intevation.org/2011/Datacage">
<datacage>
  <dc:comment>
    Statement to load data from wsts.
  </dc:comment>
  <dc:macro name="SQL-wst_columns_statement">
    <dc:statement>
        SELECT wst_columns.id          AS prot_column_id,
               wst_columns.name        AS prot_column_name,
               wst_columns.position    AS prot_rel_pos,
               wst_columns.description AS info,
               wst_ranges.a            AS deffrom,
               wst_ranges.b            AS defto
        FROM wst_columns, wst_ranges
        WHERE wst_columns.wst_id = ${prot_id}
           AND wst_ranges.wst_column_id = wst_columns.id
           AND (${fromkm} BETWEEN wst_ranges.a AND wst_ranges.b
           OR ${tokm} BETWEEN wst_ranges.a AND wst_ranges.b
           OR wst_ranges.a BETWEEN ${fromkm} AND ${tokm}
           OR wst_ranges.b BETWEEN ${fromkm} AND ${tokm})
        ORDER by wst_columns.position
    </dc:statement>
  </dc:macro>

  <dc:comment>
    Load user specific distance information from artifact.
  </dc:comment>
  <dc:macro name="user-range">
    <dc:choose>
      <dc:when test="dc:contains($parameters, 'user-id')">
        <dc:context connection="user">
        <dc:statement>
          SELECT COALESCE(ld_mode, '')      AS ldm,
                 COALESCE(ld_locations, '') AS ldl,
                 COALESCE(ld_from, '')      AS ldf,
                 COALESCE(ld_to, '')        AS ldt
          FROM master_artifacts_range
          WHERE gid = CAST(${artifact-id} AS uuid)
        </dc:statement>
        <dc:for-each>
          <dc:variable name="fromkm" type="number" expr="dc:fromValue($ldm, $ldl, $ldf)"/>
          <dc:variable name="tokm" type="number" expr="dc:toValue($ldm, $ldl, $ldt)"/>
          <dc:macro-body/>
        </dc:for-each>
        </dc:context>
      </dc:when>
      <dc:otherwise>
        <dc:variable name="fromkm" type="number" expr="dc:fromValue('', '', '')"/>
        <dc:variable name="tokm" type="number" expr="dc:toValue('', '', '')"/>
        <dc:macro-body/>
      </dc:otherwise>
    </dc:choose>
  </dc:macro>

  <dc:comment>
    System part. Load data for the given river.
  </dc:comment>
  <dc:macro name="load-system">
    <dc:context connection="system">
      <dc:statement>
        SELECT id AS river_id, name AS river_name FROM rivers
        WHERE lower(name) LIKE lower(${river})
      </dc:statement>
      <dc:for-each>

        <dc:comment>
          Base-data macros (mostly data imported from wst-files).
        </dc:comment>
        <dc:macro name="basedata_0">
          <dc:call-macro name="user-range">
            <dc:comment comment=" BASEDATA ---------------------------"/>
            <basedata>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 0 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <basedata name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="base_data-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </basedata>
                </dc:for-each>
              </dc:context>
            </basedata>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_0_wq">
          <dc:call-macro name="user-range">
            <dc:comment comment=" BASEDATA ---------------------------"/>
            <basedata>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 0 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <basedata name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="base_data-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="wqinterpol"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </basedata>
                </dc:for-each>
              </dc:context>
            </basedata>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_1_additionals_marks">
          <dc:call-macro name="user-range">
            <dc:comment comment=".ZUS -------------------------------"/>
            <additionals>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 1 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <additional name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="additionalsmarks-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context></additional>
                </dc:for-each>
              </dc:context>
            </additionals>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_1_additionals">
          <dc:call-macro name="user-range">
            <dc:comment comment=".ZUS -------------------------------"/>
            <additionals>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 1 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <additional name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="additionals-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </additional>
                </dc:for-each>
              </dc:context>
            </additionals>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_1_additionals-relative_point">
          <dc:call-macro name="user-range">
            <dc:comment comment=".ZUS -------------------------------"/>
            <additionals>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 1 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <relativepoint name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="additionals-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </relativepoint>
                </dc:for-each>
              </dc:context>
            </additionals>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_2_fixations_wst">
          <dc:call-macro name="user-range">
            <fixations>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 2 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <fixation name="{$prot_description}">
                    <!--dc:attribute name="ids" value="fixations-wstv-A-${prot_id}"/--><dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="fixations-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="wqinterpol"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </fixation>
                </dc:for-each>
              </dc:context>
            </fixations>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_2_fixations_wqkms">
          <dc:call-macro name="user-range">
            <fixations>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 2 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <fixation name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="fixations-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="wqinterpol"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </fixation>
                </dc:for-each>
              </dc:context>
            </fixations>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_2_fixations">
          <dc:call-macro name="user-range">
            <fixations>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 2 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <fixation name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="fixations-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </fixation>
                </dc:for-each>
              </dc:context>
            </fixations>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_2_fixations_relative_point">
          <dc:call-macro name="user-range">
            <fixations>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 2 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <relativepoint name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="fixations-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </relativepoint>
                </dc:for-each>
              </dc:context>
            </fixations>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_3_officials">
          <dc:call-macro name="user-range">
            <dc:comment comment=".wst -------------------------------"/>
            <officiallines>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 3 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <official name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="additionals-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwqkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </official>
                </dc:for-each>
              </dc:context>
            </officiallines>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_4_heightmarks-points-relative_points">
          <dc:call-macro name="user-range">
            <heightmarks>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 4 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <relativepoint name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="heightmarks_points-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </relativepoint>
                </dc:for-each>
              </dc:context>
            </heightmarks>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_4_heightmarks-points">
          <dc:call-macro name="user-range">
            <heightmarks>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 4 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <heightmark name="{$prot_description}">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="heightmarks_points-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </heightmark>
                </dc:for-each>
              </dc:context>
            </heightmarks>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_4_heightmarks-wq">
          <dc:call-macro name="user-range">
            <heightmarks>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 4 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <heightmark name="{$prot_description}"><dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="heightmarks_annotations-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="wqinterpol"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </heightmark>
                </dc:for-each>
              </dc:context>
            </heightmarks>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_5_flood-protections_relative_points">
          <dc:call-macro name="user-range">
            <flood_protections id="flood-protections-{$river_id}">
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 5 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <relativepoint name="{$prot_description}"
                                 db-id="{$prot_id}"
                                 factory="staticwkms">
                  <columns>
                      <dc:context>
                        <dc:call-macro name="SQL-wst_columns_statement"/>
                        <dc:for-each>
                          <column name="{$prot_column_name}"
                                  ids="flood_protection-wstv-{$prot_rel_pos}-{$prot_id}"
                                  factory="staticwkms"
                                  info="{$info} [km {$deffrom} - {$defto}]"/>
                        </dc:for-each>
                      </dc:context>
                    </columns>
                  </relativepoint>
                </dc:for-each>
              </dc:context></flood_protections>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="basedata_5_flood-protections">
          <dc:call-macro name="user-range">
            <flood_protections id="flood-protections-{$river_id}">
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS prot_id,
                         description AS prot_description
                  FROM wsts WHERE kind = 5 AND river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <flood_protection name="{$prot_description}"
                                    db-id="{$prot_id}"
                                    factory="staticwkms">
                    <dc:context>
                      <dc:call-macro name="SQL-wst_columns_statement"/>
                      <dc:for-each>
                        <column name="{$prot_column_name}"
                                ids="flood_protection-wstv-{$prot_rel_pos}-{$prot_id}"
                                factory="staticwkms"
                                info="{$info} [km {$deffrom} - {$defto}]"/>
                      </dc:for-each>
                    </dc:context>
                  </flood_protection>
                </dc:for-each>
              </dc:context>
            </flood_protections>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="mainvalues">
          <mainvalue factory="mainvalue" ids="{$river_id}"/>
          <wmainvalue factory="mainvalue" ids="{$river_id}:w"/>
          <qmainvalue factory="mainvalue" ids="{$river_id}:q"/>
        </dc:macro>

        <dc:macro name="qsectors">
          <qsector factory="qsectors" ids="{$river_id}"/>
        </dc:macro>

        <dc:macro name="annotations">
          <annotation factory="annotations" ids="{$river_id}"/>
        </dc:macro>

        <dc:macro name="annotations_per_type">
          <annotations>
            <dc:context>
              <annotation name="all_annotations" factory="annotations" ids="{$river_id}"/>
              <dc:statement>
                SELECT id          AS anno_id,
                       name AS anno_description
                FROM annotation_types
              </dc:statement>
              <dc:for-each>
                <annotation name="{$anno_description}"
                            factory="annotations"
                            ids="{$river_id}:{$anno_description}"/>
             </dc:for-each>
            </dc:context>
          </annotations>
        </dc:macro>

        <dc:macro name="cross_sections">
          <dc:call-macro name="user-range">
            <cross_sections id="flood-protections-{$river_id}">
              <dc:context connection="system">
                <dc:statement>
                  SELECT DISTINCT
                         cs.id          AS prot_id,
                         cs.description AS prot_description
                  FROM cross_sections cs
                    JOIN cross_section_lines csl ON csl.cross_section_id = cs.id
                  WHERE cs.river_id = ${river_id}
                    AND csl.km BETWEEN ${fromkm} AND ${tokm}
                </dc:statement>
                <dc:for-each>
                  <cross_section name="{$prot_description}"
                                 ids="{$prot_id}"
                                 factory="crosssections"/>
                </dc:for-each>
              </dc:context>
            </cross_sections>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="hyks">
          <dc:call-macro name="user-range">
            <hyks id="hyk-{$river_id}">
              <dc:context connection="system">
                <dc:statement>
                  SELECT DISTINCT
                         h.id          AS hyk_id,
                         h.description AS hyk_description
                  FROM hyks h
                    JOIN hyk_entries he ON he.hyk_id = h.id
                  WHERE river_id = ${river_id}
                    AND he.km BETWEEN ${fromkm} AND ${tokm}
                </dc:statement>
                <dc:for-each>
                  <hyk name="{$hyk_description}" ids="{$hyk_id}" factory="hyk"/>
                </dc:for-each>
              </dc:context></hyks>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="flow_velocity_measurements">
          <dc:call-macro name="user-range">
            <flowvelocitymeasurement>
              <dc:context connection="system">
                <dc:statement>
                  SELECT id          AS fvmid,
                         description AS fvmd
                  FROM flow_velocity_measurements WHERE river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <flow_velocity_measurement name="{$fvmd}"
                                             ids="{$fvmid}"
                                             factory="flowvelocity">
                    <dc:context>
                      <dc:statement>
                        SELECT id, description, station, datetime, v, w, q
                        FROM flow_velocity_measure_values
                        WHERE measurements_id = ${fvmid}
                          AND station BETWEEN ${fromkm} AND ${tokm}
                      </dc:statement>
                      <dc:for-each>
                        <measurement_value name="{$id}-{$description}-{$station}-{$datetime}"
                                           ids="{$id}"
                                           factory="flowvelocity"/>
                      </dc:for-each>
                    </dc:context>
                  </flow_velocity_measurement>
                </dc:for-each>
              </dc:context>
            </flowvelocitymeasurement>
          </dc:call-macro>
        </dc:macro>

        <dc:macro name="sounding-width">
          <soundings_width>
            <dc:context>
              <dc:statement>
                  SELECT id          AS bedh_id,
                         year        AS bedh_year,
                         description AS bedh_descr
                  FROM bed_height_single WHERE river_id = ${river_id}
              </dc:statement>
              <dc:for-each>
                <height factory="bedheight"
                        ids="bedheight-singlevalues-{$bedh_id}-{$bedh_year}"
                        description="{$bedh_descr}"/>
              </dc:for-each>
            </dc:context>
          </soundings_width>
        </dc:macro>

        <dc:macro name="longitudinal-section-prototype">
          <dc:call-macro name="basedata_0"/>
          <dc:call-macro name="basedata_1_additionals"/>
          <dc:comment comment=" FIXATIONS ---------------------------"/>
          <dc:call-macro name="basedata_2_fixations"/>
          <dc:comment comment=" HOEHENMARKEN ---------------------------"/>
          <dc:call-macro name="basedata_4_heightmarks-points"/>
          <dc:comment comment=" AMTL LINIEN  ---------------------------"/>
          <dc:call-macro name="basedata_3_officials"/>
          <dc:call-macro name="basedata_5_flood-protections"/>
          <dc:call-macro name="annotations_per_type"/>
        </dc:macro>

        <dc:comment>
        + River-Node
        </dc:comment>
        <dc:attribute name="name" value="${river_name}"/>

        <dc:choose>
          <dc:when test="dc:contains($parameters, 'recommended')">
             <dc:comment>
                Recommendations (client shall load immediately).
             </dc:comment>
             <dc:if test="dc:contains($artifact-outs, 'w_differences') or (dc:contains($artifact-outs, 'discharge_longitudinal_section'))">
               <dc:call-macro name="annotations"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'historical_discharge_wq')">
               <dc:call-macro name="mainvalues"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'cross_section')">
               <dc:call-macro name="cross_sections"/>
               <dc:call-macro name="hyks"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'computed_discharge_curve')">
               <dc:call-macro name="mainvalues"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'duration_curve')">
               <dc:call-macro name="mainvalues"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'reference_curve')">
               <dc:call-macro name="annotations"/>
               <dc:call-macro name="mainvalues"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'fix_wq_curve')">
               <dc:call-macro name="qsectors"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'longitudinal_section')">
               <dc:call-macro name="annotations"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'fix_longitudinal_section_curve')">
               <dc:call-macro name="annotations"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'bed_difference_epoch')">
               <dc:call-macro name="annotations"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'bed_difference_year')">
               <dc:call-macro name="annotations"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'bed_difference_height_year')">
               <dc:call-macro name="annotations"/>
             </dc:if>
             <dc:if test="dc:contains($artifact-outs, 'flow_velocity')">
               <dc:call-macro name="annotations"/>
             </dc:if>
          </dc:when>
          <dc:otherwise>
            <dc:comment>
               Non - Recommendations.
            </dc:comment>
            <dc:if test="dc:contains($artifact-outs, 'cross_section')">
               <dc:call-macro name="basedata_0"/>
               <dc:call-macro name="basedata_1_additionals"/>
               <dc:call-macro name="basedata_2_fixations"/>
               <dc:call-macro name="basedata_3_officials"/>
               <dc:call-macro name="basedata_4_heightmarks-points"/>
               <dc:call-macro name="cross_sections"/>
               <dc:call-macro name="hyks"/>
            </dc:if>
            <!--dc:if test="dc:contains($artifact-outs, 'computed_discharge_curve')">
               <dc:call-macro name="basedata_0_wq"/>
               <dc:call-macro name="basedata_4_heightmarks-wq"/>
            </dc:if-->
            <dc:if test="dc:contains($artifact-outs, 'longitudinal_section') or (dc:contains($artifact-outs, 'w_differences')) or (dc:contains($artifact-outs, 'discharge_longitudinal_section'))">
                <dc:call-macro name="longitudinal-section-prototype"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'duration_curve')">
                <dc:call-macro name="mainvalues"/>
                <dc:call-macro name="basedata_2_fixations_relative_point"/>
                <dc:call-macro name="basedata_4_heightmarks-points-relative_points"/>
                <dc:call-macro name="basedata_5_flood-protections_relative_points"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'reference_curve')">
              <dc:call-macro name="annotations"/>
              <!--dc:call-macro name="basedata_0"/-->
              <dc:call-macro name="basedata_1_additionals-relative_point"/>
              <dc:comment comment=" FIXATIONS ---------------------------"/>
              <dc:call-macro name="basedata_2_fixations_relative_point"/>
              <dc:comment comment=" HOEHENMARKEN ---------------------------"/>
              <dc:call-macro name="basedata_4_heightmarks-points-relative_points"/>
              <dc:call-macro name="basedata_5_flood-protections_relative_points"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_wq_curve')">
              <dc:call-macro name="basedata_0_wq"/>
              <dc:call-macro name="basedata_1_additionals_marks"/>
              <dc:call-macro name="basedata_2_fixations_wqkms"/>
              <dc:call-macro name="basedata_3_officials"/>
              <dc:call-macro name="basedata_4_heightmarks-points"/>
              <dc:call-macro name="basedata_5_flood-protections_relative_points"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_deltawt_curve')">
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_longitudinal_section_curve')">
              <dc:call-macro name="annotations"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'map')">
              <dc:call-macro name="flood-map-complete"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'flow_velocity')">
              <dc:call-macro name="annotations"/>
              <dc:call-macro name="flow_velocity_measurements"/>
            </dc:if>
            <dc:comment>
              MINFO bedheight middle
            </dc:comment>
            <dc:if test="dc:contains($artifact-outs, 'bedheight_middle')">
              <dc:call-macro name="sounding-width"/>
            </dc:if>
           <dc:comment comment="--- non-recommendations---"/>
          </dc:otherwise>
        </dc:choose>

        <dc:if test="dc:contains($artifact-outs, 'waterlevels')">

          <!-- base data -->
          <dc:call-macro name="basedata_0"/>

          <!-- extra-longitudinal-sections -->
          <dc:call-macro name="basedata_1_additionals"/>

          <!-- fixations -->
          <dc:call-macro name="basedata_2_fixations"/>

          <!-- flood water marks-->
          <dc:call-macro name="basedata_4_heightmarks-points"/>

          <!-- flood protection -->
          <dc:call-macro name="basedata_5_flood-protections"/>

        </dc:if>

        <dc:comment><!-- XXX: Why is this taken out?
          <dc:if test="dc:contains($artifact-outs, 'computed_discharge_curve') and (dc:contains($parameters, 'recommended'))">
             <dc:call-macro name="basedata_2_fixations_wst"/>
           </dc:if>
           -->
        </dc:comment>

        <dc:if test="dc:contains($artifact-outs, 'computed_discharge_curve') and not (dc:contains($parameters, 'recommended'))">
          <discharge_table_nn>
            <discharge_table_gauge>
              <dc:context>
                <dc:statement>
                  SELECT id   AS gauge_id,
                         name AS gauge_name
                  FROM gauges WHERE river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <gauge name="{$gauge_name}"
                         db-id="{$gauge_id}"
                         factory="gaugedischarge"
                         from="{$g_start}"
                         to="{$g_stop}"
                         ids="{$gauge_name}"/>
                  <dc:comment>
                    <!--
                    <gauge>
                      <dc:attribute name="name" value="${gauge_name}"/>
                      <dc:attribute name="db-id" value="${gauge_id}"/>
                      <dc:context>
                        <dc:statement>
                          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
                        </dc:statement>
                        <dc:for-each>
                          <historical>
                            <dc:attribute name="name" value="${gauge_desc}"/>
                            <dc:attribute name="factory" value="gaugedischarge"/>
                            <dc:attribute name="from" value="${g_start}"/>
                            <dc:attribute name="to" value="${g_stop}"/>
                            <dc:attribute name="ids" value="${discharge_id}-${g_start}-${g_stop}"/>
                          </historical>
                        </dc:for-each>
                      </dc:context>
                    </gauge>
                  -->
                  </dc:comment>
                </dc:for-each>
              </dc:context>
            </discharge_table_gauge>
          </discharge_table_nn>

          <dc:call-macro name="basedata_2_fixations_wst"/>

          <dc:call-macro name="basedata_5_flood-protections"/>

          <!-- former waterlevels -->
          <dc:call-macro name="basedata_0"/>

          <dc:call-macro name="basedata_1_additionals"/>

          <!-- former flood-water-marks -->
          <dc:call-macro name="basedata_4_heightmarks-points"/>
            <computed_discharge_curve>
              <dc:call-macro name="mainvalues"/>
            </computed_discharge_curve>
        </dc:if>

        <dc:if test="dc:contains($artifact-outs, 'fix_wq_curve') and not (dc:contains($parameters, 'recommended'))">
          <discharge_table_nn>
            <discharge_table_gauge>
              <dc:context>
                <dc:statement>
                  SELECT id   AS gauge_id,
                         name AS gauge_name
                  FROM gauges WHERE river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                  <gauge name="{$gauge_name}"
                         db-id="{$gauge_id}"
                         factory="gaugedischarge"
                         from="{$g_start}"
                         to="{$g_stop}"
                         ids="{$gauge_name}"/>
                </dc:for-each>
              </dc:context>
            </discharge_table_gauge>
          </discharge_table_nn>
        </dc:if>

        <dc:if test="dc:contains($artifact-outs, 'floodmap') or dc:contains($artifact-outs, 'floodmap-hws')">
          <floodmap>
            <dc:choose>
              <dc:when test="dc:contains($parameters, 'recommended')">
                <dc:call-macro name="flood-map-recommended"/>
              </dc:when>
              <dc:when test="dc:contains($parameters, 'dem')">
                <dc:call-macro name="flood-map-dem"/>
              </dc:when>
              <dc:otherwise>
                <dc:call-macro name="flood-map-complete"/>
              </dc:otherwise>
            </dc:choose>
          </floodmap>

          <dc:if test="dc:contains($parameters, 'hws')">
            <hws>
              <dc:call-macro name="flood-map-hws-lines"/>
              <dc:call-macro name="flood-map-hws-points"/>
            </hws>
          </dc:if>

          <dc:macro name="flood-map-recommended">
            <dc:comment>
               FIXME: Following two macros look identical to me.
            </dc:comment>
            <kilometrage>
              <riveraxis factory="riveraxis" ids="{$river_id}"/>
            </kilometrage>
            <rastermap>
              <background factory="wmsbackground" ids="{$river_id}"/>
            </rastermap>
          </dc:macro>

          <dc:macro name="flood-map-dem">
            <dems>
              <dc:context>
                <dc:statement>
                  SELECT d.id    AS dem_id,
                         r.a     AS dem_lower,
                         r.b     AS dem_upper,
                         d.name  AS name,
                         d.projection || ' | ' || t.start_time || ' - ' || t.stop_time AS info
                         FROM dem d
                         JOIN ranges r ON d.range_id = r.id
                         LEFT JOIN time_intervals t ON d.time_interval_id = t.id
                         WHERE d.river_id = ${river_id}
                </dc:statement>
                <dc:for-each>
                    <dem factory="demfactory" ids="{$dem_id}" name="{$name}" info="{$info}"/>
                </dc:for-each>
              </dc:context>
            </dems>
          </dc:macro>

          <dc:macro name="filter_hws_ddg">
            <dc:macro name="durchlass_damm_graben">
              <dc:macro name="ddg_factory">
                <dc:for-each>
                  <hws factory="hwsfactory" name="{$hws_name}"/>
                </dc:for-each>
              </dc:macro>

              <dc:filter expr="$kws_kind=1">
                <dc:if test="dc:has-result()">
                  <Durchlass><dc:call-macro name="ddg_factory"/></Durchlass>
                </dc:if>
              </dc:filter>

              <dc:filter expr="$kws_kind=2">
                <dc:if test="dc:has-result()">
                  <Damm><dc:call-macro name="ddg_factory"/></Damm>
                </dc:if>
              </dc:filter>

              <dc:filter expr="$kws_kind=3">
                <dc:if test="dc:has-result()">
                  <Graben><dc:call-macro name="ddg_factory"/></Graben>
                </dc:if>
              </dc:filter>
            </dc:macro>

            <dc:filter expr="$hws_official=1">
              <dc:if test="dc:has-result()">
                <official>
                  <dc:call-macro name="durchlass_damm_graben"/>
                </official>
              </dc:if>
            </dc:filter>

            <dc:filter expr="$hws_official=0">
              <dc:if test="dc:has-result()">
                <inofficial>
                  <dc:call-macro name="durchlass_damm_graben"/>
                </inofficial>
              </dc:if>
            </dc:filter>
          </dc:macro>

          <dc:macro name="flood-map-hws-lines">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                       name     AS hws_name,
                       official AS hws_official,
                       kind_id  AS hws_kind
                FROM hws_lines
                WHERE river_id = ${river_id}
              </dc:statement>
              <dc:if test="dc:has-result()">
                <lines>
                  <dc:call-macro name="filter_hws_ddg"/>
                </lines>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-hws-points">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                       name     AS hws_name,
                       official AS hws_official,
                       kind_id  AS hws_kind
                FROM hws_points
                WHERE river_id = ${river_id}
              </dc:statement>
              <dc:if test="dc:has-result()">
                <points>
                  <dc:call-macro name="filter_hws_ddg"/>
                </points>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-km">
            <dc:context>
              <dc:statement>
                SELECT id FROM river_axes_km WHERE river_id = ${river_id}
              </dc:statement>
               <dc:for-each>
                  <kilometrage factory="wmskmfactory" ids="{$river_id}"/>
              </dc:for-each>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-qps">
            <dc:context>
              <dc:comment>Grab only the actual first</dc:comment>
              <dc:statement>
                SELECT DISTINCT
                cs.kind_id AS kind_id,
                ck.name AS kind_name
                FROM cross_section_tracks cs
                JOIN cross_section_track_kinds ck on cs.kind_id = ck.id
                WHERE river_id = ${river_id}
                AND kind_id=1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <dc:for-each>
                  <actual description="{$kind_name}"
                          factory="wmsqpsfactory"
                          ids="{$river_id};{$kind_name};{$kind_id}"/>
                </dc:for-each>
              </dc:if>
            </dc:context>
            <dc:context>
              <dc:comment>Now the other tracks</dc:comment>
              <dc:statement>
                SELECT DISTINCT
                cs.kind_id AS kind_id,
                ck.name AS kind_name,
                cs.name AS layer_name
                FROM cross_section_tracks cs
                JOIN cross_section_track_kinds ck on cs.kind_id = ck.id
                WHERE river_id = ${river_id}
                AND kind_id=0
              </dc:statement>
              <dc:if test="dc:has-result()">
                <other>
                  <dc:for-each>
                    <misc-qps description="{$layer_name}"
                              factory="wmsqpsfactory"
                              ids="{$river_id};{$layer_name};{$kind_id}"/>
                  </dc:for-each>
                </other>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-riveraxis">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                ax.kind_id AS kind_id,
                ak.name AS kind_name
                FROM river_axes ax
                JOIN axis_kinds ak on ax.kind_id = ak.id
                WHERE river_id = ${river_id}
                AND kind_id=1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <dc:for-each>
                  <actual description="{$kind_name}"
                          ids="{$river_id};{$kind_name};{$kind_id}"
                          factory="riveraxis"/>
                </dc:for-each>
              </dc:if>
            </dc:context>
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                ak.name AS kind_name,
                ax.kind_id AS kind_id,
                ax.name AS layer_name
                FROM river_axes ax
                JOIN axis_kinds ak on ax.kind_id = ak.id
                WHERE river_id = ${river_id}
                AND kind_id &lt;&gt; 1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <other>
                  <dc:for-each>
                    <misc-axis description="{$layer_name}"
                               ids="{$river_id};{$layer_name};{$kind_id}"
                               factory="riveraxis"/>
                  </dc:for-each>
                </other>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-hydr-boundaries-state">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                name
                FROM hydr_boundaries
                WHERE river_id = ${river_id}
                AND kind = 2
              </dc:statement>
              <dc:for-each>
                <line factory="wmshydrboundariesfactory" 
                      ids="{$river_id};{$name};2"
                      name="{$name}"/>
              </dc:for-each>
            </dc:context>
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                name
                FROM hydr_boundaries_poly
                WHERE river_id = ${river_id}
                AND kind = 2
              </dc:statement>
              <dc:for-each>
                <line factory="wmshydrboundariespolyfactory"
                      ids="{$river_id};{$name};2"
                      name="{$name}"/>
              </dc:for-each>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-hydr-boundaries-lines">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                name
                FROM hydr_boundaries
                WHERE river_id = ${river_id}
                AND kind = 1
              </dc:statement>
              <dc:comment> What about all other line kinds?</dc:comment>
              <dc:if test="dc:has-result()">
                <lines>
                  <dc:for-each>
                    <line factory="wmshydrboundariesfactory"
                          ids="{$river_id};{$name};1"
                          name="{$name}"/>
                  </dc:for-each>
                </lines>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-hydr-boundaries-poly">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                b.sectie AS sectie_id,
                sk.name AS sectie
                FROM hydr_boundaries_poly b
                JOIN sectie_kinds sk ON b.sectie = sk.id
                WHERE b.river_id = ${river_id}
                AND b.kind = 1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <sobek_areas>
                  <dc:for-each>
                    <boundary name="{$sectie}"
                              factory="wmshydrboundariespolyfactory"
                              ids="{$river_id};{$sectie};1;{$sectie_id};-1"/>
                  </dc:for-each>
                </sobek_areas>
              </dc:if>
            </dc:context>
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                b.sobek AS sobek_id,
                sk.name AS sobek
                FROM hydr_boundaries_poly b
                JOIN sobek_kinds sk ON b.sobek = sk.id
                WHERE b.river_id = ${river_id}
                AND b.kind = 1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <sobek_flooded>
                  <dc:for-each>
                    <boundary name="{$sobek}"
                              factory="wmshydrboundariespolyfactory"
                              ids="{$river_id};{$sobek};1;-1;{$sobek_id}"/>
                  </dc:for-each>
                </sobek_flooded>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-hydr-boundaries">
            <bfg_model>
              <areas>
                <dc:call-macro name="flood-map-hydr-boundaries-poly"/>
              </areas>
              <dc:call-macro name="flood-map-hydr-boundaries-lines"/>
            </bfg_model>
            <federal>
              <dc:call-macro name="flood-map-hydr-boundaries-state"/>
            </federal>
          </dc:macro>

          <dc:macro name="flood-map-floodplain">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                fp.kind_id AS kind_id,
                flk.name AS kind_name
                FROM floodplain fp
                JOIN floodplain_kinds flk on fp.kind_id = flk.id
                WHERE river_id = ${river_id}
                AND kind_id=1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <dc:for-each>
                  <floody factory="wmsfloodplainfactory"
                          description="{$kind_name}"
                          ids="{$river_id};{$kind_name};{$kind_id}"/>
                </dc:for-each>
              </dc:if>
            </dc:context>
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                flk.name AS kind_name,
                fp.kind_id AS kind_id,
                fp.name AS layer_name
                FROM floodplain fp
                JOIN floodplain_kinds flk on fp.kind_id = flk.id
                WHERE river_id = ${river_id}
                AND kind_id &lt;&gt; 1
              </dc:statement>
              <dc:if test="dc:has-result()">
                <other>
                  <dc:for-each>
                    <floody factory="wmsfloodplainfactory"
                            description="{$layer_name}"
                            ids="{$river_id};{$layer_name};{$kind_id}"/>
                  </dc:for-each>
                </other>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="hwslines_by_kind">
            <dc:comment>
              Call from a context where fed_name hws_kind hws_name and river_id is
              availble
            </dc:comment>

            <dc:macro name="hwslines_by_kind_factory">
              <dc:for-each>
                <hws factory="wmshwslinesfactory"
                     ids="{$river_id};{$hws_name}"
                     name="{$hws_name}"/>
              </dc:for-each>
            </dc:macro>

            <dc:filter expr="$hws_kind=1">
              <dc:if test="dc:has-result()">
                <Durchlass>
                  <dc:call-macro name="hwslines_by_kind_factory"/>
                </Durchlass>
              </dc:if>
            </dc:filter>

            <dc:filter expr="$hws_kind=2">
              <dc:if test="dc:has-result()">
                <Damm>
                  <dc:call-macro name="hwslines_by_kind_factory"/>
                </Damm>
              </dc:if>
            </dc:filter>

            <dc:filter expr="$hws_kind=3">
              <dc:if test="dc:has-result()">
                <Graben>
                  <dc:call-macro name="hwslines_by_kind_factory"/>
                </Graben>
              </dc:if>
            </dc:filter>
          </dc:macro>

          <dc:macro name="hwslines">
            <hws_lines>
              <official>
                <dc:context>
                  <dc:statement>
                    SELECT DISTINCT
                    fs.name AS fed_name,
                    fs.id AS fed_id
                    FROM hws_lines hws
                    JOIN fed_states fs ON hws.fed_state_id = fs.id
                    WHERE river_id = ${river_id}
                    AND hws.official=1
                  </dc:statement>
                  <dc:for-each>
                    <dc:context>
                      <dc:statement>
                        SELECT DISTINCT
                        name AS hws_name,
                        kind_id AS hws_kind
                        FROM hws_lines
                        WHERE river_id = ${river_id}
                        AND official=1
                        AND fed_state_id = ${fed_id} ORDER BY name
                      </dc:statement>
                      <fedstate description="{$fed_name}">
                        <dc:call-macro name="hwslines_by_kind"/>
                      </fedstate>
                    </dc:context>
                  </dc:for-each>
                </dc:context>
                <dc:context>
                  <dc:statement>
                    SELECT distinct
                    name AS hws_name,
                    kind_id AS hws_kind
                    FROM hws_lines
                    WHERE river_id = ${river_id}
                    AND official=1
                    AND fed_state_id IS NULL
                    ORDER BY name
                  </dc:statement>
                  <hws_fed_unknown>
                    <dc:call-macro name="hwslines_by_kind"/>
                  </hws_fed_unknown>
                </dc:context>
              </official>
              <inofficial>
                <dc:context>
                  <dc:statement>
                    SELECT DISTINCT
                    fs.name AS fed_name,
                    fs.id AS fed_id
                    FROM hws_lines hws
                    JOIN fed_states fs ON hws.fed_state_id = fs.id
                    WHERE river_id = ${river_id}
                    AND hws.official=0
                  </dc:statement>
                  <dc:for-each>
                    <dc:context>
                      <dc:statement>
                        SELECT DISTINCT
                        name AS hws_name,
                        kind_id AS hws_kind
                        FROM hws_lines
                        WHERE river_id = ${river_id}
                        AND official=0
                        AND fed_state_id = ${fed_id} ORDER BY name
                      </dc:statement>
                      <fedstate description="{$fed_name}">
                        <dc:call-macro name="hwslines_by_kind"/>
                      </fedstate>
                    </dc:context>
                  </dc:for-each>
                </dc:context>
                <dc:context>
                  <dc:statement>
                    SELECT distinct
                    name AS hws_name,
                    kind_id AS hws_kind
                    FROM hws_lines
                    WHERE river_id = ${river_id}
                    AND official=0
                    AND fed_state_id IS NULL ORDER BY name
                  </dc:statement>
                  <hws_fed_unknown>
                    <dc:call-macro name="hwslines_by_kind"/>
                  </hws_fed_unknown>
                </dc:context>
              </inofficial>
            </hws_lines>
          </dc:macro>

          <dc:macro name="hwspoints_by_kind">
            <dc:comment>
              Call from a context where fed_name hws_kind hws_name and river_id is
              availble
            </dc:comment>

            <dc:macro name="hwspoints_by_kind_factory">
              <dc:for-each>
                <hws factory="wmshwspointsfactory"
                     ids="{$river_id};{$hws_name}"
                     name="{$hws_name}"/>
              </dc:for-each>
            </dc:macro>

            <dc:filter expr="$hws_kind=1">
              <dc:if test="dc:has-result()">
                <Durchlass>
                  <dc:call-macro name="hwspoints_by_kind_factory"/>
                </Durchlass>
              </dc:if>
            </dc:filter>

            <dc:filter expr="$hws_kind=2">
              <dc:if test="dc:has-result()">
                <Damm>
                  <dc:call-macro name="hwspoints_by_kind_factory"/>
                </Damm>
              </dc:if>
            </dc:filter>

            <dc:filter expr="$hws_kind=3">
              <dc:if test="dc:has-result()">
                <Graben>
                  <dc:call-macro name="hwspoints_by_kind_factory"/>
                </Graben>
              </dc:if>
            </dc:filter>
          </dc:macro>

          <dc:macro name="hwspoints">
            <hws_points>
              <official>
                <dc:context>
                  <dc:statement>
                    SELECT DISTINCT
                    fs.name AS fed_name,
                    fs.id AS fed_id
                    FROM hws_points hws
                    JOIN fed_states fs ON hws.fed_state_id = fs.id
                    WHERE river_id = ${river_id}
                    AND hws.official=1
                  </dc:statement>
                  <dc:for-each>
                    <dc:context>
                      <dc:statement>
                        SELECT DISTINCT
                        name AS hws_name,
                        kind_id AS hws_kind
                        FROM hws_points
                        WHERE river_id = ${river_id}
                        AND official=1
                        AND fed_state_id = ${fed_id} ORDER BY name
                      </dc:statement>
                      <fedstate description="{$fed_name}">
                        <dc:call-macro name="hwspoints_by_kind"/>
                      </fedstate>
                    </dc:context>
                  </dc:for-each>
                </dc:context>
                <dc:context>
                  <dc:statement>
                    SELECT distinct
                    name AS hws_name,
                    kind_id AS hws_kind
                    FROM hws_points
                    WHERE river_id = ${river_id}
                    AND official=1
                    AND fed_state_id IS NULL
                    ORDER BY name
                  </dc:statement>
                  <hws_fed_unknown>
                    <dc:call-macro name="hwspoints_by_kind"/>
                  </hws_fed_unknown>
                </dc:context>
              </official>
              <inofficial>
                <dc:context>
                  <dc:statement>
                    SELECT DISTINCT
                    fs.name AS fed_name,
                    fs.id AS fed_id
                    FROM hws_points hws
                    JOIN fed_states fs ON hws.fed_state_id = fs.id
                    WHERE river_id = ${river_id}
                    AND hws.official=0
                  </dc:statement>
                  <dc:for-each>
                    <dc:context>
                      <dc:statement>
                        SELECT DISTINCT
                        name AS hws_name,
                        kind_id AS hws_kind
                        FROM hws_points
                        WHERE river_id = ${river_id}
                        AND official=0
                        AND fed_state_id = ${fed_id} ORDER BY name
                      </dc:statement>
                      <fedstate description="{$fed_name}">
                        <dc:call-macro name="hwspoints_by_kind"/>
                      </fedstate>
                    </dc:context>
                  </dc:for-each>
                </dc:context>
                <dc:context>
                  <dc:statement>
                    SELECT distinct
                    name AS hws_name,
                    kind_id AS hws_kind
                    FROM hws_points
                    WHERE river_id = ${river_id}
                    AND official=0
                    AND fed_state_id IS NULL ORDER BY name
                  </dc:statement>
                  <hws_fed_unknown>
                    <dc:call-macro name="hwspoints_by_kind"/>
                  </hws_fed_unknown>
                </dc:context>
              </inofficial>
            </hws_points>
          </dc:macro>

          <dc:macro name="flood-map-buildings">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                b.kind_id AS building_kind_id,
                bk.name AS building_kind
                FROM buildings b
                JOIN building_kinds bk ON b.kind_id = bk.id
                WHERE b.river_id = ${river_id}
                AND b.kind_id &lt;&gt; 0
              </dc:statement>
              <dc:for-each>
                <buildings description="{$building_kind}"
                           factory="wmsbuildingsfactory"
                           ids="{$river_id};{$building_kind};{$building_kind_id}"/>
              </dc:for-each>
            </dc:context>
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                b.kind_id AS building_kind_id,
                b.name AS building_name,
                bk.name AS building_kind
                FROM buildings b
                JOIN building_kinds bk ON b.kind_id = bk.id
                WHERE river_id = ${river_id}
                AND kind_id = 0 OR
                kind_id IS NULL
              </dc:statement>
              <dc:for-each>
                <dc:element name="${building_kind}">
                  <dc:for-each>
                    <buildings description="{$building_name}"
                               factory="wmsbuildingsfactory"
                               ids="{$river_id};{$building_name}"/>
                  </dc:for-each>
                </dc:element>
              </dc:for-each>
            </dc:context>
            <dc:context>
              <dc:statement>
                SELECT DISTINCT
                j.kind_id AS jetty_kind_id,
                jk.name AS jetty_kind
                FROM jetties j
                JOIN jetty_kinds jk ON j.kind_id = jk.id
                WHERE river_id = ${river_id}
              </dc:statement>
              <dc:if test="dc:has-result()">
                <jetties>
                  <dc:for-each>
                    <jetty description="{$jetty_kind}"
                           factory="wmsjettiesfactory"
                           ids="{$river_id};{$jetty_kind};{$jetty_kind_id}"/>
                  </dc:for-each>
                </jetties>
              </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-fixpoints">
            <dc:context>
              <dc:statement>
                SELECT name AS name
                FROM fixpoints WHERE river_id = ${river_id} GROUP BY name
              </dc:statement>
              <dc:for-each>
                <fixpoint factory="wmsfixpointsfactory"
                  ids="{$river_id};{$name}"
                  name="{$name}"/>
              </dc:for-each>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-gaugelocations">
            <dc:attribute name="factory" value="externalwmsfactory"/>
            <dc:attribute name="ids" value="http://www.pegelonline.wsv.de/webservices/gis/wms;Pegelpunkte;Pegelonline-Pegelpunkte"/>
          </dc:macro>

          <dc:macro name="flood-map-uesk">
            <dc:context>
              <dc:statement>
                SELECT DISTINCT 1 from floodmaps where river_id = ${river_id}
              </dc:statement>
              <dc:if test="dc:has-result()">
              <uesk>
                <calculations>
                  <dc:context>
                    <dc:statement>
                      SELECT DISTINCT 1 from floodmaps where river_id = ${river_id} 
                      AND (kind = 112 OR kind = 111)
                    </dc:statement>
                    <dc:if test="dc:has-result()">
                      <current>
                        <dc:context>
                          <dc:statement>
                            SELECT DISTINCT name AS name
                            FROM floodmaps
                            WHERE river_id = ${river_id} AND kind = 111
                          </dc:statement>
                          <dc:if test="dc:has-result()">
                            <bfg>
                              <dc:for-each>
                                <floodmaps factory="wmsfloodmapsfactory"
                                  ids="{$river_id};{$name}"
                                  name="{$name}"/>
                              </dc:for-each>
                            </bfg>
                          </dc:if>
                        </dc:context>
                        <dc:context>
                          <dc:statement>
                            SELECT DISTINCT name AS name
                            FROM floodmaps
                            WHERE river_id = ${river_id} AND kind = 112
                          </dc:statement>
                          <dc:if test="dc:has-result()">
                            <federal>
                              <dc:for-each>
                                <floodmaps factory="wmsfloodmapsfactory"
                                  ids="{$river_id};{$name}"
                                  name="{$name}"/>
                              </dc:for-each>
                            </federal>
                          </dc:if>
                        </dc:context>
                      </current>
                    </dc:if>
                  </dc:context>
                  <dc:context>
                    <dc:statement>
                      SELECT DISTINCT 1 from floodmaps where river_id = ${river_id}
                      AND (kind = 122 OR kind = 121)
                    </dc:statement>
                    <dc:if test="dc:has-result()">
                      <potential>
                        <dc:context>
                          <dc:statement>
                            SELECT DISTINCT name AS name
                            FROM floodmaps
                            WHERE river_id = ${river_id} AND kind = 121
                          </dc:statement>
                          <dc:if test="dc:has-result()">
                            <bfg>
                              <dc:for-each>
                                <floodmaps factory="wmsfloodmapsfactory"
                                  ids="{$river_id};{$name}"
                                  name="{$name}"/>
                              </dc:for-each>
                            </bfg>
                          </dc:if>
                        </dc:context>
                        <dc:context>
                          <dc:statement>
                            SELECT DISTINCT
                            name AS name
                            FROM floodmaps
                            WHERE river_id = ${river_id} AND kind = 122
                          </dc:statement>
                          <dc:if test="dc:has-result()">
                            <federal>
                              <dc:for-each>
                                <floodmaps factory="wmsfloodmapsfactory"
                                  ids="{$river_id};{$name}"
                                  name="{$name}"/>
                              </dc:for-each>
                            </federal>
                          </dc:if>
                        </dc:context>
                      </potential>
                    </dc:if>
                  </dc:context>
                </calculations>
                <dc:context>
                  <dc:statement>
                    SELECT DISTINCT
                    source AS source
                    FROM floodmaps
                    WHERE river_id = ${river_id} AND kind = 200
                  </dc:statement>
                  <dc:if test="dc:has-result()">
                    <measurements>
                      <dc:for-each>
                        <year name="{$source}">
                          <dc:context>
                            <dc:statement>
                              SELECT DISTINCT
                              name AS name
                              FROM floodmaps
                              WHERE river_id = ${river_id} AND kind = 200 AND source =
                              ${source}
                            </dc:statement>
                            <dc:for-each>
                              <floodmaps factory="wmsfloodmapsfactory"
                                ids="{$river_id};{$name}"
                                name="{$name}"/>
                            </dc:for-each>
                          </dc:context>
                        </year>
                      </dc:for-each>
                    </measurements>
                  </dc:if>
                </dc:context>
              </uesk>
            </dc:if>
            </dc:context>
          </dc:macro>

          <dc:macro name="flood-map-catchments">
            <dc:attribute name="factory" value="externalwmsfactory"/>
            <dc:attribute name="ids" value="http://geoportal.bafg.de/wmsproxy/INSPIRE/DrainageBasin;HY.PHYSICALWATERS.CATCHMENTS;Einzugsgebiet"/>
          </dc:macro>

          <dc:macro name="flood-map-routing">
            <qps>
              <dc:call-macro name="flood-map-qps"/>
            </qps>
            <dc:call-macro name="flood-map-fixpoints"/>
            <dc:call-macro name="flood-map-km"/>
            <axis>
              <dc:call-macro name="flood-map-riveraxis"/>
            </axis>
          </dc:macro>

          <dc:macro name="flood-map-complete">
            <buildings>
              <dc:call-macro name="flood-map-buildings"/>
            </buildings>
            <catchments>
              <dc:call-macro name="flood-map-catchments"/>
            </catchments>
            <dc:comment><!-- TODO: HW-Marken --></dc:comment>
            <hws>
              <dc:call-macro name="hwslines"/>
              <dc:call-macro name="hwspoints"/>
            </hws>
            <route_data>
              <dc:call-macro name="flood-map-routing"/>
            </route_data>
            <hydrboundaries>
              <dc:call-macro name="flood-map-floodplain"/>
              <dc:call-macro name="flood-map-hydr-boundaries"/>
            </hydrboundaries>
            <dc:call-macro name="flood-map-uesk"/>
            <gaugelocations>
              <dc:call-macro name="flood-map-gaugelocations"/>
            </gaugelocations>
            <background factory="wmsbackground" ids="{$river_id}"/>
          </dc:macro>

        </dc:if>

        <dc:if test="dc:contains($artifact-outs, 'minfo-heights')">
          <dc:call-macro name="minfo-heights"/>
          <dc:macro name="minfo-heights">
            <bedheights>
              <dc:call-macro name="bed-heights-single"/>
              <dc:call-macro name="bed-heights-epoch"/>
            </bedheights>
          </dc:macro>
        </dc:if>
        <dc:if test="dc:contains($artifact-outs, 'minfo-heights-epoch')">
          <bedheights>
            <dc:call-macro name="bed-heights-epoch"/>
          </bedheights>
        </dc:if>

        <dc:macro name="bed-heights-single">
          <single>
            <dc:context>
              <dc:statement>
                SELECT id          AS bedh_id,
                       year        AS bedh_year,
                       description AS bedh_descr
                FROM bed_height_single WHERE river_id = ${river_id}
              </dc:statement>
              <dc:for-each>
                <height factory="bedheight"
                        ids="bedheight-single-{$bedh_id}-{$bedh_year}"
                        description="{$bedh_descr}"/>
              </dc:for-each>
            </dc:context>
          </single>
        </dc:macro>

        <dc:macro name="bed-heights-epoch">
          <epoch>
            <dc:context>
              <dc:statement>
                SELECT id               AS bedh_id,
                       time_interval_id AS bedh_interval_id,
                       description      AS bedh_descr
                FROM bed_height_epoch WHERE river_id = ${river_id}
              </dc:statement>
              <dc:for-each>
                <height factory="bedheight"
                        ids="bedheight-epoch-{$bedh_id}-{$bedh_interval_id}"
                        description="{$bedh_descr}"/>
              </dc:for-each>
            </dc:context>
          </epoch>
        </dc:macro>

      </dc:for-each>
    </dc:context>
  </dc:macro>

  <dc:choose>
    <dc:comment>
      User specific part
      ------------------
    </dc:comment>
    <dc:when test="dc:contains($parameters, 'user-id')">

      <old_calculations>

        <dc:comment><!-- <dc:macro name="load-user">--></dc:comment>
        <dc:call-macro name="user-range">
          <dc:context connection="user">
            <dc:comment> Get the user and collection-id. </dc:comment>
            <dc:statement>
              SELECT u.id AS user_id, c.id AS collection_id, c.name AS collection_name
              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
            </dc:statement>

            <dc:macro name="range-filter">
              <dc:statement>
                SELECT m.id       AS a_id,
                       m.state    AS a_state,
                       m.gid      AS a_gid,
                       m.creation AS a_creation,
                       COALESCE(ld_mode, '')      AS ld_m,
                       COALESCE(ld_locations, '') AS ld_l,
                       COALESCE(ld_from, '')      AS ld_f,
                       COALESCE(ld_to, '')        AS ld_t
                FROM   master_artifacts_range m
                WHERE  m.collection_id = ${collection_id} AND m.gid &lt;&gt; CAST(${artifact-id} AS uuid)
                AND EXISTS (
                    SELECT id FROM artifact_data ad WHERE ad.artifact_id = m.id AND k = 'river' AND v = ${river})
              </dc:statement>
              <dc:for-each>
                <dc:variable name="from" type="number" expr="dc:fromValue($ld_m, $ld_l, $ld_f)"/>
                <dc:variable name="to" type="number" expr="dc:toValue($ld_m, $ld_l, $ld_t)"/>
                <dc:if test="($from &gt;= $fromkm and $from &lt;= $tokm) or ($to &lt;= $tokm and $to &gt;= $fromkm) or ($from &lt;= $fromkm and $to &gt;= $tokm)">
                  <dc:macro-body/>
                </dc:if>
              </dc:for-each>
            </dc:macro>
     
            <!-- OFFICIAL LINES -->
            <dc:if test="dc:contains($artifact-outs, 'longitudinal_section')">
              <dc:comment comment=".wst -------------------------------"/>
              <officiallines>
                <dc:for-each>
                  <dc:context>
                    <dc:statement>
                      SELECT m.id AS a_id,
                             m.state AS a_state,
                             m.gid AS a_gid,
                             m.creation AS a_creation,
                             ardg.v AS gaugy,
                             arv.v AS wqsingle
                      FROM   master_artifacts m,
                             artifact_data ardg,
                             artifact_data arv
                      WHERE  m.collection_id = ${collection_id}
                        AND m.gid = CAST(${artifact-id} AS uuid)
                        AND ardg.artifact_id = m.id
                        AND ardg.k = 'ld_gaugename'
                        AND arv.artifact_id = m.id
                        AND arv.k = 'wq_single'
                        AND EXISTS (
                          SELECT id
                          FROM artifact_data ad
                          WHERE ad.artifact_id = m.id
                            AND k = 'river'
                            AND v = ${river})
                    </dc:statement>
                    <dc:for-each>
                      <dc:context connection="system">
                        <dc:statement>
                          SELECT ol.wst_id AS wstid, ol.wst_column_pos AS wstcolpos, ol.name AS olname, ol.value AS oval
                          FROM official_q_values ol
                          WHERE ol.value = CAST(${wqsingle} AS NUMERIC(10,2)) AND ol.gauge_name = ${gaugy}
                        </dc:statement>
                        <dc:for-each>
                          <dc:element name="${olname}">
                            <dc:attribute name="name" value="${olname}"/>
                            <dc:attribute name="ids" value="additionals-wstv-${wstcolpos}-${wstid}"/>
                            <dc:attribute name="factory" value="staticwkms"/>
                          </dc:element>
                        </dc:for-each>
                      </dc:context>
                    </dc:for-each>
                  </dc:context>
                </dc:for-each>
              </officiallines>
            </dc:if>
            <!-- END OFFICIAL LINES -->

            <dc:comment>
              SHOW W-DIFFERENCES
            </dc:comment>

            <dc:macro name="differences">
              <differences>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid AS aid, f.id AS fid, f.name AS facet_name, f.num AS facet_num, f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE f.name = 'w_differences' and f.out_id = o.id and o.artifact_id = ${a_id} and a.id = ${a_id}
                        </dc:statement>
                        <dc:for-each>
                          <dc:element name="${facet_name}">
                            <dc:attribute name="description" value="${facet_description}"/>
                            <dc:attribute name="factory" value="winfo"/>
                            <dc:attribute name="artifact-id" value="${aid}"/>
                            <dc:attribute name="ids" value="${aid}"/>
                            <dc:attribute name="out" value="w_differences"/>
                          </dc:element>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </differences>
            </dc:macro>

            <dc:comment>
              SHOW REFERENCE CURVE
            </dc:comment>

            <dc:macro name="reference-curves">
              <reference_curves>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="user-range">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid AS aid, f.id AS fid, f.name AS facet_name, f.num AS facet_num, f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE f.name = 'reference_curve' and f.out_id = o.id and o.artifact_id = ${a_id} and a.id = ${a_id}
                        </dc:statement>
                        <dc:for-each>
                          <dc:element name="${facet_name}">
                            <dc:attribute name="description" value="${facet_description}"/>
                            <dc:attribute name="factory" value="winfo"/>
                            <dc:attribute name="artifact-id" value="${aid}"/>
                            <dc:attribute name="ids" value="${aid}"/>
                            <dc:attribute name="out" value="reference_curve"/>
                          </dc:element>
                        </dc:for-each>
                      </dc:context>
                     </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </reference_curves>
            </dc:macro>

            <dc:comment>
              SHOW COMPUTED DISCHARGE CURVES
            </dc:comment>

            <dc:macro name="computed-discharge-curve">
              <computed_discharge_curves>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid AS aid, f.id AS fid, f.name AS facet_name, f.num AS facet_num, f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE f.name = 'computed_discharge_curve.q' and f.out_id = o.id and o.artifact_id = ${a_id} and a.id = ${a_id}
                        </dc:statement>
                        <dc:for-each>
                          <dc:element name="${facet_name}">
                            <dc:attribute name="description" value="${facet_description}"/>
                            <dc:attribute name="factory" value="winfo"/>
                            <dc:attribute name="artifact-id" value="${aid}"/>
                            <dc:attribute name="ids" value="${aid}"/>
                            <dc:attribute name="out" value="computed_discharge_curve"/>
                          </dc:element>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </computed_discharge_curves>
            </dc:macro>

            <dc:comment>
              CROSS SECTION
            </dc:comment>

            <dc:macro name="waterlevels">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'cross_section'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:statement>
                              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
                            </dc:statement>
                            <longitudinal_section_columns description="{$river} {$a_creation}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="winfo"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="cross_section"/>
                                </dc:element>
                              </dc:for-each>
                            </longitudinal_section_columns>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:macro name="longitudinal">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'longitudinal_section'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:statement>
                              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
                            </dc:statement>
                            <longitudinal_section_columns description="{$river} {$a_creation}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="winfo"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="longitudinal_section"/>
                                </dc:element>
                              </dc:for-each>
                            </longitudinal_section_columns>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:macro name="longitudinal-section">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'fix_longitudinal_section_curve'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:comment><!-- average und deviation ls_0 . ls_1 ...--></dc:comment>
                            <dc:statement>
                              SELECT name AS facet_name, num AS facet_num, description AS facet_description
                              FROM facets
                              WHERE out_id = ${out_id} AND ( 
                                  name LIKE 'fix_deviation_ls%'       OR 
                                  name LIKE 'fix_sector_average_ls%'  OR 
                                  name LIKE 'fix_analysis_events_ls%' OR 
                                  name LIKE 'fix_reference_events_ls%' )
                              ORDER BY num ASC, name DESC
                            </dc:statement>
                            <waterlevels description="{$river} {$a_creation} {$collection_name}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="fixanalysis"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="fix_longitudinal_section_curve"/>
                                </dc:element>
                              </dc:for-each>
                            </waterlevels>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:macro name="delta-wt">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'fix_deltawt_curve'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:statement>
                              SELECT name AS facet_name, num AS facet_num, description AS facet_description
                              FROM facets
                              WHERE out_id = ${out_id} and (
                                name LIKE 'fix_sector_average_dwt%' OR
                                name LIKE 'fix_deviation_dwt%'      OR
                                name = 'fix_analysis_events_dwt'    OR
                                name = 'fix_reference_events_dwt'   OR
                                name = 'fix_analysis_periods_dwt' )
                              ORDER BY num ASC, name DESC
                            </dc:statement>
                            <waterlevels description="{$river} {$a_creation} {$collection_name}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="fixanalysis"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="fix_deltawt_curve"/>
                                </dc:element>
                              </dc:for-each>
                            </waterlevels>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:macro name="fix-derivate-curve">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'fix_derivate_curve'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:statement>
                              SELECT name AS facet_name, num AS facet_num, description AS facet_description
                              FROM facets
                              WHERE out_id = ${out_id} and name = 'fix_derivate_curve'
                              ORDER BY num ASC, name DESC
                            </dc:statement>
                            <waterlevels description="{$river} {$a_creation} {$collection_name}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="fixanalysis"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="fix_derivate_curve"/>
                                </dc:element>
                              </dc:for-each>
                            </waterlevels>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:macro name="fix-wq-curve">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'fix_wq_curve'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:statement>
                              SELECT name AS facet_name, num AS facet_num, description AS facet_description
                              FROM facets
                              WHERE out_id = ${out_id} and (
                                name LIKE 'fix_sector_average_wq%'  OR
                                name = 'fix_wq_curve'               OR
                                name LIKE 'fix_analysis_events_wq%' OR
                                name LIKE 'fix_reference_events_wq%' )
                              ORDER BY num ASC, name DESC
                            </dc:statement>
                            <waterlevels description="{$river} {$a_creation} {$collection_name}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="fixanalysis"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="fix_wq_curve"/>
                                </dc:element>
                              </dc:for-each>
                            </waterlevels>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:macro name="duration-curve">
              <computed_discharge_curves>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid         AS aid,
                                 f.id          AS fid,
                                 f.name        AS facet_name,
                                 f.num         AS facet_num,
                                 f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE
                              (f.name = 'duration_curve.q' OR f.name = 'duration_curve.w') AND 
                              f.out_id = o.id         AND
                              o.artifact_id = ${a_id} AND
                              a.id = ${a_id}
                        </dc:statement>
                        <dc:for-each>
                          <dc:element name="${facet_name}">
                            <dc:attribute name="description" value="${facet_description}"/>
                            <dc:attribute name="factory" value="winfo"/>
                            <dc:attribute name="artifact-id" value="${aid}"/>
                            <dc:attribute name="ids" value="${aid}"/>
                            <dc:attribute name="out" value="duration_curve"/>
                          </dc:element>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </computed_discharge_curves>
            </dc:macro>

            <dc:comment>
               WATERLEVELS - ONLY SHOW Ws
            </dc:comment>

            <dc:comment><!-- TODO doesnt work nicely for fix/wq-diags. --></dc:comment>

            <dc:macro name="waterlevels-fix">
              <waterlevels>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT id AS out_id
                          FROM outs
                          WHERE artifact_id = ${a_id} AND name = 'longitudinal_section'
                        </dc:statement>
                        <dc:for-each>
                          <dc:context>
                            <dc:statement>
                              SELECT name AS facet_name, num AS facet_num, description AS facet_description
                              FROM facets
                              WHERE out_id = ${out_id} and name = 'longitudinal_section.w'
                              ORDER BY num ASC, name DESC
                            </dc:statement>
                            <waterlevels description="{$river} {$a_creation} {$collection_name}">
                              <dc:for-each>
                                <dc:element name="${facet_name}">
                                  <dc:attribute name="description" value="${facet_description}"/>
                                  <dc:attribute name="ids" value="${facet_num}"/>
                                  <dc:attribute name="factory" value="winfo"/>
                                  <dc:attribute name="artifact-id" value="${a_gid}"/>
                                  <dc:attribute name="out" value="longitudinal_section"/>
                                </dc:element>
                              </dc:for-each>
                            </waterlevels>
                          </dc:context>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </waterlevels>
            </dc:macro>

            <dc:comment>
              SHOW FLOODMAPS
            </dc:comment>

            <dc:macro name="flood-map">
              <floodmap>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid         AS aid,
                                 f.id          AS fid,
                                 f.name        AS facet_name,
                                 f.num         AS facet_num,
                                 f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE f.name = 'floodmap.wsplgen' AND
                                f.out_id = o.id             AND
                                o.artifact_id = ${a_id}     AND
                                a.id = ${a_id}
                        </dc:statement>
                        <dc:for-each>
                          <dc:element name="${facet_name}">
                            <dc:attribute name="description" value="${facet_description}"/>
                            <dc:attribute name="factory" value="winfo"/>
                            <dc:attribute name="artifact-id" value="${aid}"/>
                            <dc:attribute name="ids" value="${aid}"/>
                            <dc:attribute name="out" value="floodmap"/>
                          </dc:element>
                        </dc:for-each>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </floodmap>
            </dc:macro>

            <dc:comment>
              MINFO bedheight difference
            </dc:comment>

            <dc:macro name="bed-difference">
              <fix_longitudinal_section_curve>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid         AS aid,
                                 f.id          AS fid,
                                 f.name        AS facet_name,
                                 f.num         AS facet_num,
                                 f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE (
                              f.name = 'fix_sector_average_ls_0' OR
                              f.name = 'fix_sector_average_ls_1' OR
                              f.name = 'fix_sector_average_ls_2' OR
                              f.name = 'fix_sector_average_ls_3' OR
                              f.name = 'fix_analysis_events_ls'  OR
                              f.name = 'fix_reference_events_ls'
                              ) AND f.out_id = o.id AND o.artifact_id = ${a_id} AND a.id = ${a_id}
                        </dc:statement>
                        <fix_longitudinal_section_curve description="{$river} {$a_creation} {$collection_name}">
                          <dc:for-each>
                            <dc:element name="${facet_name}">
                              <dc:attribute name="description" value="${facet_description}"/>
                              <dc:attribute name="factory" value="fixanalysis"/>
                              <dc:attribute name="artifact-id" value="${aid}"/>
                              <dc:attribute name="ids" value="${facet_num}"/>
                              <dc:attribute name="out" value="fix_longitudinal_section_curve"/>
                            </dc:element>
                          </dc:for-each>
                        </fix_longitudinal_section_curve>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </fix_longitudinal_section_curve>
            </dc:macro>

            <dc:comment>
              MINFO bedheight middle
            </dc:comment>

            <dc:macro name="bed-height">
              <fix_vollmer_wq_curve>
                <dc:for-each>
                  <dc:context>
                    <dc:call-macro name="range-filter">
                      <dc:context>
                        <dc:statement>
                          SELECT a.gid         AS aid,
                                 f.id          AS fid,
                                 f.name        AS facet_name,
                                 f.num         AS facet_num,
                                 f.description AS facet_description
                          FROM outs AS o, facets AS f, artifacts AS a
                          WHERE (
                              f.name = 'longitudinal_section.w' OR 
                              f.name = 'heightmarks_points'
                          ) AND f.out_id = o.id AND o.artifact_id = ${a_id} AND a.id = ${a_id}
                        </dc:statement>
                        <fix_vollmer_wq_curve description="{$river} {$a_creation} {$collection_name}">
                          <dc:for-each>
                            <dc:element name="${facet_name}">
                              <dc:attribute name="description" value="${facet_description}"/>
                              <dc:attribute name="factory" value="fixanalysis"/>
                              <dc:attribute name="artifact-id" value="${aid}"/>
                              <dc:attribute name="ids" value="${facet_num}"/>
                              <dc:attribute name="out" value="longitudinal_section"/>
                            </dc:element>
                          </dc:for-each>
                        </fix_vollmer_wq_curve>
                      </dc:context>
                    </dc:call-macro>
                  </dc:context>
                </dc:for-each>
              </fix_vollmer_wq_curve>
            </dc:macro>

            <dc:macro name="floodmap-hws-user">
              <dc:context>
                <dc:statement>
                  SELECT id AS out_id
                  FROM outs
                  WHERE artifact_id = ${a_id} AND name = 'floodmap'
                </dc:statement>
                <dc:for-each>
                  <dc:context>
                    <dc:statement>
                      SELECT name        AS facet_name,
                             num         AS facet_num,
                             description AS facet_description
                      FROM facets
                      WHERE out_id = ${out_id} AND name = 'floodmap.usershape'
                      ORDER BY num ASC, name DESC
                    </dc:statement>
                    <own-hws>
                      <dc:for-each>
                        <dc:element name="${facet_name}">
                          <dc:attribute name="description" value="${facet_description}"/>
                          <dc:attribute name="ids" value="${facet_num}"/>
                          <dc:attribute name="factory" value="winfo"/>
                          <dc:attribute name="artifact-id" value="${a_gid}"/>
                          <dc:attribute name="out" value="floodmap"/>
                        </dc:element>
                      </dc:for-each>
                    </own-hws>
                  </dc:context>
                </dc:for-each>
              </dc:context>
            </dc:macro>

            <dc:if test="dc:contains($artifact-outs, 'longitudinal_section') or (dc:contains($artifact-outs, 'discharge_longitudinal_section') or (dc:contains($artifact-outs, 'w_differences')))">
              <dc:call-macro name="longitudinal"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_deltawt_curve')">
              <dc:call-macro name="delta-wt"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'longitudinal_section') or (dc:contains($artifact-outs, 'w_differences') or (dc:contains($artifact-outs, 'discharge_longitudinal_section')))">
              <dc:call-macro name="differences"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'reference_curve')">
              <dc:call-macro name="reference-curves"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'computed_discharge_curve')">
              <dc:call-macro name="computed-discharge-curve"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'cross_section')">
              <dc:call-macro name="waterlevels"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_longitudinal_section_curve')">
              <dc:call-macro name="longitudinal-section"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_derivate_curve')">
              <dc:call-macro name="fix-derivate-curve"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'fix_wq_curve')">
              <dc:call-macro name="fix-wq-curve"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'duration_curve')">
              <dc:call-macro name="duration-curve"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'waterlevels') or (dc:contains($artifact-outs, 'fix_wq_curve'))">
              <dc:call-macro name="waterlevels-fix"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'floodmap') or dc:contains($artifact-outs, 'map')">
              <dc:call-macro name="flood-map"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'bed_difference_year') or dc:contains($artifact-outs, 'bed_difference_height_year')">
              <dc:call-macro name="bed-difference"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'bedheight_middle')">
              <dc:call-macro name="bed-height"/>
            </dc:if>
            <dc:if test="dc:contains($artifact-outs, 'floodmap-hws')">
              <dc:call-macro name="floodmap-hws-user"/>
            </dc:if>
          </dc:context>
        </dc:call-macro>

      </old_calculations>

      <dc:if test="dc:contains($parameters,'load-system')">
        <dc:comment>
          Include System specific part when 'load-system' is in parameters.
          -----------------------------------------------------------------
        </dc:comment>
        <dc:call-macro name="load-system"/>
      </dc:if>
    </dc:when>

    <dc:otherwise>
      <dc:comment>
        Include System specific part only if no user ID is given.
        ---------------------------------------------------------
      </dc:comment>
      <dc:call-macro name="load-system"/>
    </dc:otherwise>
  </dc:choose>

</datacage>
</dc:template>

http://dive4elements.wald.intevation.org