Package org.apache.wiki.providers

# Class AbstractFileProvider

java.lang.Object
org.apache.wiki.providers.AbstractFileProvider

All Implemented Interfaces:
  `org.apache.wiki.api.providers.PageProvider`, `org.apache.wiki.api.providers.WikiProvider`

Direct Known Subclasses:
  `FileSystemProvider`, `VersioningFileProvider`

public abstract class AbstractFileProvider extends Object implements org.apache.wiki.api.providers.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 final String`
`DEFAULT_ENCODING`
The default encoding.
`static final int`
`DEFAULT_MAX_PROPKEYLENGTH`
`static final int`
`DEFAULT_MAX_PROPLIMIT`
`static final int`
`DEFAULT_MAX_PROPVALUELENGTH`
`static final String`
`FILE_EXT`
All files should have this extension to be recognized as JSPWiki files.
`protected String`
`m_encoding`
`protected org.apache.wiki.api.core.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 final String`
`PROP_CUSTOMPROP_MAXKEYLENGTH`
`static final String`
`PROP_CUSTOMPROP_MAXLIMIT`
`static final String`
`PROP_CUSTOMPROP_MAXVALUELENGTH`
`static final 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 Properties`
`addCustomProperties(org.apache.wiki.api.core.Page page, Properties props)`
By default all page attributes that start with "@" are returned as custom properties.
`void`
`deletePage(String pageName)`
`void`
`deleteVersion(String pageName, int version)`
`String`
`deobfuscate(String pageContent)`
An api hook to provide deobfuscation of data before it's written to disk.
`protected File`
`findPage(String page)`
Finds a Wiki page from the page repository.
`Collection<org.apache.wiki.api.search.SearchResult>`
`findPages(org.apache.wiki.api.search.QueryItem[] query)`
Iterates through all WikiPages, matches them against the given query, and returns a Collection of SearchResult objects.
`Collection<org.apache.wiki.api.core.Page>`
`getAllChangedSince(Date date)`
Does not work.
`Collection<org.apache.wiki.api.core.Page>`
`getAllPages()`
`protected void`
`getCustomProperties(org.apache.wiki.api.core.Page page, Properties defaultProperties)`
Get custom properties using `addCustomProperties(Page, Properties)`, validate them using `validateCustomPageProperties(Properties)` and add them to default properties provided
`int`
`getPageCount()`
`org.apache.wiki.api.core.Page`
`getPageInfo(String page, int version)`
Always returns the latest version, since FileSystemProvider does not support versioning.
`String`
`getPageText(String page, int version)`
This implementation just returns the current version, as filesystem does not provide versioning information for now.
`String`
`getProviderInfo()`
`List<org.apache.wiki.api.core.Page>`
`getVersionHistory(String page)`
The FileSystemProvider provides only one version.
`void`
`initialize(org.apache.wiki.api.core.Engine engine, Properties properties)`
`protected String`
`mangleName(String pagename)`
This makes sure that the queried page name is still readable by the file system.
`String`
`obfuscate(String pageContent)`
An api hook to provide obfuscation of data before it's written to disk.
`boolean`
`pageExists(String page)`
`boolean`
`pageExists(String page, int version)`
`void`
`putPageText(org.apache.wiki.api.core.Page page, String text)`
`protected void`
`setCustomProperties(org.apache.wiki.api.core.Page page, Properties properties)`
Set the custom properties provided into the given page.
`protected String`
`unmangleName(String filename)`
This makes the reverse of mangleName.
`protected void`
`validateCustomPageProperties(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

### m_encoding

protected String m_encoding

### m_engine

protected org.apache.wiki.api.core.Engine m_engine

### PROP_CUSTOMPROP_MAXLIMIT

public static final String PROP_CUSTOMPROP_MAXLIMIT

See Also:
  - Constant Field Values

### PROP_CUSTOMPROP_MAXKEYLENGTH

public static final String PROP_CUSTOMPROP_MAXKEYLENGTH

See Also:
  - Constant Field Values

### PROP_CUSTOMPROP_MAXVALUELENGTH

public static final 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 String PROP_PAGEDIR
Name of the property that defines where page directories are.

See Also:
  - Constant Field Values

### FILE_EXT

public static final 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 String DEFAULT_ENCODING
The default encoding.

## Constructor Details

### AbstractFileProvider

public AbstractFileProvider()

## Method Details

### initialize

public void initialize(org.apache.wiki.api.core.Engine engine, Properties properties) throws org.apache.wiki.api.exceptions.NoRequiredPropertyException, IOException, FileNotFoundException

Specified by:
  `initialize` in interface `org.apache.wiki.api.providers.WikiProvider`
Throws:
  `FileNotFoundException` - If the specified page directory does not exist.
  `IOException` - In case the specified page directory is a file, not a directory.
  `org.apache.wiki.api.exceptions.NoRequiredPropertyException`

### mangleName

protected String mangleName(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 String unmangleName(String filename)
This makes the reverse of mangleName.

Parameters:
  `filename` - The filename to unmangle
Returns:
  The unmangled name.

### findPage

protected File findPage(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(String page)

Specified by:
  `pageExists` in interface `org.apache.wiki.api.providers.PageProvider`

### pageExists

public boolean pageExists(String page, int version)

Specified by:
  `pageExists` in interface `org.apache.wiki.api.providers.PageProvider`

### getPageText

public String getPageText(String page, int version) throws org.apache.wiki.api.exceptions.ProviderException
This implementation just returns the current version, as filesystem does not provide versioning information for now.

Specified by:
  `getPageText` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### obfuscate

public String obfuscate(String pageContent)
An api hook to provide obfuscation of data before it's written to disk. Useful for wiring in your own custom encryption mechanism if so desired.

Parameters:
  `pageContent` -
Returns:
Since:
  3.0.0

### deobfuscate

public String deobfuscate(String pageContent)
An api hook to provide deobfuscation of data before it's written to disk. Useful for wiring in your own custom decryption mechanism if so desired.

Parameters:
  `pageContent` -
Returns:
Since:
  3.0.0

### putPageText

public void putPageText(org.apache.wiki.api.core.Page page, String text) throws org.apache.wiki.api.exceptions.ProviderException

Specified by:
  `putPageText` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### getAllPages

public Collection<org.apache.wiki.api.core.Page> getAllPages() throws org.apache.wiki.api.exceptions.ProviderException

Specified by:
  `getAllPages` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### getAllChangedSince

public Collection<org.apache.wiki.api.core.Page> getAllChangedSince(Date date)
Does not work.

Specified by:
  `getAllChangedSince` in interface `org.apache.wiki.api.providers.PageProvider`
Parameters:
  `date` -
Returns:

### getPageCount

public int getPageCount()

Specified by:
  `getPageCount` in interface `org.apache.wiki.api.providers.PageProvider`

### findPages

public Collection<org.apache.wiki.api.search.SearchResult> findPages(org.apache.wiki.api.search.QueryItem[] query)
Iterates through all WikiPages, matches them against the given query, and returns a Collection of SearchResult objects.

Specified by:
  `findPages` in interface `org.apache.wiki.api.providers.PageProvider`

### getPageInfo

public org.apache.wiki.api.core.Page getPageInfo(String page, int version) throws org.apache.wiki.api.exceptions.ProviderException
Always returns the latest version, since FileSystemProvider does not support versioning.

Specified by:
  `getPageInfo` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### getVersionHistory

public List<org.apache.wiki.api.core.Page> getVersionHistory(String page) throws org.apache.wiki.api.exceptions.ProviderException
The FileSystemProvider provides only one version.

Specified by:
  `getVersionHistory` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### getProviderInfo

public String getProviderInfo()

Specified by:
  `getProviderInfo` in interface `org.apache.wiki.api.providers.WikiProvider`

### deleteVersion

public void deleteVersion(String pageName, int version) throws org.apache.wiki.api.exceptions.ProviderException

Specified by:
  `deleteVersion` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### deletePage

public void deletePage(String pageName) throws org.apache.wiki.api.exceptions.ProviderException

Specified by:
  `deletePage` in interface `org.apache.wiki.api.providers.PageProvider`
Throws:
  `org.apache.wiki.api.exceptions.ProviderException`

### setCustomProperties

protected void setCustomProperties(org.apache.wiki.api.core.Page page, Properties properties)
Set the custom properties provided into the given page.

Since:
  2.10.2

### getCustomProperties

protected void getCustomProperties(org.apache.wiki.api.core.Page page, Properties defaultProperties) throws IOException
Get custom properties using `addCustomProperties(Page, Properties)`, validate them using `validateCustomPageProperties(Properties)` and add them to default properties provided

Throws:
  `IOException`
Since:
  2.10.2

### addCustomProperties

protected Properties addCustomProperties(org.apache.wiki.api.core.Page page, 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(Properties customProperties) throws 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:
  `IOException`
Since:
  2.10.2