Пример #1
0
 // Delete the entire item.
 protected boolean deleteItem(int id, String key) {
   Trace.info("RM::deleteItem(" + id + ", " + key + ") called.");
   synchronized (syncLock) {
     ReservableItem curObj = (ReservableItem) readData(id, key);
     // Check if there is such an item in the storage.
     if (curObj == null) {
       Trace.warn("RM::deleteItem(" + id + ", " + key + ") failed: " + " item doesn't exist.");
       return false;
     } else {
       if (curObj.getReserved() == 0) {
         removeData(id, curObj.getKey());
         Trace.info("RM::deleteItem(" + id + ", " + key + ") OK.");
         return true;
       } else {
         Trace.info(
             "RM::deleteItem("
                 + id
                 + ", "
                 + key
                 + ") failed: "
                 + "some customers have reserved it.");
         return false;
       }
     }
   }
 }
Пример #2
0
 // query the price of an item
 protected int queryPrice(int id, String key) {
   Trace.info("RM::queryCarsPrice(" + id + ", " + key + ") called");
   ReservableItem curObj = (ReservableItem) readData(id, key);
   int value = 0;
   if (curObj != null) {
     value = curObj.getPrice();
   } // else
   Trace.info("RM::queryCarsPrice(" + id + ", " + key + ") returns cost=$" + value);
   return value;
 }
Пример #3
0
 // Query the price of an item.
 protected int queryPrice(int id, String key) {
   Trace.info("RM::queryPrice(" + id + ", " + key + ") called.");
   synchronized (syncLock) {
     ReservableItem curObj = (ReservableItem) readData(id, key);
     int value = 0;
     if (curObj != null) {
       value = curObj.getPrice();
     }
     Trace.info("RM::queryPrice(" + id + ", " + key + ") OK: $" + value);
     return value;
   }
 }
Пример #4
0
  // deletes the entire item
  protected boolean deleteItem(int id, String key) {
    Trace.info("RM::deleteItem(" + id + ", " + key + ") called");
    ReservableItem curObj = (ReservableItem) readData(id, key);
    Flight tempItem =
        new Flight(Integer.parseInt(curObj.getLocation()), curObj.getCount(), curObj.getPrice());
    tempItem.setReserved(curObj.getReserved());
    // Check if there is such an item in the storage
    if (curObj == null) {
      Trace.warn("RM::deleteItem(" + id + ", " + key + ") failed--item doesn't exist");
      return false;
    } else {
      if (curObj.getReserved() == 0) {

        tempItem.setType(0);
        writeDataToLog(id, curObj.getKey(), tempItem);
        removeData(id, curObj.getKey());
        Trace.info("RM::deleteItem(" + id + ", " + key + ") item deleted");
        return true;
      } else {
        Trace.info(
            "RM::deleteItem("
                + id
                + ", "
                + key
                + ") item can't be deleted because some customers reserved it");
        return false;
      }
    } // if
  }
Пример #5
0
  private boolean cancelReserveItem(int id, int customerId, String key, String location) {

    synchronized (syncLock) {
      // Check if the item is available.
      ReservableItem item = (ReservableItem) readData(id, key);
      if (item == null) {
        Trace.warn(
            "RM::cancelReserveItem("
                + id
                + ", "
                + customerId
                + ", "
                + key
                + ", "
                + location
                + ") failed: item doesn't exist.");
        return false;
      } else if (item.getReserved() == 0) {
        Trace.warn(
            "RM::cancelReserveItem("
                + id
                + ", "
                + customerId
                + ", "
                + key
                + ", "
                + location
                + ") failed: no reservations.");
        return false;
      } else {

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

        Trace.warn(
            "RM::cancelReserveItem("
                + id
                + ", "
                + customerId
                + ", "
                + key
                + ", "
                + location
                + ") OK.");
        return true;
      }
    }
  }
Пример #6
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
  }
Пример #7
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;
    }
  }