|
| 1 | +package Server.Common; |
| 2 | + |
| 3 | +import Server.Interface.*; |
| 4 | + |
| 5 | +import java.util.*; |
| 6 | +import java.rmi.RemoteException; |
| 7 | +import java.io.*; |
| 8 | + |
| 9 | +public class CustomerResourceManager extends AbstractRMHashMapManager implements ICustomerResourceManager |
| 10 | +{ |
| 11 | + private String m_name=""; |
| 12 | + |
| 13 | + public CustomerResourceManager(String p_name) { |
| 14 | + m_name = p_name; |
| 15 | + }; |
| 16 | + |
| 17 | + public int newCustomer(int xid) throws RemoteException { |
| 18 | + Trace.info("RM::newCustomer(" + xid + ") called"); |
| 19 | +// Generate a globally unique ID for the new customer |
| 20 | + int cid = Integer.parseInt(String.valueOf(xid) + |
| 21 | + String.valueOf(Calendar.getInstance().get(Calendar.MILLISECOND)) + |
| 22 | + String.valueOf(Math.round(Math.random() * 100 + 1))); |
| 23 | + Customer customer = new Customer(cid); |
| 24 | + writeData(xid, customer.getKey(), customer); |
| 25 | + Trace.info("RM::newCustomer(" + cid + ") returns ID=" + cid); |
| 26 | + return cid; |
| 27 | + } |
| 28 | + |
| 29 | + public boolean newCustomer(int xid, int customerID) throws RemoteException |
| 30 | + { |
| 31 | + Trace.info("RM::newCustomer(" + xid + ", " + customerID + ") called"); |
| 32 | + Customer customer = (Customer)readData(xid, Customer.getKey(customerID)); |
| 33 | + if (customer == null) |
| 34 | + { |
| 35 | + customer = new Customer(customerID); |
| 36 | + writeData(xid, customer.getKey(), customer); |
| 37 | + Trace.info("RM::newCustomer(" + xid + ", " + customerID + ") created a new customer"); |
| 38 | + return true; |
| 39 | + } |
| 40 | + else |
| 41 | + { |
| 42 | + Trace.info("INFO: RM::newCustomer(" + xid + ", " + customerID + ") failed--customer already exists"); |
| 43 | + return false; |
| 44 | + } |
| 45 | + } |
| 46 | + |
| 47 | + |
| 48 | + public boolean deleteCustomer(int xid, int customerID) throws RemoteException |
| 49 | + { |
| 50 | + Trace.info("RM::deleteCustomer(" + xid + ", " + customerID + ") called"); |
| 51 | + Customer customer = (Customer)readData(xid, Customer.getKey(customerID)); |
| 52 | + if (customer == null) |
| 53 | + { |
| 54 | + Trace.warn("RM::deleteCustomer(" + xid + ", " + customerID + ") failed--customer doesn't exist"); |
| 55 | + return false; |
| 56 | + } |
| 57 | + else |
| 58 | + { |
| 59 | + // Increase the reserved numbers of all reservable items which the customer reserved. |
| 60 | + RMHashMap reservations = customer.getReservations(); |
| 61 | + for (String reservedKey : reservations.keySet()) |
| 62 | + { |
| 63 | + ReservedItem reserveditem = customer.getReservedItem(reservedKey); |
| 64 | + Trace.info("RM::deleteCustomer(" + xid + ", " + customerID + ") has reserved " + reserveditem.getKey() + " " + reserveditem.getCount() + " times"); |
| 65 | + ReservableItem item = (ReservableItem)readData(xid, reserveditem.getKey()); |
| 66 | + Trace.info("RM::deleteCustomer(" + xid + ", " + customerID + ") has reserved " + reserveditem.getKey() + " which is reserved " + item.getReserved() + " times and is still available " + item.getCount() + " times"); |
| 67 | + item.setReserved(item.getReserved() - reserveditem.getCount()); |
| 68 | + item.setCount(item.getCount() + reserveditem.getCount()); |
| 69 | + writeData(xid, item.getKey(), item); |
| 70 | + } |
| 71 | + |
| 72 | + // Remove the customer from the storage |
| 73 | + removeData(xid, customer.getKey()); |
| 74 | + Trace.info("RM::deleteCustomer(" + xid + ", " + customerID + ") succeeded"); |
| 75 | + return true; |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | + public String queryCustomerInfo(int xid, int customerID) throws RemoteException |
| 80 | + { |
| 81 | + Trace.info("RM::queryCustomerInfo(" + xid + ", " + customerID + ") called"); |
| 82 | + Customer customer = (Customer)readData(xid, Customer.getKey(customerID)); |
| 83 | + if (customer == null) |
| 84 | + { |
| 85 | + Trace.warn("RM::queryCustomerInfo(" + xid + ", " + customerID + ") failed--customer doesn't exist"); |
| 86 | + // NOTE: don't change this--WC counts on this value indicating a customer does not exist... |
| 87 | + return ""; |
| 88 | + } |
| 89 | + else |
| 90 | + { |
| 91 | + Trace.info("RM::queryCustomerInfo(" + xid + ", " + customerID + ")"); |
| 92 | + System.out.println(customer.getBill()); |
| 93 | + return customer.getBill(); |
| 94 | + } |
| 95 | + } |
| 96 | + |
| 97 | + public String getName() throws RemoteException |
| 98 | + { |
| 99 | + return m_name; |
| 100 | + } |
| 101 | + |
| 102 | + public Customer getCustomer(int xid, int customerID) throws RemoteException |
| 103 | + { |
| 104 | + return (Customer)readData(xid, Customer.getKey(customerID)); |
| 105 | + } |
| 106 | +} |
0 commit comments