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;