Package org.apache.wiki.auth.authorize

# Class XMLGroupDatabase

java.lang.Object
org.apache.wiki.auth.authorize.XMLGroupDatabase

All Implemented Interfaces:
  `GroupDatabase`

public class XMLGroupDatabase extends Object implements GroupDatabase

GroupDatabase implementation for loading, persisting and storing wiki groups, using an XML file for persistence. Group entries are simple `<group>` elements under the root. Each group member is representated by a `<member>` element. For example:

> `<groups>
> <group name="TV" created="Jun 20, 2006 2:50:54 PM" lastModified="Jan 21, 2006 2:50:54 PM">
> <member principal="Archie Bunker" />
> <member principal="BullwinkleMoose" />
> <member principal="Fred Friendly" />
> </group>
> <group name="Literature" created="Jun 22, 2006 2:50:54 PM" lastModified="Jan 23, 2006 2:50:54 PM">
> <member principal="Charles Dickens" />
> <member principal="Homer" />
> </group>
> </groups>`

Since:
  2.4.17

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`PROP_DATABASE`
The jspwiki.properties property specifying the file system location of the group database.

## Constructor Summary

Constructors
Constructor
Description
`XMLGroupDatabase()`

## Method Summary

Modifier and Type
Method
Description
`void`
`delete(Group group)`
Looks up and deletes a `Group` from the group database.
`Group[]`
`groups()`
Returns all wiki groups that are stored in the GroupDatabase as an array of Group objects.
`void`
`initialize(Engine engine, Properties props)`
Initializes the group database based on values from a Properties object.
`void`
`save(Group group, Principal modifier)`
Saves a Group to the group database.

### Methods inherited from class java.lang.Object

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

## Field Details

### PROP_DATABASE

public static final String PROP_DATABASE
The jspwiki.properties property specifying the file system location of the group database.

See Also:
  - Constant Field Values

## Constructor Details

### XMLGroupDatabase

public XMLGroupDatabase()

## Method Details

### delete

public void delete(Group group) throws WikiSecurityException
Looks up and deletes a `Group` from the group database. If the group database does not contain the supplied Group. this method throws a `NoSuchPrincipalException`. The method commits the results of the delete to persistent storage.

Specified by:
  `delete` in interface `GroupDatabase`
Parameters:
  `group` - the group to remove
Throws:
  `WikiSecurityException` - if the database does not contain the supplied group (thrown as `NoSuchPrincipalException`) or if the commit did not succeed

### groups

public Group[] groups() throws WikiSecurityException
Returns all wiki groups that are stored in the GroupDatabase as an array of Group objects. If the database does not contain any groups, this method will return a zero-length array. This method causes back-end storage to load the entire set of group; thus, it should be called infrequently (e.g., at initialization time).

Specified by:
  `groups` in interface `GroupDatabase`
Returns:
  the wiki groups
Throws:
  `WikiSecurityException` - if the groups cannot be returned by the back-end

### initialize

public void initialize(Engine engine, Properties props) throws NoRequiredPropertyException, WikiSecurityException
Initializes the group database based on values from a Properties object. The properties object must contain a file path to the XML database file whose key is `PROP_DATABASE`.

Specified by:
  `initialize` in interface `GroupDatabase`
Parameters:
  `engine` - the wiki engine
  `props` - the properties used to initialize the group database
Throws:
  `NoRequiredPropertyException` - if the user database cannot be located, parsed, or opened
  `WikiSecurityException` - if the database could not be initialized successfully

### save

public void save(Group group, Principal modifier) throws WikiSecurityException
Saves a Group to the group database. Note that this method must fail, and throw an `IllegalArgumentException`, if the proposed group is the same name as one of the built-in Roles: e.g., Admin, Authenticated, etc. The database is responsible for setting create/modify timestamps, upon a successful save, to the Group. The method commits the results of the delete to persistent storage.

Specified by:
  `save` in interface `GroupDatabase`
Parameters:
  `group` - the Group to save
  `modifier` - the user who saved the Group
Throws:
  `WikiSecurityException` - if the Group could not be saved successfully