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;
+        }
+
     }
 }

Reply via email to