Class AbstractFileProvider

java.lang.Object
org.apache.wiki.providers.AbstractFileProvider
All Implemented Interfaces:
PageProvider, WikiProvider
Direct Known Subclasses:
FileSystemProvider, VersioningFileProvider

public abstract class AbstractFileProvider
extends java.lang.Object
implements PageProvider
Provides a simple directory based repository for Wiki pages.

All files have ".txt" appended to make life easier for those who insist on using Windows or other software which makes assumptions on the files contents based on its name.

This class functions as a superclass to all file based providers.

Since:
2.1.21.
  • Nested Class Summary

    Nested Classes
    Modifier and Type Class Description
    static class  AbstractFileProvider.WikiFileFilter
    A simple filter which filters only those filenames which correspond to the file extension used.
  • Field Summary

    Fields
    Modifier and Type Field Description
    static java.lang.String DEFAULT_ENCODING
    The default encoding.
    static int DEFAULT_MAX_PROPKEYLENGTH  
    static int DEFAULT_MAX_PROPLIMIT  
    static int DEFAULT_MAX_PROPVALUELENGTH  
    static java.lang.String FILE_EXT
    All files should have this extension to be recognized as JSPWiki files.
    protected java.lang.String m_encoding  
    protected Engine m_engine  
    static int MAX_PROPKEYLENGTH
    This number limits the length of a custom page property key length.
    static int MAX_PROPLIMIT
    This parameter limits the number of custom page properties allowed on a page
    static int MAX_PROPVALUELENGTH
    This number limits the length of a custom page property value length.
    static java.lang.String PROP_CUSTOMPROP_MAXKEYLENGTH  
    static java.lang.String PROP_CUSTOMPROP_MAXLIMIT  
    static java.lang.String PROP_CUSTOMPROP_MAXVALUELENGTH  
    static java.lang.String PROP_PAGEDIR
    Name of the property that defines where page directories are.

    Fields inherited from interface org.apache.wiki.api.providers.WikiProvider

    LATEST_VERSION
  • Constructor Summary

    Constructors
    Constructor Description
    AbstractFileProvider()  
  • Method Summary

    Modifier and Type Method Description
    protected java.util.Properties addCustomProperties​(Page page, java.util.Properties props)
    By default all page attributes that start with "@" are returned as custom properties.
    void deletePage​(java.lang.String pageName)
    Removes an entire page from the repository.
    void deleteVersion​(java.lang.String pageName, int version)
    Removes a specific version from the repository.
    protected java.io.File findPage​(java.lang.String page)
    Finds a Wiki page from the page repository.
    java.util.Collection<SearchResult> findPages​(QueryItem[] query)
    Iterates through all WikiPages, matches them against the given query, and returns a Collection of SearchResult objects.
    java.util.Collection<Page> getAllChangedSince​(java.util.Date date)
    Does not work.
    java.util.Collection<Page> getAllPages()
    Returns all pages.
    protected void getCustomProperties​(Page page, java.util.Properties defaultProperties)
    Get custom properties using addCustomProperties(Page, Properties), validate them using validateCustomPageProperties(Properties) and add them to default properties provided
    int getPageCount()
    Gets the number of pages.
    Page getPageInfo​(java.lang.String page, int version)
    Always returns the latest version, since FileSystemProvider does not support versioning.
    java.lang.String getPageText​(java.lang.String page, int version)
    This implementation just returns the current version, as filesystem does not provide versioning information for now.
    java.lang.String getProviderInfo()
    Return a valid HTML string for information.
    java.util.List<Page> getVersionHistory​(java.lang.String page)
    The FileSystemProvider provides only one version.
    void initialize​(Engine engine, java.util.Properties properties)
    Initializes the page provider.
    protected java.lang.String mangleName​(java.lang.String pagename)
    This makes sure that the queried page name is still readable by the file system.
    boolean pageExists​(java.lang.String page)
    Return true, if page exists.
    boolean pageExists​(java.lang.String page, int version)
    Return true, if page with a particular version exists.
    void putPageText​(Page page, java.lang.String text)
    Attempts to save the page text for page "page".
    protected void setCustomProperties​(Page page, java.util.Properties properties)
    Set the custom properties provided into the given page.
    protected java.lang.String unmangleName​(java.lang.String filename)
    This makes the reverse of mangleName.
    protected void validateCustomPageProperties​(java.util.Properties customProperties)
    Default validation, validates that key and value is ASCII StringUtils.isAsciiPrintable() and within lengths set up in jspwiki-custom.properties.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.apache.wiki.api.providers.PageProvider

    movePage
  • Field Details

  • Constructor Details

  • Method Details

    • initialize

      public void initialize​(Engine engine, java.util.Properties properties) throws NoRequiredPropertyException, java.io.IOException, java.io.FileNotFoundException
      Initializes the page provider.
      Specified by:
      initialize in interface WikiProvider
      Parameters:
      engine - Engine to own this provider
      properties - A set of properties used to initialize this provider
      Throws:
      java.io.FileNotFoundException - If the specified page directory does not exist.
      java.io.IOException - In case the specified page directory is a file, not a directory.
      NoRequiredPropertyException - If the provider needs a property which is not found in the property set
    • mangleName

      protected java.lang.String mangleName​(java.lang.String pagename)
      This makes sure that the queried page name is still readable by the file system. For example, all XML entities and slashes are encoded with the percent notation.
      Parameters:
      pagename - The name to mangle
      Returns:
      The mangled name.
    • unmangleName

      protected java.lang.String unmangleName​(java.lang.String filename)
      This makes the reverse of mangleName.
      Parameters:
      filename - The filename to unmangle
      Returns:
      The unmangled name.
    • findPage

      protected java.io.File findPage​(java.lang.String page)
      Finds a Wiki page from the page repository.
      Parameters:
      page - The name of the page.
      Returns:
      A File to the page. May be null.
    • pageExists

      public boolean pageExists​(java.lang.String page)
      Return true, if page exists.
      Specified by:
      pageExists in interface PageProvider
      Parameters:
      page - The page name.
      Returns:
      true, if the page exists; false otherwise.
    • pageExists

      public boolean pageExists​(java.lang.String page, int version)
      Return true, if page with a particular version exists.
      Specified by:
      pageExists in interface PageProvider
      Parameters:
      page - The page name to check for
      version - The version to check
      Returns:
      True, if page exists; false otherwise.
    • getPageText

      public java.lang.String getPageText​(java.lang.String page, int version) throws ProviderException
      This implementation just returns the current version, as filesystem does not provide versioning information for now. Gets a specific version out of the repository.
      Specified by:
      getPageText in interface PageProvider
      Parameters:
      page - 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:
      ProviderException - If something goes wrong.
    • putPageText

      public void putPageText​(Page page, java.lang.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 PageProvider
      Parameters:
      page - The WikiPage to save
      text - The text to save.
      Throws:
      ProviderException - If something goes wrong.
    • getAllPages

      public java.util.Collection<Page> getAllPages() throws ProviderException
      Returns all pages. Each element in the returned Collection should be a WikiPage.
      Specified by:
      getAllPages in interface PageProvider
      Returns:
      A collection of WikiPages
      Throws:
      ProviderException - If something goes wrong.
    • getAllChangedSince

      public java.util.Collection<Page> getAllChangedSince​(java.util.Date date)
      Does not work.
      Specified by:
      getAllChangedSince in interface PageProvider
      Parameters:
      date - The date to check from
      Returns:
      A Collection of WikiPages
    • getPageCount

      public int getPageCount()
      Gets the number of pages.
      Specified by:
      getPageCount in interface PageProvider
      Returns:
      The number of pages in the repository
    • findPages

      public java.util.Collection<SearchResult> findPages​(QueryItem[] query)
      Iterates through all WikiPages, matches them against the given query, and returns a Collection of SearchResult objects. 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 PageProvider
      Parameters:
      query - An array of QueryItems to match
      Returns:
      A Collection of WikiPages.
    • getPageInfo

      public Page getPageInfo​(java.lang.String page, int version) throws ProviderException
      Always returns the latest version, since FileSystemProvider does not support versioning. Returns info about the page.
      Specified by:
      getPageInfo in interface PageProvider
      Parameters:
      page - The page name
      version - The version number
      Returns:
      A filled WikiPage.
      Throws:
      ProviderException - If something goes wrong.
    • getVersionHistory

      public java.util.List<Page> getVersionHistory​(java.lang.String page) throws ProviderException
      The FileSystemProvider provides only one version. Returns version history. Each element should be a WikiPage.
      Specified by:
      getVersionHistory in interface PageProvider
      Parameters:
      page - The name of the page to get the history from.
      Returns:
      A collection of WikiPages.
      Throws:
      ProviderException - If something goes wrong.
    • getProviderInfo

      public java.lang.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​(java.lang.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 PageProvider
      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​(java.lang.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 PageProvider
      Parameters:
      pageName - Name of the page to be removed completely.
      Throws:
      ProviderException - If the page could not be removed for some reason.
    • setCustomProperties

      protected void setCustomProperties​(Page page, java.util.Properties properties)
      Set the custom properties provided into the given page.
      Since:
      2.10.2
    • getCustomProperties

      protected void getCustomProperties​(Page page, java.util.Properties defaultProperties) throws java.io.IOException
      Get custom properties using addCustomProperties(Page, Properties), validate them using validateCustomPageProperties(Properties) and add them to default properties provided
      Throws:
      java.io.IOException
      Since:
      2.10.2
    • addCustomProperties

      protected java.util.Properties addCustomProperties​(Page page, java.util.Properties props)
      By default all page attributes that start with "@" are returned as custom properties. This can be overwritten by custom FileSystemProviders to save additional properties. CustomPageProperties are validated by validateCustomPageProperties(Properties)
      Parameters:
      page - the current page
      props - the default properties of this page
      Returns:
      default implementation returns empty Properties.
      Since:
      2.10.2
    • validateCustomPageProperties

      protected void validateCustomPageProperties​(java.util.Properties customProperties) throws java.io.IOException
      Default validation, validates that key and value is ASCII StringUtils.isAsciiPrintable() and within lengths set up in jspwiki-custom.properties. This can be overwritten by custom FileSystemProviders to validate additional properties See https://issues.apache.org/jira/browse/JSPWIKI-856
      Parameters:
      customProperties - the custom page properties being added
      Throws:
      java.io.IOException
      Since:
      2.10.2