Source : DatabaseEngine.java

CS22120 Group Project - project source listings

Questions and comments on this file can be directed to this classes author: Paul Smith

View Test Results.


package cs221.groupk.database;

import java.io.File;
import java.util.Date;
import cs221.groupk.common.*;
import cs221.groupk.exceptions.database.*;

/**
 * Database Engine is the only class that will interact with the long-term
 * storage files. DatabaseEngine has all the methods to add, remove and edit
 * data, as well as maintaining the internal structor of the files on disk.
 * As this file has access to all data, the security for the system will be
 * dealt with internally inside this class, Exceptions informing the various
 * user interfaces of problems. Much of this class is simply an interface to
 * underlying classes, so this class is basically provided to give a simple
 * and uniform API to write the remaining modules.<BR><BR>
 * <B>Notes on using DatebaseEngine</B><BR>
 * <UL>
 * <LI>This class uses the information in the database to protect itself, so if
 * a user is not in the database, then that user cannot edit the database.</LI>
 * <UL><LI>Care must be taken with changeing users permissions / removing users
 * active status else it is possible to lock the system so nobody can access
 * the system</LI>
 * </UL>
 * <LI>When a session has finnished you <B>MUST</B> call <A HREF=
 * "DatabaseEngine.html#shutDownSystem()"><CODE>shutdown</A></CODE>, this
 * method performs nessesary operations on the database, flushing caches, back-up
 * ect.</LI>
 * </UL>
 * <B>Users</B><BR>
 * There are no methods provided for removing Users, a user can simply be made
 * in-active. This has the same effect with regard to that users functionality
 * but it means that the user is maintained at each station, so you can look
 * back to see who was on which station and when, evan if that user is not
 * longer employed.<BR><BR>
 * <B>SaleItems and SaleItemLists</B><BR>
 * The methods here are carfully selected to allow the databse to preserve
 * integrety, for example a SaleItem's ID is specified by the system, so
 * there is no duplication of ID's, thus it will be possible to store the data
 * in a normalised form, but recreate the input data or a veriation thereof.
 *
 * <P><I>Code spell-checked - Chris Milner - 5th December 2000.</I><P>
 *
 * @author <A HREF="mailto:[email protected]">Paul Smith</A>
 */
public class DatabaseEngine implements Constants
{
  /**password is the local (encrypted) copy of the entered password*/
  protected String password;
  /**userID is the local (encrypted) copy of the entered userID*/
  protected String userID;
  /**validatedUserLevel specifies the level of the person whom has been authenticated*/
  protected static int validatedUserLevel = ACCESS_LEVEL_NOT_VALIDATED;
  /**
   * disk is a copy of the Disk used as a temporary store before data is written
   * to/from the database
   */
  protected Disk disk;
  //########################################################################
  //# Constructors
  //########################################################################

  /**
   * Default Constructor for DatabaseEngine.
   */
  public DatabaseEngine()
  {
    startup();
  }

  /**
   * Over-loaded Constructor for DatabaseEngine, allowing instant validation
   * using the provided user ID and password.
   */
  public DatabaseEngine(String userID, String password)
    throws UserValidationException
  {
    super();
    this.password = FuncU.encryptString(password);//?
    this.userID = FuncU.encryptString(userID);//?
    switch (validateUser(this.userID, this.password))
    {
      case VALIDATION_SUCCESFULL_ALL : break;
      case VALIDATION_SUCCESFULL_STATIONS : break;
      case VALIDATION_SUCCESFULL_BOTTOM_STATION : break;
      case VALIDATION_SUCCESFULL_TOP_STATION : break;
      case VALIDATION_FAIL_NOT_AUTHORISED : break;
      case VALIDATION_FAIL_NO_SUCH_USER : break;
      case VALIDATION_FAIL_INVALID_PASSWORD : break;
      default : break;
    }
  }

  //########################################################################
  //# Disk Operation code.
  //########################################################################

  /**
   * disasterRecovery is a utility method for rebuilding the database should
   * the file structure be compromised. By passing in the Disks the database
   * can be re-created. <B>This method is as the name implies, it is a last
   * resort, and should not be used unless the database HAS to be re-built.</B>
   * @param File[] disks is the array of File objects pointing to Disk files
   * that have been written from the stations.
   * @return int 0 on success or negative error code.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   * @see Constants#OPERATION_FAILED
   */
  public int disasterRecovery(File[] disks)
    throws InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  /**
   * addDisk adds the specified Disk to the database. The method will fail if
   * you do not have sufficient privilages to perform this action, and will
   * fail if you attempt to overwrite an already added Disk (within the database).
   * It is recomended that the Disk files are copied to a temp file locally
   * before calling this method to speed up the updating procedure.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public int addDisk(Disk disk)
    throws InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  //########################################################################
  //# SaleItem Code.
  //########################################################################

  /**
   * addSaleItemList creates an empty SaleItemList, and returns the ID of the
   * newly added SaleItemList.
   * @return int SaleItemList's ID.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public int addSaleItemList()
    throws InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  /**
   * addSaleItem adds the SaleItem saleItem to the SaleItemList specified by
   * SaleItemListID.
   * @param int SaleItemListID specifes which SaleItemList to add the new
   * SaleItem to.
   * @param SaleItem saleItem is the new SaleItem to be added
   * @return int saleItemID.
   * @exception SaleItemListIDInvalidException is thrown if the value specifed
   * by SaleItemListID does not reference a SaleItemList.
   * @exception SaleItemIDInvalidException is thrown if the value specifed
   * by saleItem already exists.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privalges for admin tasks.
   */
  public int addSaleItem(int SaleItemListID, SaleItem saleItem)
    throws SaleItemListIDInvalidException,
    	   SaleItemIDInvalidException,
           InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  /**
   * addSaleItem creates a new SaleItem, then adds it to the specifed
   * SaleItemListID.
   * @param int SaleItemListID specifes which SaleItemList to add the new
   * SaleItem to.
   * @param String itemName is the name of the item in question.
   * @param String itemDescription is a description of the new SaleItem
   * @param int price is the price of the new SaleItem
   * @exception SaleItemListIDInvalidException is thrown if the value specifed
   * by SaleItemListID does not reference a SaleItemList.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privalges for admin tasks.
   */
  public int addSaleItem(int SaleItemListID,
  			 String itemName,
			 String itemDescription,
			 int price)
    throws SaleItemListIDInvalidException,
           InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  /**
   * getSaleItemList returns a SaleItemList, using the saleItemListID to
   * return the required list.
   * @param int saleItemListID is used as a lookup to retreive the required
   * saleItem list.
   * @return SaleItemList as specified by parameter saleItemListID.
   * @exception SaleItemListIDInvalidException is thrown when a SaleItemList
   * cannot be found / returned with a matching id.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privalges for admin tasks.
   */
  public SaleItemList getSaleItemList(int saleItemListID)
    throws SaleItemListIDInvalidException,
           InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * getSaleItemLists returns all SaleItemList objects from the database.
   * @return SaleItemList[] from the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public SaleItemList[] getSaleItemLists()
    throws InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * getSaleItems returns a list of ALL SaleItems in the database.
   * @return SaleItem[] is the array of SaleItems.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public SaleItem[] getSaleItems()
    throws InsufficientAccessPrivilegeException
  {
    return null;
  }
  //########################################################################
  //# User Admin
  //########################################################################

  /**
   * getUserIDs returns a list of all user IDs contianed within the database.
   * @return String[] of user ID's within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public String[] getUserIDs()
    throws InsufficientAccessPrivilegeException
  {
    return null;
  }

  /*
   * getUser returns the User Object with the specified userID or throws a
   * UserNotFoundException if the user cannot be found. <B>Note.</B> The User
   * returned will have the userID, and password fields still encrypted.
   * @param String userID of returned User.
   * @exception UserNotFoundException is thrown if the user specifed with
   * userID is not found within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  /*
  public User getUser(String userID)
    throws UserNotFoundException,
           InsufficientAccessPrivilegeException
  {
    return null;
  }*/

  /**
   * getUserPassword returns the user specified by userId's password.
   * @param String userID to returned password of.
   * @return String decrypted password.
   * @exception UserNotFoundException is thrown if the user specified with
   * userID is not found within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public String getUserPassword(String userID)
    throws UserNotFoundException,
           InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * getUserFullName returns the specified users full name.
   * @param String userID to returned full name of
   * @return String users full name.
   * @exception UserNotFoundException is thrown if the user specified with
   * userID is not found within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public String getUserFullName(String userID)
    throws UserNotFoundException,
           InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * addUser adds the User user to the user database.
   * @return int negative error code or 0 for success.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   * @exception UserAlreadyExistsException is thrown when the User user's ID
   * already exists.
   */
  public int addUser(User user)
    throws InsufficientAccessPrivilegeException,
           UserAlreadyExistsException
  {
    return OPERATION_FAILED;
  }

  /**
   * setUserPermissions sets the Users permissions specifed by the userID
   * String. <B>Caution</B> to be used with this method as it is possible to
   * lock out users.
   * @param String userID of user to set permissions.
   * @param boolean admin or not.
   * @param boolean topStation or not.
   * @param boolean bottomStation or not.
   * @exception UserNotFoundException is thrown if the user specifed with
   * userID is not found within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public void setUserPermissions(String userID,
                                 boolean admin,
				 boolean topStation,
				 boolean bottomStation)
    throws UserNotFoundException,
           InsufficientAccessPrivilegeException
  {
  }

  /**
   * setUserActive sets the active value in the User specified by userID. If
   * a users active property is set to false, then that user is treated as if
   * they are not in the system. This would be used to keep track of which staff
   * are on which station, and which staff are no longer employed.
   * @param String userID of user to set active.
   * @param boolean active
   * @exception UserNotFoundException is thrown if the user specifed with
   * userID is not found within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public void setUserActive(String userID, boolean active)
    throws UserNotFoundException,
           InsufficientAccessPrivilegeException
  {
  }

  /**
   * getUserActive
   * @param String userID of user to check if active or not.
   * @return boolean returns true if user is "Active", otherwise false.
   * @exception UserNotFoundException is thrown if the user specifed with
   * userID is not found within the database.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public boolean isUserActive(String userID)
    throws UserNotFoundException,
           InsufficientAccessPrivilegeException
  {
    return false;
  }

  //########################################################################
  //# Startup / Shutdown code.
  //########################################################################

  /**
   * validateUser takes the user and password, then checks them against known
   * /valid users. The value returned specifies if the validation was
   * successfull. The values returned are those specified in Constants.
   * @param int negative error code, or positive access level.
   * @see Constants#VALIDATION_SUCCESFULL_ALL
   * @see Constants#VALIDATION_SUCCESFULL_STATIONS
   * @see Constants#VALIDATION_SUCCESFULL_BOTTOM_STATION
   * @see Constants#VALIDATION_SUCCESFULL_TOP_STATION
   * @see Constants#VALIDATION_FAIL_NOT_AUTHORISED
   * @see Constants#VALIDATION_FAIL_NO_SUCH_USER
   * @see Constants#VALIDATION_FAIL_INVALID_PASSWORD
   */
  public int validateUser(String user, String pswd)
  {
    return validatedUserLevel;
  }

  /**
   * shutDownSystem <B>must</B> be called to finnish session using the database.
   * This method will disable further read/writes to the database - without
   * re-verification - saving data, and flushing buffers and generally exiting
   * gracefully.
   * @return int negative error code or 0 for success.
   */
  public int shutDownSystem()
  {
    //Set a file etc to indicate databse was correctly shutdown.
    return OPERATION_FAILED;
  }

  /**
   * startup is called from the DatabaseEngines constructor to setup a few
   * things, including backing-up the database, and other admin tasks.
   */
  protected void startup()
  {
    validatedUserLevel = ACCESS_LEVEL_NOT_VALIDATED;
    //check system was shutdown correctly last time (use logs ect)
    //open and load current database.
    //backup current files.
    //log changes, keep the Disk files ect.
  }

  //########################################################################
  //# BoughtItem Methods.
  //########################################################################

  /**
   * getBoughtItems gets all BoughtItems, ever. This method should be used
   * with caution as there could be potentially lots of data returned.
   * @return BoughtItems[] is the array of BoughtItems.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public BoughtItem[] getBoughtItems()
    throws InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * getBoughtItems gets all BoughtItems, on the specifed Data.
   * @param Date date of BoughtItems to retrieve.
   * @return BoughtItems[] is the array of BoughtItems.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privalges for admin tasks.
   */
  public BoughtItem[] getBoughtItems(Date date)
    throws InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * getBoughtItems gets all BoughtItems, between the specifed Dates.
   * @param Date startDate of BoughtItems to retrieve.
   * @param Date endDate of BoughtItems to retrieve.
   * @return BoughtItems[] is the array of BoughtItems.
   * @exception InsufficientAccessPrivilegeException is thrown if the current
   * user does not have sufficient access privileges for admin tasks.
   */
  public BoughtItem[] getBoughtItems(Date startDate, Date endDate)
    throws InsufficientAccessPrivilegeException
  {
    return null;
  }

  /**
   * getBoughtItemCount returns the total number of BoughtItems in the
   * database.
   * @return int number of BoughtItems
   */
  public int getBoughtItemCount()
    throws InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  /**
   * getBoughtItemCount returns the total number of BoughtItems in the
   * database, on the date specified by date.
   * @param Date date to get BoughtItem's count for.
   * @return int number of BoughtItems
   */
  public int getBoughtItemCount(Date date)
    throws InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }

  /**
   * getBoughtItemCount returns the total number of BoughtItems in the
   * database, between the dates specified by startDate and endDate.
   * @param Date startDate to get BoughtItem's count from.
   * @param Date endDate to get BoughtItem's count to.
   * @return int number of BoughtItems
   */
  public int getBoughtItemCount(Date startDate, Date endDate)
    throws InsufficientAccessPrivilegeException
  {
    return OPERATION_FAILED;
  }
}


Up one level.

Page automatically generated on: 26/01/01 at: 10:48:17.