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/10/26 21:11:01 UTC
svn commit: r328710 - in
/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal:
coplet/adapter/impl/ApplicationCopletAdapter.java reading/ProxyReader.java
transformation/LinkTransformer.java transformation/ProxyTransformer.java
Author: cziegeler
Date: Wed Oct 26 12:10:46 2005
New Revision: 328710
URL: http://svn.apache.org/viewcvs?rev=328710&view=rev
Log:
Clean up application coplet and proxy components.
Modified:
cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/reading/ProxyReader.java
cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/LinkTransformer.java
cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java
Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java?rev=328710&r1=328709&r2=328710&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/adapter/impl/ApplicationCopletAdapter.java Wed Oct 26 12:10:46 2005
@@ -19,22 +19,13 @@
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.LinkService;
import org.apache.cocoon.portal.coplet.CopletInstanceData;
import org.apache.cocoon.portal.event.CopletInstanceEvent;
import org.apache.cocoon.portal.event.impl.CopletLinkEvent;
-import org.apache.cocoon.portal.layout.CompositeLayout;
-import org.apache.cocoon.portal.layout.Item;
-import org.apache.cocoon.portal.layout.LayoutFactory;
-import org.apache.cocoon.portal.layout.NamedItem;
-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;
@@ -79,116 +70,45 @@
if ( e instanceof CopletLinkEvent ) {
CopletLinkEvent event = (CopletLinkEvent) e;
CopletInstanceData coplet = (CopletInstanceData) event.getTarget();
- String link = event.getLink();
- if ("createNewCopletInstance".equals(link)) {
- try {
- createNewInstance(coplet);
- } catch (ProcessingException ex) {
- getLogger().error("Could not create new coplet instance", ex);
- }
- } else {
- // this is a normal link event, so save the url in the instance data
- // for ProxyTransformer
- String linkValue = event.getLink();
- Boolean addParams = (Boolean)this.getConfiguration(coplet, "appendParameters", Boolean.FALSE);
- if ( addParams.booleanValue() ) {
- final StringBuffer uri = new StringBuffer(event.getLink());
- boolean hasParams = (uri.toString().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
- }
+ // this is a normal link event, so save the url in the instance data
+ // for ProxyTransformer
+ String linkValue = event.getLink();
+ Boolean addParams = (Boolean)this.getConfiguration(coplet, "appendParameters", Boolean.FALSE);
+ if ( addParams.booleanValue() ) {
+ final StringBuffer uri = new StringBuffer(event.getLink());
+ boolean hasParams = (uri.toString().indexOf("?") != -1);
+
+ // append parameters - if any
+ LinkService linkService = this.portalService.getComponentManager().getLinkService();
+ 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 (!linkService.isInternalParameterName(name)) {
+ 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);
+ linkValue = uri.toString();
}
+ coplet.setTemporaryAttribute(ProxyTransformer.LINK, linkValue);
}
- }
-
- /**
- * Creates a new instance of the given coplet. Also a new named item in the tab layout is
- * created to show the data of the new coplet instance in the portal.
- * @param coplet the coplet instance data
- * @trows ProcessingException if something fails in the creation process
- */
- private void createNewInstance(CopletInstanceData coplet)
- throws ProcessingException {
- ProfileManager profileManager = null;
- try {
- profileManager =
- (ProfileManager) this.manager.lookup(ProfileManager.ROLE);
-
- CopletData copletData = coplet.getCopletData();
-
- LayoutFactory lfac =
- (LayoutFactory) this.manager.lookup(LayoutFactory.ROLE);
-
- CopletLayout copletLayout =
- (CopletLayout) lfac.newInstance("coplet");
-
- CopletFactory cfac =
- (CopletFactory) manager.lookup(CopletFactory.ROLE);
-
- CopletInstanceData newCoplet = cfac.newInstance(copletData);
-
- copletLayout.setCopletInstanceData(newCoplet);
- profileManager.register(copletLayout);
-
- NamedItem newItem = new NamedItem();
- newItem.setLayout(copletLayout);
-
- CompositeLayout tabLayout =
- (CompositeLayout) profileManager.getPortalLayout(
- "portalApplications", null);
-
- newItem.setName(getNewInstanceTabName(tabLayout));
- tabLayout.addItem(newItem);
- } catch (ServiceException ce) {
- throw new ProcessingException(
- "Unable to lookup profile manager.",
- ce);
- } catch (Exception e) {
- throw new ProcessingException(e);
- } finally {
- this.manager.release(profileManager);
- }
- }
-
- /**
- * Returns the name of the new named item in the tab layout
- * @return String the name of the new item
- */
- private String getNewInstanceTabName(CompositeLayout layout) {
- Integer data = Integer.valueOf(layout.getTemporaryParameter("tab"));
- Item selectedItem = (NamedItem) layout.getItem(data.intValue());
-
- if (selectedItem instanceof NamedItem) {
- return ((NamedItem) selectedItem).getName();
- }
- return ("New");
}
/**
Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/reading/ProxyReader.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/reading/ProxyReader.java?rev=328710&r1=328709&r2=328710&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/reading/ProxyReader.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/reading/ProxyReader.java Wed Oct 26 12:10:46 2005
@@ -22,12 +22,17 @@
import java.util.Enumeration;
import java.util.Map;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Response;
import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.portal.LinkService;
+import org.apache.cocoon.portal.PortalService;
import org.apache.cocoon.portal.coplet.CopletInstanceData;
import org.apache.cocoon.portal.transformation.ProxyTransformer;
import org.apache.cocoon.reading.ServiceableReader;
@@ -44,26 +49,41 @@
*
* @version $Id$
*/
-public class ProxyReader extends ServiceableReader {
+public class ProxyReader extends ServiceableReader implements Disposable {
- /**
- * The coplet instance data
- */
+ /** The coplet instance data. */
protected CopletInstanceData copletInstanceData;
+ /** The HTTP response. */
+ protected Response response;
+
+ /** The origninal HTTP request. */
+ protected Request request;
+
+ /** The prefix. */
+ protected String prefix;
+
+ /** The portal service. */
+ protected PortalService portalService;
+
/**
- * The HTTP response
+ * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
*/
- protected Response response;
+ public void service(ServiceManager manager) throws ServiceException {
+ super.service(manager);
+ this.portalService = (PortalService)this.manager.lookup(PortalService.ROLE);
+ }
/**
- * The origninal HTTP request
+ * @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
- protected Request request;
+ public void dispose() {
+ if ( this.manager != null ) {
+ this.manager.release(this.portalService);
+ this.portalService = null;
+ }
+ }
- /** The prefix */
- protected String prefix;
-
/**
* @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(SourceResolver, Map, String, Parameters)
*/
@@ -74,17 +94,13 @@
throws ProcessingException, SAXException, IOException {
super.setup(resolver, objectModel, src, par);
- request = ObjectModelHelper.getRequest(objectModel);
- response = ObjectModelHelper.getResponse(objectModel);
+ this.request = ObjectModelHelper.getRequest(objectModel);
+ this.response = ObjectModelHelper.getResponse(objectModel);
String copletID = request.getParameter(ProxyTransformer.COPLETID);
- String portalName = request.getParameter(ProxyTransformer.PORTALNAME);
- copletInstanceData =
- ProxyTransformer.getInstanceData(
- this.manager,
- copletID,
- portalName);
+ this.copletInstanceData = this.portalService.getComponentManager()
+ .getProfileManager().getCopletInstanceData(copletID);
this.prefix = par.getParameter("prefix", ProxyTransformer.PROXY_PREFIX);
}
@@ -94,6 +110,8 @@
public void recycle() {
this.response = null;
this.request = null;
+ this.copletInstanceData = null;
+ this.prefix = null;
super.recycle();
}
@@ -144,17 +162,18 @@
protected HttpURLConnection connect(Request request, String uri)
throws IOException {
String cookie =
- (String) copletInstanceData.getAttribute(ProxyTransformer.COOKIE);
+ (String) copletInstanceData.getTemporaryAttribute(ProxyTransformer.COOKIE);
Enumeration enumeration = request.getParameterNames();
boolean firstattribute = true;
StringBuffer query = new StringBuffer();
+ final LinkService linkService = this.portalService.getComponentManager().getLinkService();
while (enumeration.hasMoreElements()) {
String paramName = (String) enumeration.nextElement();
- if (!paramName.startsWith("cocoon-portal-")) {
+ if (!linkService.isInternalParameterName(paramName)) {
String[] paramValues = request.getParameterValues(paramName);
@@ -187,7 +206,7 @@
connection.connect();
- copletInstanceData.setAttribute(
+ this.copletInstanceData.setTemporaryAttribute(
ProxyTransformer.COOKIE,
connection.getHeaderField(ProxyTransformer.COOKIE));
Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/LinkTransformer.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/LinkTransformer.java?rev=328710&r1=328709&r2=328710&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/LinkTransformer.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/LinkTransformer.java Wed Oct 26 12:10:46 2005
@@ -25,9 +25,7 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.portal.Constants;
import org.apache.cocoon.portal.coplet.CopletInstanceData;
import org.apache.cocoon.transformation.AbstractTransformer;
import org.apache.cocoon.xml.AttributesImpl;
@@ -68,11 +66,6 @@
protected String copletIdParamString;
/**
- * Used for appending a request parameter containing the portal name
- */
- protected String portalNameParamString;
-
- /**
* The coplet instance data
*/
protected CopletInstanceData copletInstanceData;
@@ -87,12 +80,10 @@
*/
protected Stack elementStack = new Stack();
- /**
- * The avalon service manager
- */
+ /** The avalon service manager. */
protected ServiceManager manager;
- /* (non-Javadoc)
+ /**
* @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
*/
public void service(ServiceManager manager) throws ServiceException {
@@ -123,11 +114,6 @@
this.copletIdParamString =
ProxyTransformer.COPLETID + "=" + copletInstanceData.getId();
- Map context = (Map) objectModel.get(ObjectModelHelper.PARENT_CONTEXT);
- this.portalNameParamString =
- ProxyTransformer.PORTALNAME
- + "="
- + (String) context.get(Constants.PORTAL_NAME_KEY);
this.prefix = par.getParameter("prefix", ProxyTransformer.PROXY_PREFIX);
}
@@ -140,7 +126,6 @@
this.copletInstanceData = null;
this.elementStack.clear();
this.copletIdParamString = null;
- this.portalNameParamString = null;
}
/**
@@ -380,7 +365,7 @@
uri.substring(
index_semikolon + 1,
(index_question == -1 ? uri.length() : index_question));
- copletInstanceData.setAttribute(
+ copletInstanceData.setTemporaryAttribute(
ProxyTransformer.SESSIONTOKEN,
sessionToken);
}
@@ -390,13 +375,6 @@
}
uriBuffer.append(uri);
-
- if (applyPrefixAndPortalParams) {
- uriBuffer.append((index_question == -1 ? '?' : '&'));
- uriBuffer.append(this.copletIdParamString);
- uriBuffer.append('&');
- uriBuffer.append(this.portalNameParamString);
- }
return uriBuffer.toString();
}
Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java?rev=328710&r1=328709&r2=328710&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/transformation/ProxyTransformer.java Wed Oct 26 12:10:46 2005
@@ -24,6 +24,7 @@
import java.util.Enumeration;
import java.util.Map;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.avalon.framework.parameters.Parameterizable;
import org.apache.avalon.framework.parameters.Parameters;
@@ -35,10 +36,10 @@
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.portal.Constants;
+import org.apache.cocoon.portal.LinkService;
import org.apache.cocoon.portal.PortalService;
import org.apache.cocoon.portal.coplet.CopletData;
import org.apache.cocoon.portal.coplet.CopletInstanceData;
-import org.apache.cocoon.portal.profile.ProfileManager;
import org.apache.cocoon.portal.util.HtmlDomParser;
import org.apache.cocoon.transformation.AbstractTransformer;
import org.apache.cocoon.util.NetUtils;
@@ -61,19 +62,17 @@
*/
public class ProxyTransformer
extends AbstractTransformer
- implements Serviceable, Parameterizable {
+ implements Serviceable, Parameterizable, Disposable {
/**
* Parameter for specifying the 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";
public static final String PROXY_PREFIX = "proxy-";
public static final String COPLET_ID_PARAM = "copletId";
- public static final String PORTAL_NAME_PARAM = "portalName";
// Coplet instance data keys
public static final String SESSIONTOKEN = "sessiontoken";
@@ -82,65 +81,56 @@
public static final String LINK = "link";
public static final String DOCUMENT_BASE = "documentbase";
- /**
- * Parameter for specifying the java protocol handler (used for https)
- */
- public static final String PROTOCOL_HANDLER_PARAMETER = "protocol-handler";
-
- /**
- * The document base uri
- */
+ /** The document base uri. */
protected String documentBase;
- /**
- * The current link to the external application
- */
+ /** The current link to the external application. */
protected String link;
- /**
- * The default value for the envelope Tag
- */
+ /** The default value for the envelope Tag. */
protected String defaultEnvelopeTag;
- /**
- * This tag will include the external XHMTL
- */
+ /** This tag will include the external XHMTL. */
protected String envelopeTag;
- /**
- * The Avalon component manager
- */
+ /** The Avalon service manager. */
protected ServiceManager manager;
- /**
- * The coplet instance data
- */
+ /** The coplet instance data. */
protected CopletInstanceData copletInstanceData;
- /**
- * The original request to the portal
- */
+ /** The original request to the portal. */
protected Request request;
- /**
- * The encoding if configured
- */
+ /** The encoding if configured. */
protected String configuredEncoding;
- /**
- * The user agent identification string if confiugured
- */
+ /** The user agent identification string if confiugured. */
protected String userAgent;
- /** The sitemap parameters */
+ /** The sitemap parameters. */
protected Parameters parameters;
- /* (non-Javadoc)
+ /** The portal service. */
+ protected PortalService portalService;
+
+ /**
* @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
*/
public void service(ServiceManager manager) throws ServiceException {
this.manager = manager;
+ this.portalService = (PortalService)this.manager.lookup(PortalService.ROLE);
+ }
+ /**
+ * @see org.apache.avalon.framework.activity.Disposable#dispose()
+ */
+ public void dispose() {
+ if ( this.manager != null ) {
+ this.manager.release(this.portalService);
+ this.portalService = null;
+ this.manager = null;
+ }
}
/**
@@ -190,7 +180,7 @@
}
}
- /* (non-Javadoc)
+ /**
* @see org.apache.avalon.excalibur.pool.Recyclable#recycle()
*/
public void recycle() {
@@ -201,6 +191,7 @@
this.link = null;
this.request = null;
this.parameters = null;
+ this.copletInstanceData = null;
}
/**
@@ -245,20 +236,20 @@
remoteURI = remoteURI.substring(0, pos);
}
- // append all parameters of the current request, except those where
- // the name of the request parameter starts with "cocoon-portal-"
+ // append all parameters of the current request, except internal ones
final Enumeration enumeration = request.getParameterNames();
+ final LinkService linkService = this.portalService.getComponentManager().getLinkService();
while (enumeration.hasMoreElements()) {
String paramName = (String) enumeration.nextElement();
- if (!paramName.startsWith("cocoon-portal-")) {
+ if (!linkService.isInternalParameterName(paramName)) {
String[] paramValues = request.getParameterValues(paramName);
for (int i = 0; i < paramValues.length; i++) {
firstparameter = this.appendParameter(query, firstparameter, post, paramName, paramValues[i]);
}
}
}
-
+
// now append parameters from the sitemap - if any
final String[] names = this.parameters.getNames();
for(int i=0; i<names.length; i++) {
@@ -287,8 +278,7 @@
remoteURI = checkForRedirect(result, documentBase);
}
- }
- while (remoteURI != null);
+ } while (remoteURI != null);
} catch (IOException ex) {
throw new SAXException(
"Failed to retrieve remoteURI " + remoteURI,
@@ -328,6 +318,7 @@
return firstparameter;
}
+
/**
* Check the http status code of the http response to detect any redirects.
* @param connection The HttpURLConnection
@@ -335,10 +326,9 @@
* @return the redirected URL or null if no redirects are detected.
* @throws IOException if exceptions occure while analysing the response
*/
- protected String checkForRedirect(
- HttpURLConnection connection,
- String documentBase)
- throws IOException {
+ protected String checkForRedirect(HttpURLConnection connection,
+ String documentBase)
+ throws IOException {
if (connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM
|| connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP) {
@@ -355,7 +345,7 @@
(index_question == -1
? newURI.length()
: index_question));
- this.copletInstanceData.setAttribute(
+ this.copletInstanceData.setTemporaryAttribute(
SESSIONTOKEN,
sessionToken);
}
@@ -419,7 +409,7 @@
(index_question == -1
? newURI.length()
: index_question));
- this.copletInstanceData.setAttribute(
+ this.copletInstanceData.setTemporaryAttribute(
SESSIONTOKEN,
sessionToken);
}
@@ -478,7 +468,7 @@
boolean post)
throws IOException {
- String cookie = (String) copletInstanceData.getAttribute(COOKIE);
+ String cookie = (String) copletInstanceData.getTemporaryAttribute(COOKIE);
if (!post) {
uri = uri + query;
@@ -521,7 +511,7 @@
out.close();
}
- copletInstanceData.setAttribute(
+ copletInstanceData.setTemporaryAttribute(
COOKIE,
connection.getHeaderField(COOKIE));
documentBase = uri.substring(0, uri.lastIndexOf('/') + 1);
@@ -566,24 +556,6 @@
+ uri;
}
return documentBaseURL.toExternalForm() + uri;
- }
-
- public static CopletInstanceData getInstanceData(ServiceManager manager,
- String copletID,
- String portalName)
- throws ProcessingException {
- PortalService portalService = null;
- try {
- portalService = (PortalService) manager.lookup(PortalService.ROLE);
-
- ProfileManager profileManager = portalService.getComponentManager().getProfileManager();
- CopletInstanceData data = profileManager.getCopletInstanceData(copletID);
- return data;
- } catch (ServiceException e) {
- throw new ProcessingException("Error getting portal service.", e);
- } finally {
- manager.release(portalService);
- }
}
/**