You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by un...@apache.org on 2004/11/24 18:35:48 UTC

svn commit: r106437 - /cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java

Author: unico
Date: Wed Nov 24 09:35:45 2004
New Revision: 106437

URL: http://svn.apache.org/viewcvs?view=rev&rev=106437
Log:
jxtg validity should be combination of evaluated validity and the template source's validity
Modified:
   cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java

Modified: cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java?view=diff&rev=106437&p1=cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java&r1=106436&p2=cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java&r2=106437
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java	(original)
+++ cocoon/trunk/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java	Wed Nov 24 09:35:45 2004
@@ -3212,11 +3212,15 @@
 	public SourceValidity getValidity() {
     	JXTExpression validityExpr = (JXTExpression)getCurrentTemplateProperty(VALIDITY);
         try {
-			return (SourceValidity)getValue(validityExpr, globalJexlContext, jxpathContext);
+            final SourceValidity sourceValidity = this.inputSource.getValidity();
+            final SourceValidity templateValidity = (SourceValidity) getValue(validityExpr, globalJexlContext, jxpathContext);
+            if (sourceValidity != null && templateValidity != null) {
+                return new JXSourceValidity(sourceValidity, templateValidity);
+            }
 		} catch (Exception e) {
-			getLogger().error( "error evaluating cache key", e );
-			return null;
+			getLogger().error( "error evaluating cache validity", e );
 		}
+		return null;
 	}
 	
 	private Object getCurrentTemplateProperty(String propertyName) {
@@ -3239,7 +3243,7 @@
         Node node = builder.getDocument().getDocumentElement();
         return node.getChildNodes();
 	}
-	
+
 	static final class JXCacheKey implements Serializable {
 	    private final String templateUri;
 	    private final Serializable templateKey;
@@ -3262,4 +3266,50 @@
 	        return false;
 	    }
 	}
+
+    static final class JXSourceValidity implements SourceValidity, Serializable {
+        private final SourceValidity sourceValidity;
+        private final SourceValidity templateValidity;
+        private JXSourceValidity(SourceValidity sourceValidity, SourceValidity templateValidity) {
+            this.sourceValidity = sourceValidity;
+            this.templateValidity = templateValidity;
+        }
+
+        public int isValid() {
+            switch (sourceValidity.isValid()) {
+                case SourceValidity.INVALID: return SourceValidity.INVALID;
+                case SourceValidity.UNKNOWN: {
+                    if (templateValidity.isValid() == SourceValidity.INVALID) {
+                        return SourceValidity.INVALID;
+                    }
+                    else {
+                        return SourceValidity.UNKNOWN;
+                    }
+                }
+                case SourceValidity.VALID: return templateValidity.isValid();
+            }
+            return SourceValidity.UNKNOWN;
+        }
+
+        public int isValid(SourceValidity otherValidity) {
+            if (otherValidity instanceof JXSourceValidity) {
+                JXSourceValidity otherJXValidity = (JXSourceValidity) otherValidity;
+                switch (sourceValidity.isValid(otherJXValidity.sourceValidity)) {
+                	case SourceValidity.INVALID: return SourceValidity.INVALID;
+                	case SourceValidity.UNKNOWN: {
+                	    if (templateValidity.isValid(otherJXValidity.templateValidity) == SourceValidity.INVALID) {
+                	        return SourceValidity.INVALID;
+                	    }
+                	    else {
+                	        return SourceValidity.UNKNOWN;
+                	    }
+                	}
+                	case SourceValidity.VALID: return templateValidity.isValid(otherJXValidity.templateValidity);
+                }
+            }
+            return 0;
+        }
+
+    }
+
 }