Esempio n. 1
1
 public int newCustomer(int id) throws RemoteException {
   Trace.info("INFO: RM::newCustomer(" + id + ") called");
   // Generate a globally unique ID for the new customer
   int cid =
       Integer.parseInt(
           String.valueOf(id)
               + String.valueOf(Calendar.getInstance().get(Calendar.MILLISECOND))
               + String.valueOf(Math.round(Math.random() * 100 + 1)));
   Customer cust = new Customer(cid);
   writeData(id, cust.getKey(), cust);
   Customer temp = cust.clone();
   temp.setID(-1);
   temp.setType(1);
   writeDataToLog(id, cust.getKey(), temp);
   Trace.info("RM::newCustomer(" + cid + ") returns ID=" + cid);
   return cid;
 }
Esempio n. 2
0
  // Deletes customer from the database.
  public boolean deleteCustomer(int id, int customerID) throws RemoteException {
    Trace.info("RM::deleteCustomer(" + id + ", " + customerID + ") called");
    Customer cust = (Customer) readData(id, Customer.getKey(customerID));

    if (cust == null) {
      Trace.warn(
          "RM::deleteCustomer(" + id + ", " + customerID + ") failed--customer doesn't exist");
      return false;
    } else {
      Customer temp = cust.clone();
      // Increase the reserved numbers of all reservable items which the customer reserved.
      RMHashtable reservationHT = cust.getReservations();
      for (Enumeration e = reservationHT.keys(); e.hasMoreElements(); ) {
        String reservedkey = (String) (e.nextElement());
        ReservedItem reserveditem = cust.getReservedItem(reservedkey);
        Trace.info(
            "RM::deleteCustomer("
                + id
                + ", "
                + customerID
                + ") has reserved "
                + reserveditem.getKey()
                + " "
                + reserveditem.getCount()
                + " times");
        ReservableItem item = (ReservableItem) readData(id, reserveditem.getKey());
        Trace.info(
            "RM::deleteCustomer("
                + id
                + ", "
                + customerID
                + ") has reserved "
                + reserveditem.getKey()
                + "which is reserved"
                + item.getReserved()
                + " times and is still available "
                + item.getCount()
                + " times");
        Flight tempItem =
            new Flight(Integer.parseInt(item.getLocation()), item.getCount(), item.getPrice());
        tempItem.setReserved(item.getReserved());
        tempItem.setType(0);
        item.setReserved(item.getReserved() - reserveditem.getCount());
        item.setCount(item.getCount() + reserveditem.getCount());
        if (readDataFromLog(id, item.getKey(), id) == null)
          writeDataToLog(id, item.getKey(), tempItem);
      }

      // remove the customer from the storage
      temp.setType(1);
      if (readDataFromLog(id, cust.getKey(), id) == null) writeDataToLog(id, cust.getKey(), temp);
      removeData(id, cust.getKey());

      Trace.info("RM::deleteCustomer(" + id + ", " + customerID + ") succeeded");
      return true;
    } // if
  }
Esempio n. 3
0
 // I opted to pass in customerID instead. This makes testing easier
 public boolean newCustomer(int id, int customerID) throws RemoteException {
   Trace.info("INFO: RM::newCustomer(" + id + ", " + customerID + ") called");
   Customer cust = (Customer) readData(id, Customer.getKey(customerID));
   if (cust == null) {
     cust = new Customer(customerID);
     writeData(id, cust.getKey(), cust);
     Customer temp = cust.clone();
     temp.setType(1);
     temp.setID(-1);
     writeDataToLog(id, cust.getKey(), temp);
     Trace.info("INFO: RM::newCustomer(" + id + ", " + customerID + ") created a new customer");
     return true;
   } else {
     Trace.info(
         "INFO: RM::newCustomer(" + id + ", " + customerID + ") failed--customer already exists");
     return false;
   } // else
 }
Esempio n. 4
0
  // reserve an item
  protected boolean reserveItem(int id, int customerID, String key, String location) {
    Trace.info(
        "RM::reserveItem( "
            + id
            + ", customer="
            + customerID
            + ", "
            + key
            + ", "
            + location
            + " ) called");
    // Read customer object if it exists (and read lock it)
    Customer cust = (Customer) readData(id, Customer.getKey(customerID));
    if (cust == null) {
      Trace.warn(
          "RM::reserveCar( "
              + id
              + ", "
              + customerID
              + ", "
              + key
              + ", "
              + location
              + ")  failed--customer doesn't exist");
      return false;
    }

    // check if the item is available
    ReservableItem item = (ReservableItem) readData(id, key);

    if (item == null) {
      Trace.warn(
          "RM::reserveItem( "
              + id
              + ", "
              + customerID
              + ", "
              + key
              + ", "
              + location
              + ") failed--item doesn't exist");
      return false;
    } else if (item.getCount() == 0) {
      Trace.warn(
          "RM::reserveItem( "
              + id
              + ", "
              + customerID
              + ", "
              + key
              + ", "
              + location
              + ") failed--No more items");
      return false;
    } else {
      Flight tempItem =
          new Flight(Integer.parseInt(item.getLocation()), item.getCount(), item.getPrice());
      tempItem.setReserved(item.getReserved());
      Customer temp = cust.clone();
      temp.setType(1);
      if (readDataFromLog(id, cust.getKey(), id) == null) {
        writeDataToLog(id, cust.getKey(), temp);
      }
      cust.reserve(key, location, item.getPrice());

      writeData(id, cust.getKey(), cust);

      // decrease the number of available items in the storage
      item.setCount(item.getCount() - 1);
      item.setReserved(item.getReserved() + 1);

      if (readDataFromLog(id, item.getKey(), id) == null) {
        tempItem.setType(0);
        writeDataToLog(id, item.getKey(), tempItem);
      }
      Trace.info(
          "RM::reserveItem( "
              + id
              + ", "
              + customerID
              + ", "
              + key
              + ", "
              + location
              + ") succeeded");
      return true;
    }
  }