Author: cziegeler
Date: Thu Jan  6 02:53:04 2005
New Revision: 124359

URL: http://svn.apache.org/viewcvs?view=rev&rev=124359
Log:
Fix problems with forms
Modified:
   
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
   
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
Url: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java?view=diff&rev=124359&p1=cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java&r1=124358&p2=cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java&r2=124359
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
      (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
      Thu Jan  6 02:53:04 2005
@@ -15,8 +15,15 @@
  */
 package org.apache.cocoon.portal.coplet.adapter.impl;
 
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+import java.util.Map;
+
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.ContextHelper;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.portal.coplet.CopletData;
 import org.apache.cocoon.portal.coplet.CopletFactory;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
@@ -29,6 +36,7 @@
 import org.apache.cocoon.portal.layout.impl.CopletLayout;
 import org.apache.cocoon.portal.profile.ProfileManager;
 import org.apache.cocoon.portal.transformation.ProxyTransformer;
+import org.apache.cocoon.util.NetUtils;
 import org.apache.cocoon.xml.XMLUtils;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
@@ -47,7 +55,7 @@
         final CopletInstanceData coplet,
         final String uri,
         final ContentHandler contentHandler)
-        throws SAXException {
+    throws SAXException {
         try {
             super.streamContent(coplet, uri, contentHandler);
         } catch (SAXException se) {
@@ -82,7 +90,40 @@
             } else {
                 // this is a normal link event, so save the url in the 
instance data
                 // for ProxyTransformer
-                coplet.setTemporaryAttribute(ProxyTransformer.LINK, 
event.getLink());
+                String linkValue = event.getLink();
+                Boolean addParams = (Boolean)this.getConfiguration(coplet, 
"appendParameters");
+                if ( addParams != null && addParams.booleanValue() ) {
+                    final StringBuffer uri = new StringBuffer(event.getLink());
+                    boolean hasParams = (uri.indexOf("?") != -1);
+                    
+                    // append parameters - if any
+                    final Map objectModel = 
ContextHelper.getObjectModel(this.context);
+                    final Request r = 
ObjectModelHelper.getRequest(objectModel);
+                    final Enumeration params = r.getParameterNames();
+                    while (params.hasMoreElements()) {
+                        final String name = (String)params.nextElement();
+                        if (!name.startsWith("cocoon-portal-")) {
+                            final String[] values = r.getParameterValues(name);
+                            for(int i = 0; i < values.length; i++) {
+                                if ( hasParams ) {
+                                    uri.append('&');
+                                } else {
+                                    uri.append('?');
+                                    hasParams = true;
+                                }
+                                uri.append(name);
+                                uri.append('=');
+                                try {
+                                    uri.append(NetUtils.decode(values[i], 
"utf-8"));
+                                } catch (UnsupportedEncodingException uee) {
+                                    // ignore this
+                                }
+                            }
+                        }
+                    }
+                    linkValue = uri.toString();
+                }
+                coplet.setTemporaryAttribute(ProxyTransformer.LINK, linkValue);
             }
         }
     }
@@ -94,7 +135,7 @@
      * @trows  ProcessingException if something fails in the creation process
      */
     private void createNewInstance(CopletInstanceData coplet)
-        throws ProcessingException {
+    throws ProcessingException {
         ProfileManager profileManager = null;
         try {
             profileManager =
@@ -160,7 +201,7 @@
     protected boolean renderErrorContent(
         CopletInstanceData coplet,
         ContentHandler handler)
-        throws SAXException {
+    throws SAXException {
         handler.startDocument();
         XMLUtils.startElement(handler, "p");
         XMLUtils.data(

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java
Url: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java?view=diff&rev=124359&p1=cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java&r1=124358&p2=cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java&r2=124359
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java
   (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java
   Thu Jan  6 02:53:04 2005
@@ -102,7 +102,7 @@
      */
     protected String link;
 
-    /** 
+    /**
      * The default value for the envelope Tag 
      */
     protected String defaultEnvelopeTag;
@@ -239,13 +239,20 @@
             } catch (MalformedURLException ex) {
                 throw new SAXException(ex);
             }
-
-            StringBuffer query = new StringBuffer();
-
             boolean firstparameter = true;
-            Enumeration enumeration = request.getParameterNames();
-
             boolean post = ("POST".equals(request.getMethod()));
+            int pos = remoteURI.indexOf('?');
+            final StringBuffer query = new StringBuffer();
+            if ( pos != -1 ) {
+                if ( !post ) {
+                    query.append('?');                    
+                }
+                query.append(remoteURI.substring(pos+1));
+                firstparameter = true;
+                remoteURI = remoteURI.substring(0, pos);
+            }
+
+            Enumeration enumeration = request.getParameterNames();
 
             while (enumeration.hasMoreElements()) {
                 String paramName = (String) enumeration.nextElement();
@@ -274,6 +281,9 @@
             Document result = null;
             try {
                 do {
+                    if ( this.getLogger().isDebugEnabled() ) {
+                        this.getLogger().debug("Invoking '" + remoteURI + 
query.toString() +"', post="+post);
+                    }
                     HttpURLConnection connection =
                         connect(request, remoteURI, query.toString(), post);
                     remoteURI = checkForRedirect(connection, documentBase);
@@ -334,7 +344,10 @@
                     SESSIONTOKEN,
                     sessionToken);
             }
-            newURI = resolveURI(newURI, documentBase);
+
+            if (newURI != null) {
+                newURI = resolveURI(newURI, documentBase);
+            }
             return newURI;
         }
         return null;
@@ -398,7 +411,10 @@
                             SESSIONTOKEN,
                             sessionToken);
                     }
-                    newURI = resolveURI(newURI, documentBase);
+
+                    if (newURI != null) {
+                        newURI = resolveURI(newURI, documentBase);
+                    }
                     return newURI;
                 }
             }
@@ -550,7 +566,11 @@
     * @throws MalformedURLException if uri or document base is malformed.
     */
     public static String resolveURI(String uri, String documentBase)
-        throws MalformedURLException {
+    throws MalformedURLException {
+
+        if (uri == null) {
+            throw new IllegalArgumentException("URI to be resolved must not be 
null!");
+        }
 
         if (uri.indexOf("://") > -1) {
             return uri;

Reply via email to