This is an automated email from the ASF dual-hosted git repository. juanpablo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/jspwiki.git
commit f13a30804bd9ba88a9565c0947f1b3c968867a19 Author: juanpablo <juanpa...@apache.org> AuthorDate: Sat Dec 16 20:02:45 2017 +0100 JSPWIKI-1064 - Link to non-existing page doesn't change if linked page is created --- .../org/apache/wiki/render/RenderingManager.java | 75 ++++++++++++---------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/jspwiki-war/src/main/java/org/apache/wiki/render/RenderingManager.java b/jspwiki-war/src/main/java/org/apache/wiki/render/RenderingManager.java index 466961a..a8dd7fd 100644 --- a/jspwiki-war/src/main/java/org/apache/wiki/render/RenderingManager.java +++ b/jspwiki-war/src/main/java/org/apache/wiki/render/RenderingManager.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.StringReader; import java.lang.reflect.Constructor; import java.util.Collection; -import java.util.Iterator; import java.util.Properties; import org.apache.log4j.Logger; @@ -38,6 +37,7 @@ import org.apache.wiki.modules.InternalModule; import org.apache.wiki.parser.JSPWikiMarkupParser; import org.apache.wiki.parser.MarkupParser; import org.apache.wiki.parser.WikiDocument; +import org.apache.wiki.providers.WikiPageProvider; import org.apache.wiki.util.ClassUtil; import net.sf.ehcache.Cache; @@ -173,7 +173,7 @@ public class RenderingManager implements WikiEventListener, InternalModule } /** - * Returns the default Paxt + * Returns the wiki Parser * @param pagedata the page data * @return A MarkupParser instance. */ @@ -195,46 +195,49 @@ public class RenderingManager implements WikiEventListener, InternalModule * @throws IOException If rendering cannot be accomplished */ // FIXME: The cache management policy is not very good: deleted/changed pages should be detected better. - protected WikiDocument getRenderedDocument(WikiContext context, String pagedata) throws IOException { + protected WikiDocument getRenderedDocument( WikiContext context, String pagedata ) throws IOException { String pageid = context.getRealPage().getName() + VERSION_DELIMITER + context.getRealPage().getVersion(); - if (m_useCache) { - Element element = m_documentCache.get(pageid); - if (element != null) { + if( useCache( context ) ) { + Element element = m_documentCache.get( pageid ); + if ( element != null ) { WikiDocument doc = (WikiDocument) element.getObjectValue(); // // This check is needed in case the different filters have actually changed the page data. // FIXME: Figure out a faster method - if (pagedata.equals(doc.getPageData())) { - if (log.isDebugEnabled()) log.debug("Using cached HTML for page " + pageid); + if( pagedata.equals( doc.getPageData() ) ) { + if( log.isDebugEnabled() ) { + log.debug( "Using cached HTML for page " + pageid ); + } return doc; } - } else { - if (log.isDebugEnabled()) log.debug("Re-rendering and storing " + pageid); + } else if( log.isDebugEnabled() ) { + log.debug( "Re-rendering and storing " + pageid ); } } - // + // Refresh the data content // - try - { + try { MarkupParser parser = getParser( context, pagedata ); WikiDocument doc = parser.parse(); doc.setPageData( pagedata ); - if (m_useCache) { - m_documentCache.put(new Element(pageid, doc)); + if( useCache( context ) ) { + m_documentCache.put( new Element( pageid, doc ) ); } return doc; - } - catch( IOException ex ) - { - log.error("Unable to parse",ex); + } catch( IOException ex ) { + log.error( "Unable to parse", ex ); } return null; } + boolean useCache( WikiContext context ) { + return m_useCache && WikiContext.VIEW.equals( context.getRequestContext() ); + } + /** * Simply renders a WikiDocument to a String. This version does not get the document * from the cache - in fact, it does not cache the document at all. This is @@ -335,30 +338,32 @@ public class RenderingManager implements WikiEventListener, InternalModule } /** - * Flushes the document cache in response to a POST_SAVE_BEGIN event. + * {@inheritDoc} + * + * <p>Flushes the document cache in response to a POST_SAVE_BEGIN event. * * @see org.apache.wiki.event.WikiEventListener#actionPerformed(org.apache.wiki.event.WikiEvent) - * @param event {@inheritDoc} */ @Override - public void actionPerformed(WikiEvent event) { - if (m_useCache) { - if ((event instanceof WikiPageEvent) && (event.getType() == WikiPageEvent.POST_SAVE_BEGIN)) { - if (m_documentCache != null) { - String pageName = ((WikiPageEvent) event).getPageName(); - m_documentCache.remove(pageName); - Collection<String> referringPages = m_engine.getReferenceManager().findReferrers(pageName); + public void actionPerformed( WikiEvent event ) { + log.debug( "event received: " + event.toString() ); + if( m_useCache ) { + if( ( event instanceof WikiPageEvent ) && ( event.getType() == WikiPageEvent.POST_SAVE_BEGIN ) ) { + if( m_documentCache != null ) { + String pageName = ( ( WikiPageEvent ) event ).getPageName(); + m_documentCache.remove( pageName ); + Collection< String > referringPages = m_engine.getReferenceManager().findReferrers( pageName ); // // Flush also those pages that refer to this page (if an nonexistent page - // appears; we need to flush the HTML that refers to the now-existent page + // appears, we need to flush the HTML that refers to the now-existent page) // - if (referringPages != null) { - Iterator<String> i = referringPages.iterator(); - while (i.hasNext()) { - String page = i.next(); - if (log.isDebugEnabled()) log.debug("Flushing " + page); - m_documentCache.remove(page); + if( referringPages != null ) { + for( String page : referringPages ) { + if( log.isDebugEnabled() ) { + log.debug( "Flushing latest version of " + page ); + } + m_documentCache.remove( page + VERSION_DELIMITER + WikiPageProvider.LATEST_VERSION ); } } } -- To stop receiving notification emails like this one, please contact "commits@jspwiki.apache.org" <commits@jspwiki.apache.org>.