unico       2004/07/06 03:34:36

  Modified:    src/java/org/apache/cocoon/generation
                        JXTemplateGenerator.java
  Log:
  qualify template cache-key with the template source uri
  
  Revision  Changes    Path
  1.52      +32 -5     
cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java
  
  Index: JXTemplateGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- JXTemplateGenerator.java  2 Jul 2004 08:33:42 -0000       1.51
  +++ JXTemplateGenerator.java  6 Jul 2004 10:34:36 -0000       1.52
  @@ -42,8 +42,8 @@
   import java.util.TimeZone;
   
   import org.apache.avalon.framework.parameters.Parameters;
  -import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.ServiceException;
  +import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.caching.CacheableProcessingComponent;
   import org.apache.cocoon.components.flow.FlowHelper;
  @@ -54,8 +54,8 @@
   import org.apache.cocoon.environment.Request;
   import org.apache.cocoon.environment.SourceResolver;
   import org.apache.cocoon.transformation.ServiceableTransformer;
  -import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.cocoon.xml.IncludeXMLConsumer;
  +import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.cocoon.xml.XMLUtils;
   import org.apache.cocoon.xml.dom.DOMBuilder;
   import org.apache.cocoon.xml.dom.DOMStreamer;
  @@ -3191,17 +3191,21 @@
               ev = ev.next;
           }
       }
  +
        /* (non-Javadoc)
         * @see org.apache.cocoon.caching.CacheableProcessingComponent#getKey()
         */
        public Serializable getKey() {
        JXTExpression cacheKeyExpr = 
(JXTExpression)getCurrentTemplateProperty(CACHE_KEY);
           try {
  -                     return (Serializable) getValue(cacheKeyExpr, 
globalJexlContext, jxpathContext);
  +            final Serializable templateKey = (Serializable) 
getValue(cacheKeyExpr, globalJexlContext, jxpathContext);
  +            if (templateKey != null) {
  +                     return new JXCacheKey(this.inputSource.getURI(), 
templateKey);
  +            }
                } catch (Exception e) {
                        getLogger().error("error evaluating cache key", e);
  -                     return null;
                }
  +             return null;
        }
   
        /* (non-Javadoc)
  @@ -3236,5 +3240,28 @@
           builder.endDocument();
           Node node = builder.getDocument().getDocumentElement();
           return node.getChildNodes();
  +     }
  +     
  +     static final class JXCacheKey implements Serializable {
  +         private final String templateUri;
  +         private final Serializable templateKey;
  +         private JXCacheKey(String templateUri, Serializable templateKey) {
  +             this.templateUri = templateUri;
  +             this.templateKey = templateKey;
  +         }
  +         public int hashCode() {
  +             return templateUri.hashCode() + templateKey.hashCode();
  +         }
  +         public String toString() {
  +             return "TK:" + templateUri + "_" + templateKey;
  +         }
  +         public boolean equals(Object o) {
  +             if (o instanceof JXCacheKey) {
  +                 JXCacheKey jxck = (JXCacheKey)o;
  +                 return this.templateUri.equals(jxck.templateUri)
  +                       && this.templateKey.equals(jxck.templateKey);
  +             }
  +             return false;
  +         }
        }
   }
  
  
  

Reply via email to