svn commit: r620049 - in /lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation: UrlToUuidTransformer.java UuidToUrlTransformer.java

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Author: andreas
Date: Fri Feb  8 16:14:18 2008
New Revision: 620049

URL: http://svn.apache.org/viewvc?rev=620049&view=rev
Log:
Made url2uuid and uuid2url transformers cacheable.

Modified:
    lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UrlToUuidTransformer.java
    lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java

Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UrlToUuidTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UrlToUuidTransformer.java?rev=620049&r1=620048&r2=620049&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UrlToUuidTransformer.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UrlToUuidTransformer.java Fri Feb  8 16:14:18 2008
@@ -18,13 +18,17 @@
 package org.apache.lenya.cms.cocoon.transformation;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.util.Map;
 
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.SourceResolver;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceValidity;
 import org.apache.lenya.cms.linking.LinkResolver;
 import org.apache.lenya.cms.linking.LinkRewriter;
 import org.apache.lenya.cms.linking.UrlToUuidRewriter;
@@ -47,10 +51,13 @@
  * This transformer is applied to an XHMTL document. It processes all URL-based
  * links to links following the {@link LinkResolver} syntax.
  * </p>
+ * @see UrlToUuidRewriter
  */
-public class UrlToUuidTransformer extends AbstractLinkTransformer {
+public class UrlToUuidTransformer extends AbstractLinkTransformer implements CacheableProcessingComponent {
 
     private LinkRewriter rewriter;
+    private String cacheKey;
+    private SourceValidity validity;
 
     /**
      * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
@@ -61,6 +68,7 @@
             Parameters _parameters) throws ProcessingException, SAXException, IOException {
         super.setup(_resolver, _objectModel, _source, _parameters);
 
+        Source source = null;
         Request _request = ObjectModelHelper.getRequest(_objectModel);
         try {
             Session session = RepositoryUtil.getSession(this.manager, _request);
@@ -70,13 +78,34 @@
             Publication pub = factory.getPublication(info.getPublicationId());
             Area area = pub.getArea(info.getArea());
             this.rewriter = new UrlToUuidRewriter(area);
+            this.cacheKey = pub.getId() + ":" + area.getName();
+            source = resolver.resolveURI(area.getSite().getRepositoryNode().getSourceURI());
+            this.validity = source.getValidity();
         } catch (final Exception e1) {
             throw new ProcessingException(e1);
+        } finally {
+            if (source != null) {
+                resolver.release(source);
+            }
         }
     }
 
     protected LinkRewriter getLinkRewriter() {
         return this.rewriter;
+    }
+
+    public Serializable getKey() {
+        if (this.cacheKey == null) {
+            throw new IllegalStateException("setup() was not called.");
+        }
+        return this.cacheKey;
+    }
+
+    public SourceValidity getValidity() {
+        if (this.validity == null) {
+            throw new IllegalStateException("setup() was not called.");
+        }
+        return this.validity;
     }
 
 }

Modified: lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java?rev=620049&r1=620048&r2=620049&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java (original)
+++ lenya/trunk/src/modules-core/linking/java/src/org/apache/lenya/cms/cocoon/transformation/UuidToUrlTransformer.java Fri Feb  8 16:14:18 2008
@@ -18,6 +18,7 @@
 package org.apache.lenya.cms.cocoon.transformation;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.net.MalformedURLException;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -25,14 +26,19 @@
 import org.apache.avalon.framework.activity.Disposable;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.SourceResolver;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceValidity;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.cms.linking.Link;
 import org.apache.lenya.cms.linking.LinkResolver;
 import org.apache.lenya.cms.linking.LinkRewriter;
 import org.apache.lenya.cms.linking.LinkTarget;
+import org.apache.lenya.cms.linking.UrlToUuidRewriter;
+import org.apache.lenya.cms.publication.Area;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.DocumentUtil;
@@ -77,7 +83,7 @@
  * 
  * $Id: LinkRewritingTransformer.java,v 1.7 2004/03/16 11:12:16 gregor
  */
-public class UuidToUrlTransformer extends AbstractLinkTransformer implements Disposable {
+public class UuidToUrlTransformer extends AbstractLinkTransformer implements Disposable, CacheableProcessingComponent {
 
     protected static final String BROKEN_ATTRIB = "class";
     protected static final String BROKEN_VALUE = "brokenlink";
@@ -88,17 +94,20 @@
     private DocumentFactory factory;
     private LinkResolver linkResolver;
     private Document currentDoc;
+    private String cacheKey;
+    private SourceValidity validity;
 
     /**
      * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
      *      java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
      */
-    public void setup(SourceResolver _resolver, Map _objectModel, String _source,
+    public void setup(SourceResolver resolver, Map _objectModel, String _source,
             Parameters _parameters) throws ProcessingException, SAXException, IOException {
-        super.setup(_resolver, _objectModel, _source, _parameters);
+        super.setup(resolver, _objectModel, _source, _parameters);
 
         Request _request = ObjectModelHelper.getRequest(_objectModel);
 
+        Source source = null;
         try {
             Session session = RepositoryUtil.getSession(this.manager, _request);
             this.factory = DocumentUtil.createDocumentFactory(this.manager, session);
@@ -107,8 +116,19 @@
                 this.currentDoc = this.factory.getFromURL(this.currentUrl);
             }
             this.linkResolver = (LinkResolver) this.manager.lookup(LinkResolver.ROLE);
+            
+            URLInformation info = new URLInformation(this.currentUrl);
+            Publication pub = factory.getPublication(info.getPublicationId());
+            Area area = pub.getArea(info.getArea());
+            this.cacheKey = pub.getId() + ":" + area.getName();
+            source = resolver.resolveURI(area.getSite().getRepositoryNode().getSourceURI());
+            this.validity = source.getValidity();
         } catch (final Exception e) {
             throw new ProcessingException(e);
+        } finally {
+            if (source != null) {
+                resolver.release(source);
+            }
         }
     }
 
@@ -310,4 +330,19 @@
     protected LinkRewriter getLinkRewriter() {
         return null;
     }
+
+    public Serializable getKey() {
+        if (this.cacheKey == null) {
+            throw new IllegalStateException("setup() was not called.");
+        }
+        return this.cacheKey;
+    }
+
+    public SourceValidity getValidity() {
+        if (this.validity == null) {
+            throw new IllegalStateException("setup() was not called.");
+        }
+        return this.validity;
+    }
+
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.