Class Db<T extends DbData<?>>

java.lang.Object
com.renomad.minum.database.Db<T>
Type Parameters:
T - the type of data we'll be persisting (must extend from DbData

public final class Db<T extends DbData<?>> extends Object
a memory-based disk-persisted database class.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Db(Path dbDirectory, Context context, T instance)
    Constructs an in-memory disk-persisted database.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    delete(T dataToDelete)
    Delete data
    void
    This function will stop the minum.database persistence cleanly.
    void
    stop(int count, int sleepTime)
    Similar to stop() but gives more control over how long we'll wait before crashing it closed.
    This method provides read capability for the values of a database.
    write(T newData)
    Write data to the database.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Db

      public Db(Path dbDirectory, Context context, T instance)
      Constructs an in-memory disk-persisted database.
      Parameters:
      dbDirectory - this uniquely names your database, and also sets the directory name for this data. The expected use case is to name this after the data in question. For example, "users", or "accounts".
      context - used to provide important state data to several components
      instance - an instance of the DbData object relevant for use in this database. Note that each database (that is, each instance of this class), focuses on just one data, which must be an implementation of DbData.
  • Method Details

    • stop

      public void stop()
      This function will stop the minum.database persistence cleanly.

      In order to do this, we need to wait for our threads to finish their work. In particular, we have offloaded our file writes to [actionQueue], which has an internal thread for serializing all actions on our minum.database

    • stop

      public void stop(int count, int sleepTime)
      Similar to stop() but gives more control over how long we'll wait before crashing it closed. See ActionQueue.stop(int, int)
    • write

      public T write(T newData)
      Write data to the database. Use an index of 0 to store new data, and a positive non-zero value to update data.

      Example of adding new data to the database:

               final var newSalt = StringUtils.generateSecureRandomString(10);
               final var hashedPassword = CryptoUtils.createPasswordHash(newPassword, newSalt);
               final var newUser = new User(0L, newUsername, hashedPassword, newSalt);
               userDb.write(newUser);
      

      Example of updating data:

              // write the updated salted password to the database
              final var updatedUser = new User(
                      user().getIndex(),
                      user().getUsername(),
                      hashedPassword,
                      newSalt);
              userDb.write(updatedUser);
      
      Parameters:
      newData - the data we are writing
    • delete

      public void delete(T dataToDelete)
      Delete data

      Example:

           userDb.delete(user);
      
      Parameters:
      dataToDelete - the data we are serializing and writing
    • values

      public Collection<T> values()
      This method provides read capability for the values of a database.
      The returned collection is a read-only view over the data, through Collections.unmodifiableCollection(Collection)

      Example:

      boolean doesUserAlreadyExist(String username) {
          return userDb.values().stream().anyMatch(x -> x.getUsername().equals(username));
      }