cziegeler 2003/08/11 05:48:56
Modified: src/java/org/apache/cocoon/generation JXTemplateGenerator.java Log: Use SourceValidity instead of last modified Revision Changes Path 1.6 +33 -10 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- JXTemplateGenerator.java 8 Aug 2003 18:49:06 -0000 1.5 +++ JXTemplateGenerator.java 11 Aug 2003 12:48:56 -0000 1.6 @@ -88,6 +88,7 @@ import org.apache.commons.jxpath.*; import org.apache.excalibur.source.Source; import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceValidity; import org.mozilla.javascript.*; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -1125,7 +1126,7 @@ StartDocument(Locator location) { super(location); } - long compileTime; + SourceValidity compileTime; EndDocument endDocument; // null if document fragment } @@ -2569,13 +2570,18 @@ } catch (SourceException se) { throw SourceUtil.handle("Error during resolving of '" + src + "'.", se); } - long lastMod = inputSource.getLastModified(); String uri = inputSource.getURI(); synchronized (cache) { StartDocument startEvent = (StartDocument)cache.get(uri); - if (startEvent != null && - lastMod > startEvent.compileTime) { - cache.remove(uri); + if (startEvent != null) { + int valid = startEvent.compileTime.isValid(); + if ( valid == SourceValidity.UNKNOWN ) { + SourceValidity validity = inputSource.getValidity(); + valid = startEvent.compileTime.isValid(validity); + } + if ( valid != SourceValidity.VALID) { + cache.remove(uri); + } } } } @@ -2686,11 +2692,11 @@ startEvent = (StartDocument)cache.get(inputSource.getURI()); } if (startEvent == null) { - long compileTime = inputSource.getLastModified(); + SourceValidity validity = inputSource.getValidity(); Parser parser = new Parser(); SourceUtil.parse(this.manager, this.inputSource, parser); startEvent = parser.getStartEvent(); - startEvent.compileTime = compileTime; + startEvent.compileTime = validity; synchronized (cache) { cache.put(inputSource.getURI(), startEvent); } @@ -3522,12 +3528,26 @@ ev.location, exc); } - long lastMod = input.getLastModified(); + SourceValidity validity = null; StartDocument doc; synchronized (cache) { doc = (StartDocument)cache.get(input.getURI()); if (doc != null) { - if (doc.compileTime < lastMod) { + boolean recompile = false; + if ( doc.compileTime == null) { + recompile = true; + } else { + int valid = doc.compileTime.isValid(); + if ( valid == SourceValidity.UNKNOWN ) { + validity = input.getValidity(); + valid = doc.compileTime.isValid(validity); + + } + if ( valid != SourceValidity.VALID ) { + recompile = true; + } + } + if ( recompile ) { doc = null; // recompile } } @@ -3537,7 +3557,10 @@ Parser parser = new Parser(); SourceUtil.parse(this.manager, input, parser); doc = parser.getStartEvent(); - doc.compileTime = lastMod; + if ( validity == null ) { + validity = input.getValidity(); + } + doc.compileTime = validity; } catch (Exception exc) { throw new SAXParseException(exc.getMessage(), ev.location,