You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2005/01/06 11:39:24 UTC

svn commit: r124357 - /cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java /cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java

Author: cziegeler
Date: Thu Jan  6 02:39:23 2005
New Revision: 124357

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

Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java?view=diff&rev=124357&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java&r1=124356&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java&r2=124357
==============================================================================
--- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java	(original)
+++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java	Thu Jan  6 02:39:23 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;
@@ -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);
             }
         }
     }

Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java?view=diff&rev=124357&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java&r1=124356&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java&r2=124357
==============================================================================
--- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java	(original)
+++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java	Thu Jan  6 02:39:23 2005
@@ -71,7 +71,7 @@
     /**
      * Parameter for specifying the envelope tag
      */
-    public static String ENVELOPE_TAG_PARAMETER = "envelope-tag";
+    public static final String ENVELOPE_TAG_PARAMETER = "envelope-tag";
 
     public static final String PORTALNAME = "cocoon-portal-portalname";
     public static final String COPLETID = "cocoon-portal-copletid";
@@ -90,7 +90,7 @@
     /**
      * Parameter for specifying the java protocol handler (used for https)
      */
-    public static String PROTOCOL_HANDLER_PARAMETER = "protocol-handler";
+    public static final String PROTOCOL_HANDLER_PARAMETER = "protocol-handler";
 
     /**
      * The document base uri
@@ -173,7 +173,7 @@
         this.copletInstanceData = getInstanceData(this.manager, objectModel, parameters);
 
         final CopletData copletData = this.copletInstanceData.getCopletData();
-        
+
         final String startURI = (String)copletData.getAttribute(START_URI);
 
         this.link = (String) this.copletInstanceData.getTemporaryAttribute(LINK);
@@ -209,7 +209,7 @@
         this.link = null;
         this.request = null;
     }
-    
+
     /**
      * @see org.xml.sax.ContentHandler#startElement(String, String, String, Attributes)
      */
@@ -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);
@@ -339,7 +349,6 @@
                 newURI = resolveURI(newURI, documentBase);
             }
             return newURI;
-
         }
         return null;
     }
@@ -557,14 +566,14 @@
     * @throws MalformedURLException if uri or document base is malformed.
     */
     public static String resolveURI(String uri, String documentBase)
-        throws MalformedURLException {
-
-        if (uri.indexOf("://") > -1) {
-            return uri;
-        }
+    throws MalformedURLException {
 
         if (uri == null) {
             throw new IllegalArgumentException("URI to be resolved must not be null!");
+        }
+
+        if (uri.indexOf("://") > -1) {
+            return uri;
         }
 
         if (documentBase == null) {