changeset 1002:b1eea43ba133

Second attempt to apply redirect link patch. gnv/trunk@1206 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 13 Jun 2010 16:28:37 +0000
parents ebc3d018af6a
children cf5ab5eaeb46
files gnv/ChangeLog gnv/src/main/java/de/intevation/gnv/action/DescribeUIAction.java gnv/src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java gnv/src/main/webapp/WEB-INF/config/struts-config.xml gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl gnv/src/main/webapp/WEB-INF/jsp/index.jsp gnv/src/main/webapp/styles/gnv.css
diffstat 9 files changed, 173 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/gnv/ChangeLog	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/ChangeLog	Sun Jun 13 16:28:37 2010 +0000
@@ -1,3 +1,34 @@
+2010-06-10	Sascha L. Teichmann	<sascha.teichmann@intevation.de>
+
+	Issue 219
+
+	* src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java:
+	  Broke over long line.
+
+	* src/main/java/de/intevation/gnv/action/DescribeUIAction.java: Fed
+	  more parameters into XSL transformation to allow better form rendering.
+
+	* src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java:
+	  use explicit boolean to indicate that we are still able to advance.
+
+	* src/main/java/de/intevation/gnv/util/XSLTransformer.java: Removed
+	  stupid initial size of hash map.
+
+	* src/main/webapp/styles/gnv.css: Added style to render direct
+	  links to look like buttons.
+
+	* src/main/webapp/WEB-INF/config/struts-config.xml: Added a few
+	  forwards. The log is full of unresolvable forwards. TODO: This
+	  needs to be checked and is not a problem introduced by direct
+	  link feature.
+
+	* src/main/webapp/WEB-INF/config/templates/describe-ui.xsl: Render
+	  the direct links if there are less than six item in a single
+	  select list.
+
+	* src/main/webapp/WEB-INF/jsp/index.jsp: Cleanup a bit. Removed
+	  form rendering here and moved it into the dynamic XSL transformation.
+
 2010-06-11  Tim Englich  <tim.englich@intevation.de>
 
 	Issue278
--- a/gnv/src/main/java/de/intevation/gnv/action/DescribeUIAction.java	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/action/DescribeUIAction.java	Sun Jun 13 16:28:37 2010 +0000
@@ -25,6 +25,8 @@
 import de.intevation.gnv.util.XMLUtils;
 import de.intevation.gnv.util.XSLTransformer;
 
+import org.apache.log4j.Logger;
+
 /**
  * This controller is called to fetch the current artifact description using the
  * describe operation. The describe document is used to feed an XSL transformer
@@ -36,6 +38,9 @@
  */
 public class DescribeUIAction extends ArtifactDatabaseActionBase {
 
+    private static Logger log = Logger
+            .getLogger(DescribeUIAction.class);
+
     public static final String XPATH_DYNAMIC_UI = "art:dynamic";
     public static final String XPATH_STATIC_UI  = "art:static";
 
@@ -58,6 +63,11 @@
         super();
     }
 
+    public static String getInputException(HttpServletRequest request) {
+        Object msg = request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_INPUT_ID);
+        return msg != null ? msg.toString() : "";
+    }
+
 
     @Override
     public ActionForward execute(
@@ -104,8 +114,10 @@
             if (currentUI != null) {
                 ResourceBundle res = ResourceBundle.getBundle(
                     "applicationMessages", locale);
-                String editText           = res.getString(
+                String editText = res.getString(
                     "gnviewer.history.back.button");
+                String submitButton = res.getString(
+                    "gnviewer.select.button.src");
                 String exampleLinestring = res.getString(
                     "gnviewer.example.linestring");
                 String examplePolygon = res.getString(
@@ -113,12 +125,37 @@
 
                 XSLTransformer transformer = new XSLTransformer();
 
+                String nextUrl = response.encodeURL(
+                    mapping.findForward("next").getPath());
+
                 String url = response.encodeURL(
                     mapping.findForward("back").getPath());
+
+
+                transformer.addParameter(
+                    "uuid",
+                    sm.getCurrentArtifact().getDescription());
+
+                transformer.addParameter(
+                    "exception",
+                    getInputException(request));
+
+
+                Object ft = request.getAttribute("furthertargets");
+
+                transformer.addParameter("further",
+                    ft == null || (ft instanceof Boolean && ((Boolean)ft).booleanValue())
+                    ? "true"
+                    : "false");
+
+                transformer.addParameter("next-url", nextUrl);
                 transformer.addParameter("back-url", url);
                 transformer.addParameter("edit", editText);
                 transformer.addParameter("example-polygon", examplePolygon);
                 transformer.addParameter(
+                    "gnviewer-select-button-src",
+                    submitButton);
+                transformer.addParameter(
                     "example-linestring",
                     exampleLinestring);
 
@@ -135,10 +172,9 @@
                 );
 
                 String ui = transformer.transform(
-                    dynamicNode,
+                    dynamicNode.getParentNode(),
                     "UTF-8",
-                    request.getRealPath(XSL_SHEET_DYNAMIC
-                ));
+                    request.getRealPath(XSL_SHEET_DYNAMIC));
 
                 if (ui != null && ui.length() > 1)
                     request.setAttribute("ui", ui);
--- a/gnv/src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java	Sun Jun 13 16:28:37 2010 +0000
@@ -98,7 +98,7 @@
                         );
                     }
                     catch (ArtifactDatabaseInputException e) {
-                        log.error(e, e);
+                        log.debug(e, e);
                         request.setAttribute(
                             CommunicationKeys.REQUEST_EXCEPTION_INPUT_ID,
                             e.getMessage());
@@ -113,7 +113,7 @@
                     Map tmpOuts = ad.getOutputModes();
                     request.setAttribute(
                         "furthertargets",
-                        tmpOuts == null || tmpOuts.isEmpty()
+                        Boolean.valueOf(tmpOuts == null || tmpOuts.isEmpty())
                     );
                 } else {
                     try{
@@ -139,7 +139,7 @@
                             e.getMessage());
                     }
 
-                    request.setAttribute("furthertargets", false);
+                    request.setAttribute("furthertargets", Boolean.FALSE);
                 }
             }else{
                 log.warn("SessionTimeout has occured");
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java	Sun Jun 13 16:28:37 2010 +0000
@@ -25,9 +25,11 @@
  */
 public interface ArtifactDatabaseClient {
 
-    public final static String ARTIFACTDATABASE_COUNT_ID = "de.intevation.gnv.artifactdatabase.client.ArtifactDatabase.count";
+    public final static String ARTIFACTDATABASE_COUNT_ID =
+        "de.intevation.gnv.artifactdatabase.client.ArtifactDatabase.count";
 
-    public final static String ARTIFACTDATABASE_URL_ID = "de.intevation.gnv.artifactdatabase.client.ArtifactDatabase.url";
+    public final static String ARTIFACTDATABASE_URL_ID =
+        "de.intevation.gnv.artifactdatabase.client.ArtifactDatabase.url";
 
     /**
      * Return the Artifactfactories which can be resolved.
--- a/gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java	Sun Jun 13 16:28:37 2010 +0000
@@ -98,7 +98,7 @@
      */
     public void addParameter(String name, String value) {
         if (params == null) {
-            params = new HashMap<String, String>(3);
+            params = new HashMap<String, String>();
         }
 
         params.put(name, value);
--- a/gnv/src/main/webapp/WEB-INF/config/struts-config.xml	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/webapp/WEB-INF/config/struts-config.xml	Sun Jun 13 16:28:37 2010 +0000
@@ -91,6 +91,9 @@
            <forward
                name="back"
                path="/gnv/back.do"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="selectfis"
                 path="/gnv/selectFis.do"/>
@@ -106,6 +109,9 @@
                 name="back"
                 path="/gnv/back.do"/>
             <forward
+                name="next"
+                path="/gnv/next.do"/>
+            <forward
                 name="selectfis"
                 path="/gnv/selectFis.do"/>
         </action>
@@ -124,6 +130,9 @@
            <forward
                 name="success"
                 path="/WEB-INF/jsp/mainlayout.jsp"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
@@ -149,6 +158,9 @@
             <forward
                 name="success"
                 path="/WEB-INF/jsp/wmslayout.jsp"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
@@ -180,6 +192,9 @@
             <forward
                 name="success"
                 path="/WEB-INF/jsp/mainlayout.jsp"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
@@ -194,6 +209,9 @@
             <forward
                 name="success"
                 path="/WEB-INF/jsp/mainlayout.jsp"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
@@ -208,6 +226,9 @@
             <forward
                 name="success"
                 path="/WEB-INF/jsp/mainlayout.jsp"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
@@ -219,6 +240,9 @@
                 type="de.intevation.gnv.action.ShowStatisticAction"
                 scope="request"
                 validate="false">
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
@@ -237,6 +261,9 @@
                 name="back"
                 path="/gnv/back.do"/>
             <forward
+                name="next"
+                path="/gnv/next.do"/>
+            <forward
                 name="selectfis"
                 path="/gnv/selectFis.do"/>
             <forward
@@ -250,6 +277,9 @@
             <forward
                 name="success"
                 path="/WEB-INF/jsp/mainlayout.jsp"/>
+           <forward
+               name="next"
+               path="/gnv/next.do"/>
             <forward
                 name="back"
                 path="/gnv/back.do"/>
--- a/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl	Sun Jun 13 16:28:37 2010 +0000
@@ -11,21 +11,70 @@
 
     <xsl:param name="example-linestring"/>
     <xsl:param name="example-polygon"/>
+    <xsl:param name="uuid"/>
+    <xsl:param name="next-url">/gnv/next.do</xsl:param>
+    <xsl:param name="further">false</xsl:param>
+    <xsl:param name="exception"/>
+    <xsl:param name="gnviewer-select-button-src">./images/auswaehlen.png</xsl:param>
+
+    <xsl:template match="art:ui">
+        <xsl:if test="$further = 'true'">
+            <div id="timeseriesfilter"> 
+                <form id="fisSelectionForm" 
+                      onsubmit="displayOverlay()" 
+                      action="{$next-url}" 
+                      method="post">
+                <fieldset>
+                    <xsl:if test="$exception != ''">
+                        <div class="inputException"><xsl:value-of select="$exception"/></div>
+                    </xsl:if>
+                    <input type="hidden" name="artifact-uuid" value="{$uuid}"/>
+                    <xsl:apply-templates select="art:dynamic"/>
+                    <xsl:variable name="item-count" select="count(art:dynamic//xform:select1//xform:item)"/>
+                    <xsl:if test="$item-count = 0 or $item-count &gt; 5">
+                        <br/> 
+                        <input style="margin-top: 5px;" type="image" src="{$gnviewer-select-button-src}"/>
+                    </xsl:if>
+                </fieldset>
+                </form>
+            </div>
+        </xsl:if>
+    </xsl:template>
 
     <!-- single select -->
-    <xsl:template match="xform:select1">
+    <xsl:template match="xform:select1" >
         <xsl:variable name="selectName" select="@ref"/>
+        <xsl:variable name="items" select="count(.//xform:item)"/>
         <legend><xsl:value-of select="xform:label"/></legend>
-        <select name="{$selectName}">
-            <xsl:apply-templates />
-        </select>
+        <xsl:choose>
+            <xsl:when test="$items &lt; 6">
+                <xsl:apply-templates mode="direct-link"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <select name="{$selectName}">
+                    <xsl:apply-templates />
+                </select>
+            </xsl:otherwise>
+        </xsl:choose>
     </xsl:template>
 
+    <xsl:template match="text()" mode="direct-link"/>
+
+    <!-- options for select: direct-link -->
+    <xsl:template match="xform:item" mode="direct-link">
+        <xsl:variable name="optionValue" select="xform:value"/>
+        <xsl:variable name="selectName" select="ancestor::xform:select1/@ref"/>
+        <a class="linkButton"
+            onclick="displayOverlay()"
+            href="{$next-url}?{$selectName}={$optionValue}"><xsl:value-of select="xform:label"/></a>
+        <br/>
+        <br/>
+    </xsl:template>
 
     <!-- multi select -->
     <xsl:template match="xform:select">
         <xsl:variable name="selectName" select="@ref"/>
-        <xsl:variable name="items" select="count(//xform:item)"/>
+        <xsl:variable name="items" select="count(.//xform:item)"/>
         <legend>
             <xsl:value-of select="xform:label"/>
         </legend>
--- a/gnv/src/main/webapp/WEB-INF/jsp/index.jsp	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/webapp/WEB-INF/jsp/index.jsp	Sun Jun 13 16:28:37 2010 +0000
@@ -1,13 +1,10 @@
 <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
 <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %>
-<%@page import="java.util.Collection"%>
 <%@page import="de.intevation.gnv.artifactdatabase.objects.ArtifactObject"%>
 <%@page import="de.intevation.gnv.action.CommunicationKeys"%>
 <%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>
 <%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%>
-<%@page import="java.util.Iterator"%>
 <%  
-    String exception       = (String)request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_INPUT_ID);
     SessionModel sm        = SessionModelFactory.getInstance().getSessionModel(request);
     Object ui              = request.getAttribute("ui");
     Object staticui        = request.getAttribute("staticui");
@@ -15,7 +12,6 @@
     Object statistic       = request.getAttribute("statistic");
     Object histogram       = request.getAttribute("histogram");
     Object wms_published   = request.getAttribute("wms_published");
-    boolean furthertargets = true;
 
     if (chart == null && statistic == null && histogram == null && wms_published == null) {
         boolean supportChart = sm.getOutputMode("chart") != null;
@@ -24,10 +20,6 @@
         }
     }
 
-    Object furthertargetsObject = request.getAttribute("furthertargets");
-    if (furthertargetsObject != null){
-        furthertargets = ((Boolean)furthertargetsObject).booleanValue();
-    }
 
     Object exceptionMessage = request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID);
     exceptionMessage = (exceptionMessage != null ? exceptionMessage.toString().replaceAll(" ", ".").replaceAll(":",".").toLowerCase() : null);
@@ -94,24 +86,8 @@
                 <%}%>
 
                 <%-- render the dynamic part to feed the state and advance to the next state --%>
-                <%if (ui != null){%> 
-                    <div id="timeseriesfilter"> 
-                        <form id="fisSelectionForm" onsubmit="displayOverlay()" action="<%=response.encodeURL("next.do")%>" method="post">
-                           <fieldset>
-
-                            <%-- error message, if user input was not valid --%>
-                            <%if (exception != null) {%>
-                                <div class="inputException"><%=exception%></div>
-                            <%}%>
-                            <%=ui != null ? ui.toString().replaceAll("&nbsp;", "") : "" %>
-
-                            <%if(furthertargets){%>
-                                <br/>
-                                <input style="margin-top: 5px;" type="image" src="<bean:message key="gnviewer.select.button.src"/>"/>
-                            <%}%>
-                            </fieldset>
-                        </form>
-                    </div>
+                <%if (ui != null) { %>
+                     <%= ui.toString().replaceAll("&nbsp;", "") %>
                 <%}%>
 
                     <%-- render export options if existing for this state --%>
--- a/gnv/src/main/webapp/styles/gnv.css	Fri Jun 11 12:11:52 2010 +0000
+++ b/gnv/src/main/webapp/styles/gnv.css	Sun Jun 13 16:28:37 2010 +0000
@@ -117,6 +117,14 @@
 }
 
 /* Some classes for the content */
+a.linkButton {
+    border:          1px solid #000000;
+    color:           #ff6600;
+    font-size:       1.2em;
+    padding:         1px;
+    text-decoration: none;
+}
+
 #contentElement {
     float:  left;
     height: 90%;

http://dive4elements.wald.intevation.org