Package org.apache.wiki.providers
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 pagestatic 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
All Methods Instance Methods Concrete Methods 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 usingaddCustomProperties(Page, Properties)
, validate them usingvalidateCustomPageProperties(Properties)
and add them to default properties providedint
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 ASCIIStringUtils.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 Detail
-
m_encoding
protected java.lang.String m_encoding
-
PROP_CUSTOMPROP_MAXLIMIT
public static final java.lang.String PROP_CUSTOMPROP_MAXLIMIT
- See Also:
- Constant Field Values
-
PROP_CUSTOMPROP_MAXKEYLENGTH
public static final java.lang.String PROP_CUSTOMPROP_MAXKEYLENGTH
- See Also:
- Constant Field Values
-
PROP_CUSTOMPROP_MAXVALUELENGTH
public static final java.lang.String PROP_CUSTOMPROP_MAXVALUELENGTH
- See Also:
- Constant Field Values
-
DEFAULT_MAX_PROPLIMIT
public static final int DEFAULT_MAX_PROPLIMIT
- See Also:
- Constant Field Values
-
DEFAULT_MAX_PROPKEYLENGTH
public static final int DEFAULT_MAX_PROPKEYLENGTH
- See Also:
- Constant Field Values
-
DEFAULT_MAX_PROPVALUELENGTH
public static final int DEFAULT_MAX_PROPVALUELENGTH
- See Also:
- Constant Field Values
-
MAX_PROPLIMIT
public static int MAX_PROPLIMIT
This parameter limits the number of custom page properties allowed on a page
-
MAX_PROPKEYLENGTH
public static int MAX_PROPKEYLENGTH
This number limits the length of a custom page property key length. The default value here designed with future JDBC providers in mind.
-
MAX_PROPVALUELENGTH
public static int MAX_PROPVALUELENGTH
This number limits the length of a custom page property value length. The default value here designed with future JDBC providers in mind.
-
PROP_PAGEDIR
public static final java.lang.String PROP_PAGEDIR
Name of the property that defines where page directories are.- See Also:
- Constant Field Values
-
FILE_EXT
public static final java.lang.String FILE_EXT
All files should have this extension to be recognized as JSPWiki files. We default to .txt, because that is probably easiest for Windows users, and guarantees correct handling.- See Also:
- Constant Field Values
-
DEFAULT_ENCODING
public static final java.lang.String DEFAULT_ENCODING
The default encoding.
-
-
Constructor Detail
-
AbstractFileProvider
public AbstractFileProvider()
-
-
Method Detail
-
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 interfaceWikiProvider
- Parameters:
engine
- Engine to own this providerproperties
- 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 interfacePageProvider
- 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 interfacePageProvider
- Parameters:
page
- The page name to check forversion
- 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 interfacePageProvider
- 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 interfacePageProvider
- Parameters:
page
- The WikiPage to savetext
- 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 interfacePageProvider
- 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 interfacePageProvider
- 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 interfacePageProvider
- 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 interfacePageProvider
- 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 interfacePageProvider
- Parameters:
page
- The page nameversion
- 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 interfacePageProvider
- 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 interfaceWikiProvider
- 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 interfacePageProvider
- 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 interfacePageProvider
- 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 usingaddCustomProperties(Page, Properties)
, validate them usingvalidateCustomPageProperties(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 byvalidateCustomPageProperties(Properties)
- Parameters:
page
- the current pageprops
- 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 ASCIIStringUtils.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
-
-