cziegeler 2003/01/30 23:35:32
Modified: src/scratchpad/src/org/apache/cocoon/components/source/impl
SlideSource.java
src/java/org/apache/cocoon/transformation
EncodeURLTransformer.java
Log:
Fixing (hopefully) encodeURL transformer and make it cacheable again
Organizing imports
Revision Changes Path
1.31 +3 -24
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSource.java
Index: SlideSource.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSource.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- SlideSource.java 30 Jan 2003 20:01:07 -0000 1.30
+++ SlideSource.java 31 Jan 2003 07:35:32 -0000 1.31
@@ -58,61 +58,40 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
-import java.util.Iterator;
import java.util.Vector;
-import org.apache.avalon.framework.component.ComponentException;
-import org.apache.avalon.framework.component.ComponentManager;
-import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
-
import org.apache.cocoon.CascadingIOException;
import org.apache.cocoon.Constants;
-import org.apache.cocoon.components.source.InspectableSource;
-import org.apache.cocoon.components.source.LockableSource;
-import org.apache.cocoon.components.source.ModifiableTraversableSource;
-import org.apache.cocoon.components.source.MoveableSource;
-import org.apache.cocoon.components.source.RestrictableSource;
-import org.apache.cocoon.components.source.VersionableSource;
-import org.apache.cocoon.components.source.WriteableSource;
+import org.apache.cocoon.components.source.*;
import org.apache.cocoon.components.source.helpers.GroupSourcePermission;
import org.apache.cocoon.components.source.helpers.PrincipalSourcePermission;
import org.apache.cocoon.components.source.helpers.SourceCredential;
import org.apache.cocoon.components.source.helpers.SourceLock;
import org.apache.cocoon.components.source.helpers.SourcePermission;
import org.apache.cocoon.components.source.helpers.SourceProperty;
-
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceException;
import org.apache.excalibur.source.SourceValidity;
import org.apache.excalibur.source.impl.validity.TimeStampValidity;
-
import org.apache.slide.authenticate.CredentialsToken;
import org.apache.slide.common.NamespaceAccessToken;
import org.apache.slide.common.NamespaceConfig;
import org.apache.slide.common.SlideException;
import org.apache.slide.common.SlideToken;
import org.apache.slide.common.SlideTokenImpl;
-import org.apache.slide.content.Content;
-import org.apache.slide.content.NodeProperty;
-import org.apache.slide.content.NodeRevisionContent;
-import org.apache.slide.content.NodeRevisionDescriptor;
-import org.apache.slide.content.NodeRevisionDescriptors;
-import org.apache.slide.content.NodeRevisionNumber;
-import org.apache.slide.content.RevisionDescriptorNotFoundException;
+import org.apache.slide.content.*;
import org.apache.slide.lock.Lock;
import org.apache.slide.lock.NodeLock;
import org.apache.slide.macro.Macro;
-import org.apache.slide.security.AccessDeniedException;
import org.apache.slide.security.NodePermission;
import org.apache.slide.security.Security;
import org.apache.slide.structure.GroupNode;
-import org.apache.slide.structure.LinkedObjectNotFoundException;
import org.apache.slide.structure.ObjectNode;
import org.apache.slide.structure.ObjectNotFoundException;
import org.apache.slide.structure.Structure;
1.8 +41 -53
xml-cocoon2/src/java/org/apache/cocoon/transformation/EncodeURLTransformer.java
Index: EncodeURLTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/EncodeURLTransformer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- EncodeURLTransformer.java 27 Jan 2003 07:43:33 -0000 1.7
+++ EncodeURLTransformer.java 31 Jan 2003 07:35:32 -0000 1.8
@@ -57,7 +57,7 @@
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
-//import org.apache.cocoon.caching.CacheableProcessingComponent;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Response;
@@ -85,7 +85,7 @@
* URLs introduced in the generator, and xslt transformer phase.
* </p>
* <p>
- * You can specify which attributes hold an URL values in order to restrict
+ * You can specify which attributes hold URL values in order to restrict
* URL rewriting to specific attributes only.
* </p>
* <p>
@@ -124,7 +124,7 @@
*/
public class EncodeURLTransformer
extends AbstractTransformer
- implements Configurable {
+ implements Configurable, CacheableProcessingComponent {
/**
* Configuration name for specifying excluding patterns,
@@ -155,39 +155,27 @@
private ElementAttributeMatching elementAttributeMatching;
private Response response;
- private Request request;
-
-
- /**
- * get the session from the request.
- *
- * @return Session object, or null if no session is available
- */
- protected Session getSession() {
- // assume that request is already set
- Session session = this.request.getSession( false );
- return session;
- }
+ private boolean isEncodeURLNeeded;
+ private Session session;
/**
* check if encoding of URLs is neccessary.
*
- * @return true iff session object exists, and session-id
- * was provided from URL, or session is new,
- * else return false
- */
- protected boolean isEncodeURLNeeded() {
- Session session = getSession();
- boolean isEncodeURLNeeded = false;
+ * THis is true if session object exists, and session-id
+ * was provided from URL, or session is new.
+ * The result is stored in some instance variables
+ */
+ protected void checkForEncoding(Request request) {
+ this.session = request.getSession();
+ this.isEncodeURLNeeded = false;
- if ( null != session ) {
+ if ( null != this.session ) {
// do encoding if session id is from URL, or the session is new,
// fixes BUG #13855, due to [EMAIL PROTECTED]
- if ( request.isRequestedSessionIdFromURL() || session.isNew()) {
- isEncodeURLNeeded = true;
+ if ( request.isRequestedSessionIdFromURL() || this.session.isNew()) {
+ this.isEncodeURLNeeded = true;
}
}
- return isEncodeURLNeeded;
}
@@ -206,21 +194,24 @@
public void setup(SourceResolver resolver, Map objectModel, String source,
Parameters parameters)
throws ProcessingException, SAXException, IOException {
- this.request = ObjectModelHelper.getRequest(objectModel);
- this.response = ObjectModelHelper.getResponse(objectModel);
+ this.checkForEncoding(ObjectModelHelper.getRequest(objectModel));
+
+ if (this.isEncodeURLNeeded) {
+ this.response = ObjectModelHelper.getResponse(objectModel);
- // don't check if URL encoding is needed now, as
- // a generator might create a new session
- final String includeName = parameters.getParameter(INCLUDE_NAME,
-
this.includeNameConfigure);
- final String excludeName = parameters.getParameter(EXCLUDE_NAME,
-
this.excludeNameConfigure);
- try {
- this.elementAttributeMatching = new
ElementAttributeMatching(includeName, excludeName);
- } catch (RESyntaxException reex) {
- final String message = "Cannot parse include-name: " + includeName + "
" +
- "or exclude-name: " + excludeName + "!";
- throw new ProcessingException(message, reex);
+ // don't check if URL encoding is needed now, as
+ // a generator might create a new session
+ final String includeName = parameters.getParameter(INCLUDE_NAME,
+
this.includeNameConfigure);
+ final String excludeName = parameters.getParameter(EXCLUDE_NAME,
+
this.excludeNameConfigure);
+ try {
+ this.elementAttributeMatching = new
ElementAttributeMatching(includeName, excludeName);
+ } catch (RESyntaxException reex) {
+ final String message = "Cannot parse include-name: " + includeName
+ " " +
+ "or exclude-name: " + excludeName + "!";
+ throw new ProcessingException(message, reex);
+ }
}
}
@@ -257,7 +248,7 @@
public void recycle() {
super.recycle();
this.response = null;
- this.request = null;
+ this.session = null;
this.elementAttributeMatching = null;
}
@@ -269,7 +260,7 @@
* @return The generated key hashes the src
*/
public java.io.Serializable generateKey() {
- if (isEncodeURLNeeded()) {
+ if (this.isEncodeURLNeeded) {
return null;
} else {
return "1";
@@ -283,7 +274,7 @@
* component is currently not cacheable.
*/
public SourceValidity generateValidity() {
- if (isEncodeURLNeeded()) {
+ if (this.isEncodeURLNeeded) {
return null;
} else {
return NOPValidity.SHARED_INSTANCE;
@@ -301,9 +292,7 @@
*/
public void startElement(String uri, String name, String raw, Attributes
attributes)
throws SAXException {
- boolean isEncodeURLNeeded = isEncodeURLNeeded();
-
- if (isEncodeURLNeeded && this.elementAttributeMatching != null) {
+ if (this.isEncodeURLNeeded && this.elementAttributeMatching != null) {
String lname = name;
if (attributes != null && attributes.getLength() > 0) {
AttributesImpl new_attributes = new AttributesImpl(attributes);
@@ -347,15 +336,14 @@
*/
private String encodeURL(String url, Response response) {
String encoded_url;
- if (response != null) {
+ if (this.response != null) {
// As some servlet-engine does not check if url has been already
rewritten
- Session session = getSession();
- if (session != null && url.indexOf(session.getId()) > -1) {
+ if (this.session != null && url.indexOf(this.session.getId()) > -1) {
// url contains already the session id encoded
encoded_url = url;
} else {
// do encode the session id
- encoded_url = response.encodeURL(url);
+ encoded_url = this.response.encodeURL(url);
}
} else {
encoded_url = url;
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]