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:58 UTC

svn commit: r106439 - /cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java

Author: unico
Date: Wed Nov 24 09:35:57 2004
New Revision: 106439

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

Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java
Url: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java?view=diff&rev=106439&p1=cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java&r1=106438&p2=cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java&r2=106439
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java	(original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java	Wed Nov 24 09:35:57 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) {
@@ -3261,5 +3265,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;
+        }
+
     }
 }