com.ecyrd.jspwiki.providers
Class CachingProvider

java.lang.Object
  extended by com.ecyrd.jspwiki.providers.CachingProvider
All Implemented Interfaces:
VersioningProvider, WikiPageProvider, WikiProvider

public class CachingProvider
extends Object
implements WikiPageProvider, VersioningProvider

Provides a caching page provider. This class rests on top of a real provider class and provides a cache to speed things up. Only if the cache copy of the page text has expired, we fetch it from the provider.

This class also detects if someone has modified the page externally, not through JSPWiki routines, and throws the proper RepositoryModifiedException.

Heavily based on ideas by Chris Brooking.

Since 2.1.52 uses the OSCache library from OpenSymphony.

Since:
1.6.4
See Also:
RepositoryModifiedException

Field Summary
static String PROP_CACHECAPACITY
          The capacity of the cache.
static String PROP_CACHECHECKINTERVAL
          Defines, in seconds, the amount of time a text will live in the cache at most before requiring a refresh.
 
Fields inherited from interface com.ecyrd.jspwiki.WikiProvider
LATEST_VERSION
 
Constructor Summary
CachingProvider()
           
 
Method Summary
 void deletePage(String pageName)
          Removes an entire page from the repository.
 void deleteVersion(String pageName, int version)
          Removes a specific version from the repository.
 Collection findPages(QueryItem[] query)
          Finds pages based on the query.
 Collection getAllChangedSince(Date date)
          Gets a list of recent changes.
 Collection getAllPages()
          Returns all pages.
 int getPageCount()
          Gets the number of pages.
 WikiPage getPageInfo(String pageName, int version)
          Returns info about the page.
 String getPageText(String pageName, int version)
          Gets a specific version out of the repository.
 String getProviderInfo()
          Return a valid HTML string for information.
 WikiPageProvider getRealProvider()
          Returns the actual used provider.
 List getVersionHistory(String pageName)
          Returns version history.
 void initialize(WikiEngine engine, Properties properties)
          Initializes the page provider.
 void movePage(String from, String to)
          Move a page
 boolean pageExists(String pageName)
          Return true, if page exists.
 boolean pageExists(String pageName, int version)
          Return true, if page with a particular version exists.
 void putPageText(WikiPage page, String text)
          Attempts to save the page text for page "page".
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROP_CACHECHECKINTERVAL

public static final String PROP_CACHECHECKINTERVAL
Defines, in seconds, the amount of time a text will live in the cache at most before requiring a refresh.

See Also:
Constant Field Values

PROP_CACHECAPACITY

public static final String PROP_CACHECAPACITY
The capacity of the cache.

See Also:
Constant Field Values
Constructor Detail

CachingProvider

public CachingProvider()
Method Detail

initialize

public void initialize(WikiEngine engine,
                       Properties properties)
                throws NoRequiredPropertyException,
                       IOException
Initializes the page provider.

Specified by:
initialize in interface WikiProvider
Parameters:
engine - WikiEngine to own this provider
properties - A set of properties used to initialize this provider
Throws:
NoRequiredPropertyException - If the provider needs a property which is not found in the property set
IOException - If there is an IO problem

pageExists

public boolean pageExists(String pageName,
                          int version)
Return true, if page with a particular version exists.

Specified by:
pageExists in interface VersioningProvider
Parameters:
pageName - The page name to check for
version - The version to check
Returns:
True, if page exists; false otherwise.

pageExists

public boolean pageExists(String pageName)
Return true, if page exists.

Specified by:
pageExists in interface WikiPageProvider
Parameters:
pageName - The page name.
Returns:
true, if the page exists; false otherwise.

getPageText

public String getPageText(String pageName,
                          int version)
                   throws ProviderException,
                          RepositoryModifiedException
Gets a specific version out of the repository.

Specified by:
getPageText in interface WikiPageProvider
Parameters:
pageName - Name of the page to fetch.
version - Version of the page to fetch.
Returns:
The content of the page, or null, if the page does not exist.
Throws:
RepositoryModifiedException - If the page has been externally modified.
ProviderException - If something goes wrong.

putPageText

public void putPageText(WikiPage page,
                        String text)
                 throws ProviderException
Attempts to save the page text for page "page". Note that the provider creates a new version regardless of what the version parameter of the WikiPage is.

Specified by:
putPageText in interface WikiPageProvider
Parameters:
page - The WikiPage to save
text - The text to save.
Throws:
ProviderException - If something goes wrong.

getAllPages

public Collection getAllPages()
                       throws ProviderException
Returns all pages. Each element in the returned Collection should be a WikiPage.

Specified by:
getAllPages in interface WikiPageProvider
Returns:
A collection of WikiPages
Throws:
ProviderException - If something goes wrong.

getAllChangedSince

public Collection getAllChangedSince(Date date)
Gets a list of recent changes.

Specified by:
getAllChangedSince in interface WikiPageProvider
Parameters:
date - The date to check from
Returns:
A Collection of WikiPages

getPageCount

public int getPageCount()
                 throws ProviderException
Gets the number of pages.

Specified by:
getPageCount in interface WikiPageProvider
Returns:
The number of pages in the repository
Throws:
ProviderException - If something goes wrong

findPages

public Collection findPages(QueryItem[] query)
Finds pages based on the query. Only applicable to providers which implement the FastSearch interface. Otherwise JSPWiki will use its internal cache.

This method should really be a part of the FastSearch IF.

Specified by:
findPages in interface WikiPageProvider
Parameters:
query - An array of QueryItems to match
Returns:
A Collection of WikiPages.

getPageInfo

public WikiPage getPageInfo(String pageName,
                            int version)
                     throws ProviderException,
                            RepositoryModifiedException
Returns info about the page.

Specified by:
getPageInfo in interface WikiPageProvider
Parameters:
pageName - The page name
version - The version number
Returns:
A filled WikiPage.
Throws:
ProviderException - If something goes wrong.
RepositoryModifiedException

getVersionHistory

public List getVersionHistory(String pageName)
                       throws ProviderException
Returns version history. Each element should be a WikiPage.

Specified by:
getVersionHistory in interface WikiPageProvider
Parameters:
pageName - The name of the page to get the history from.
Returns:
A collection of WikiPages.
Throws:
ProviderException - If something goes wrong.

getProviderInfo

public String getProviderInfo()
Return a valid HTML string for information. May be anything.

Specified by:
getProviderInfo in interface WikiProvider
Returns:
A string describing the provider.

deleteVersion

public void deleteVersion(String pageName,
                          int version)
                   throws ProviderException
Removes a specific version from the repository. The implementations should really do no more security checks, since that is the domain of the PageManager. Just delete it as efficiently as you can.

Specified by:
deleteVersion in interface WikiPageProvider
Parameters:
pageName - Name of the page to be removed.
version - Version of the page to be removed. May be LATEST_VERSION.
Throws:
ProviderException - If the page cannot be removed for some reason.

deletePage

public void deletePage(String pageName)
                throws ProviderException
Removes an entire page from the repository. The implementations should really do no more security checks, since that is the domain of the PageManager. Just delete it as efficiently as you can. You should also delete any auxiliary files that belong to this page, IF they were created by this provider.

The reason why this is named differently from deleteVersion() (logically, this method should be an overloaded version) is that I want to be absolutely sure I don't accidentally use the wrong method. With overloading something like that happens sometimes...

Specified by:
deletePage in interface WikiPageProvider
Parameters:
pageName - Name of the page to be removed completely.
Throws:
ProviderException - If the page could not be removed for some reason.

movePage

public void movePage(String from,
                     String to)
              throws ProviderException
Move a page

Specified by:
movePage in interface WikiPageProvider
Parameters:
from - Name of the page to move.
to - New name of the page.
Throws:
ProviderException - If the page could not be moved for some reason.

getRealProvider

public WikiPageProvider getRealProvider()
Returns the actual used provider.

Returns:
The real provider.
Since:
2.0