Package org.apache.catalina.users

# Class MemoryUserDatabase

java.lang.Object
org.apache.catalina.users.MemoryUserDatabase

All Implemented Interfaces:
  `UserDatabase`

public class MemoryUserDatabase extends Object implements UserDatabase
Concrete implementation of `UserDatabase` that loads all defined users, groups, and roles into an in-memory data structure, and uses a specified XML file for its persistent storage.

This class is thread-safe.

This class does not enforce what, in an RDBMS, would be called referential integrity. Concurrent modifications may result in inconsistent data such as a User retaining a reference to a Role that has been removed from the database.

Since:
  4.1
Author:
  Craig R. McClanahan

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final Map<String,Group>`
  `groups`
  The set of `Group`s defined in this database, keyed by group name.
  `protected final String`
  `id`
  The unique global identifier of this user database.
  `protected String`
  `pathname`
  The relative (to `catalina.base`) or absolute pathname to the XML file in which we will save our persistent information.
  `protected String`
  `pathnameNew`
  The relative or absolute pathname of the file in which we write our new information prior to renaming.
  `protected String`
  `pathnameOld`
  The relative or absolute pathname to the file in which our old information is stored while renaming is in progress.
  `protected boolean`
  `readonly`
  A flag, indicating if the user database is read only.
  `protected final Map<String,Role>`
  `roles`
  The set of `Role`s defined in this database, keyed by role name.
  `protected final Map<String,User>`
  `users`
  The set of `User`s defined in this database, keyed by user name.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MemoryUserDatabase()`
  Create a new instance with default values.
  `MemoryUserDatabase(String id)`
  Create a new instance with the specified values.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `backgroundProcess()`
  Perform any background processing (e.g. checking for changes in persisted storage) required for the user database.
  `void`
  `close()`
  Finalize access to this user database.
  `Group`
  `createGroup(String groupname, String description)`
  Create and return a new `Group` defined in this user database.
  `Role`
  `createRole(String rolename, String description)`
  Create and return a new `Role` defined in this user database.
  `User`
  `createUser(String username, String password, String fullName)`
  Create and return a new `User` defined in this user database.
  `Group`
  `findGroup(String groupname)`
  Return the `Group` with the specified group name, if any; otherwise return `null`.
  `Role`
  `findRole(String rolename)`
  Return the `Role` with the specified role name, if any; otherwise return `null`.
  `User`
  `findUser(String username)`
  Return the `User` with the specified user name, if any; otherwise return `null`.
  `Iterator<Group>`
  `getGroups()`
  `String`
  `getId()`
  `String`
  `getPathname()`
  `boolean`
  `getReadonly()`
  `Iterator<Role>`
  `getRoles()`
  `Iterator<User>`
  `getUsers()`
  `boolean`
  `getWatchSource()`
  `boolean`
  `isWritable()`
  Check for permissions to save this user database to persistent storage location.
  `void`
  `open()`
  Initialize access to this user database.
  `void`
  `removeGroup(Group group)`
  Remove the specified `Group` from this user database.
  `void`
  `removeRole(Role role)`
  Remove the specified `Role` from this user database.
  `void`
  `removeUser(User user)`
  Remove the specified `User` from this user database.
  `void`
  `save()`
  Save any updated information to the persistent storage location for this user database.
  `void`
  `setPathname(String pathname)`
  Set the relative or absolute pathname to the persistent storage file.
  `void`
  `setReadonly(boolean readonly)`
  Setting the readonly status of the user database
  `void`
  `setWatchSource(boolean watchSource)`
  `String`
  `toString()`
  Return a String representation of this UserDatabase.

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

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

  ### Methods inherited from interface org.apache.catalina.UserDatabase

  `isAvailable, isSparse, modifiedGroup, modifiedRole, modifiedUser`

- ## Field Details

  - ### groups

    protected final Map<String,Group> groups
    The set of `Group`s defined in this database, keyed by group name.

  - ### id

    protected final String id
    The unique global identifier of this user database.

  - ### pathname

    protected String pathname
    The relative (to `catalina.base`) or absolute pathname to the XML file in which we will save our persistent information.

  - ### pathnameOld

    protected String pathnameOld
    The relative or absolute pathname to the file in which our old information is stored while renaming is in progress.

  - ### pathnameNew

    protected String pathnameNew
    The relative or absolute pathname of the file in which we write our new information prior to renaming.

  - ### readonly

    protected boolean readonly
    A flag, indicating if the user database is read only.

  - ### roles

    protected final Map<String,Role> roles
    The set of `Role`s defined in this database, keyed by role name.

  - ### users

    protected final Map<String,User> users
    The set of `User`s defined in this database, keyed by user name.

- ## Constructor Details

  - ### MemoryUserDatabase

    public MemoryUserDatabase()
    Create a new instance with default values.

  - ### MemoryUserDatabase

    public MemoryUserDatabase(String id)
    Create a new instance with the specified values.
    Parameters:
      `id` - Unique global identifier of this user database

- ## Method Details

  - ### getGroups

    public Iterator<Group> getGroups()
    Specified by:
      `getGroups` in interface `UserDatabase`
    Returns:
      the set of `Group`s defined in this user database.

  - ### getId

    public String getId()
    Specified by:
      `getId` in interface `UserDatabase`
    Returns:
      the unique global identifier of this user database.

  - ### getPathname

    public String getPathname()
    Returns:
      the relative or absolute pathname to the persistent storage file.

  - ### setPathname

    public void setPathname(String pathname)
    Set the relative or absolute pathname to the persistent storage file.
    Parameters:
      `pathname` - The new pathname

  - ### getReadonly

    public boolean getReadonly()
    Returns:
      the readonly status of the user database

  - ### setReadonly

    public void setReadonly(boolean readonly)
    Setting the readonly status of the user database
    Parameters:
      `readonly` - the new status

  - ### getWatchSource

    public boolean getWatchSource()

  - ### setWatchSource

    public void setWatchSource(boolean watchSource)

  - ### getRoles

    public Iterator<Role> getRoles()
    Specified by:
      `getRoles` in interface `UserDatabase`
    Returns:
      the set of `Role`s defined in this user database.

  - ### getUsers

    public Iterator<User> getUsers()
    Specified by:
      `getUsers` in interface `UserDatabase`
    Returns:
      the set of `User`s defined in this user database.

  - ### close

    public void close() throws Exception
    Finalize access to this user database.
    Specified by:
      `close` in interface `UserDatabase`
    Throws:
      `Exception` - if any exception is thrown during closing

  - ### createGroup

    public Group createGroup(String groupname, String description)
    Create and return a new `Group` defined in this user database.
    Specified by:
      `createGroup` in interface `UserDatabase`
    Parameters:
      `groupname` - The group name of the new group (must be unique)
      `description` - The description of this group
    Returns:
      The new group

  - ### createRole

    public Role createRole(String rolename, String description)
    Create and return a new `Role` defined in this user database.
    Specified by:
      `createRole` in interface `UserDatabase`
    Parameters:
      `rolename` - The role name of the new group (must be unique)
      `description` - The description of this group
    Returns:
      The new role

  - ### createUser

    public User createUser(String username, String password, String fullName)
    Create and return a new `User` defined in this user database.
    Specified by:
      `createUser` in interface `UserDatabase`
    Parameters:
      `username` - The logon username of the new user (must be unique)
      `password` - The logon password of the new user
      `fullName` - The full name of the new user
    Returns:
      The new user

  - ### findGroup

    public Group findGroup(String groupname)
    Return the `Group` with the specified group name, if any; otherwise return `null`.
    Specified by:
      `findGroup` in interface `UserDatabase`
    Parameters:
      `groupname` - Name of the group to return
    Returns:
      the `Group` with the specified group name, if any; otherwise return `null`.

  - ### findRole

    public Role findRole(String rolename)
    Return the `Role` with the specified role name, if any; otherwise return `null`.
    Specified by:
      `findRole` in interface `UserDatabase`
    Parameters:
      `rolename` - Name of the role to return
    Returns:
      the `Role` with the specified role name, if any; otherwise return `null`.

  - ### findUser

    public User findUser(String username)
    Return the `User` with the specified user name, if any; otherwise return `null`.
    Specified by:
      `findUser` in interface `UserDatabase`
    Parameters:
      `username` - Name of the user to return
    Returns:
      the `User` with the specified user name, if any; otherwise return `null`.

  - ### open

    public void open() throws Exception
    Initialize access to this user database.
    Specified by:
      `open` in interface `UserDatabase`
    Throws:
      `Exception` - if any exception is thrown during opening

  - ### removeGroup

    public void removeGroup(Group group)
    Remove the specified `Group` from this user database.
    Specified by:
      `removeGroup` in interface `UserDatabase`
    Parameters:
      `group` - The group to be removed

  - ### removeRole

    public void removeRole(Role role)
    Remove the specified `Role` from this user database.
    Specified by:
      `removeRole` in interface `UserDatabase`
    Parameters:
      `role` - The role to be removed

  - ### removeUser

    public void removeUser(User user)
    Remove the specified `User` from this user database.
    Specified by:
      `removeUser` in interface `UserDatabase`
    Parameters:
      `user` - The user to be removed

  - ### isWritable

    public boolean isWritable()
    Check for permissions to save this user database to persistent storage location.
    Returns:
      `true` if the database is writable

  - ### save

    public void save() throws Exception
    Save any updated information to the persistent storage location for this user database.
    Specified by:
      `save` in interface `UserDatabase`
    Throws:
      `Exception` - if any exception is thrown during saving

  - ### backgroundProcess

    public void backgroundProcess()
    Description copied from interface: `UserDatabase`
    Perform any background processing (e.g. checking for changes in persisted storage) required for the user database.
    Specified by:
      `backgroundProcess` in interface `UserDatabase`

  - ### toString

    public String toString()
    Return a String representation of this UserDatabase.
    Overrides:
      `toString` in class `Object`