import java.io.*; import java.util.*; import java.rmi.*; import java.rmi.server.*; public class RMIClass extends UnicastRemoteObject implements Serializable, RMIInterface { private static Hashtable users; private static Vector meetings; private int counter = 0; private int deleted = 0; public RMIClass() throws RemoteException { users = new Hashtable(); meetings = new Vector(); } public boolean login(String username, String password) throws RemoteException { if (!users.containsKey(username)) { return false; } String p = (String)users.get(username); if (p.equals(password)) return true; return false; } public boolean register(String username, String password) throws RemoteException { if (users.containsKey(username)) return false; if (password == null) return false; users.put(username, password); return true; } public boolean add(String username, String password, String otherusername, String title, Date start, Date end) throws RemoteException { if (!login(username, password)) return false; if (start.after(end)) return false; Meeting m; String[] u = new String[2]; Date s; Date e; for (Iterator it = meetings.iterator(); it.hasNext();) { m = (Meeting) it.next(); u = m.getUser(); if (u[0].equals(username) || u[1].equals(username) || u[0].equals(otherusername) || u[1].equals(otherusername)) { s = m.getStart(); e = m.getEnd(); if (!(start.after(e) || end.before(s))) return false; } } counter++; u[0] = username; u[1] = otherusername; meetings.add(new Meeting(counter, u, title, start, end)); return true; } public boolean delete(String username, String password, int id) throws RemoteException { if (!login(username, password)) return false; Meeting m; int i; String[] u; for (int j = 0; j < meetings.size(); j++) { m = meetings.get(j); i = m.getId(); u = m.getUser(); if (i == id && u[0].equals(username) || u[1].equals(username)) { meetings.remove(j); j--; deleted++; return true; } } return false; } public boolean clear(String username, String password) throws RemoteException { if (!login(username, password)) return false; Meeting m; String[] u; for (int i = 0; i < meetings.size(); i++) { m = meetings.get(i); u = m.getUser(); if (u[0].equals(username) || u[1].equals(username)) { meetings.remove(i); i--; deleted++; } } return true; } public Vector query(String username, String password, Date start, Date end) throws RemoteException { if (!login(username, password)) return null; if (start.after(end)) return null; Meeting m; String[] u = new String[2]; Date s; Date e; Vector v = new Vector(); for (Iterator it = meetings.iterator(); it.hasNext();) { m = (Meeting) it.next(); u = m.getUser(); if (u[0].equals(username) || u[1].equals(username)) { s = m.getStart(); e = m.getEnd(); if (!(s.after(end) || e.before(start))) v.add(m); } } return v; } }