📄 agendaimpl.java
字号:
import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
/**
* This class extends java.rmi.sercer.UnicastRemoteObject implements
* java.io.Serializable Agenda to allow functions to be used via RMI.
*
* @author
* @version 1.0
*/
public class AgendaImpl extends UnicastRemoteObject implements Serializable,
Agenda {
/* store the meeting of all the users have. */
private Vector meetings;
/* store all users registed. */
private HashMap users;
/* A int number to present the ID number of the meeting */
private int meetingId;
/**
* Constructor
*
* @throws RemoteException
*/
public AgendaImpl() throws RemoteException {
meetings = new Vector();
users = new HashMap();
meetingId = 0;
}
/**
* Register a new user
*
* @param username
* new user's name
* @param password
* new user's password
* @return boolean represent whether successfully registered
* @throws RemoteException
*/
public boolean register(String username, String password)
throws RemoteException {
if (!users.containsKey(username)) {
users.put(username, password);
return true;
} else {
return false;
}
}
/**
* Registered users may add meetings to their agenda
*
* @param username
* @param password
* @param otherUser
* @param start
* @param end
* @param title
* @return
* @throws RemoteException
*/
public boolean add(String username, String password, String otherUser,
Calendar start, Calendar end, String title) throws RemoteException {
if (!validate(username, password)) {
return false;
}
Meeting meeting = new Meeting(username, otherUser, start, end, title,
++meetingId);
if (hasMeeting(username, otherUser, start, end)) {
return false;
}
meetings.add(meeting);
return true;
}
/**
* Registered users may look up all meetings in their agenda in a given
* interval of time
*
* @param username
* @param password
* @param start
* @param end
* @return
* @throws RemoteException
*/
public Vector query(String username, String password, Calendar start,
Calendar end) throws RemoteException {
if (!validate(username, password)) {
return null;
}
Vector result = new Vector();
for (Iterator it = meetings.iterator(); it.hasNext();) {
Meeting temp = (Meeting) it.next();
if ((temp.getHolder().equals(username) || temp.getAttender()
.equals(username))
&& temp.getStartTime().after(start)
&& temp.getEndTime().before(end)) {
result.add(temp);
}
}
return result;
}
/**
* Registered users may delete entries that they have created.
*
* @param username
* @param password
* @param meetingId
* @return
* @throws RemoteException
*/
public boolean delete(String username, String password, int meetingId)
throws RemoteException {
if (!validate(username, password)) {
return false;
}
int id, idForRemove;
id = -1;
idForRemove = -1;
for (Iterator i = meetings.iterator(); i.hasNext();) {
Meeting temp = (Meeting) i.next();
id++;
if (temp.getHolder().equals(username) && temp.getId() == meetingId) {
idForRemove = id;
break;
}
}
if (!(idForRemove == -1)) {
meetings.remove(idForRemove);
return true;
}
return false;
}
/**
* Registered users may delete entries that they have created.
*
* @param username
* @param password
* @return
* @throws RemoteException
*/
public boolean clear(String username, String password)
throws RemoteException {
if (!validate(username, password)) {
return false;
}
Enumeration tempMeetings = meetings.elements();
while (tempMeetings.hasMoreElements()) {
Meeting temp = (Meeting) tempMeetings.nextElement();
if (temp.getHolder().equals(username)) {
meetings.remove(temp);
}
}
return true;
}
/**
* Validate whether the user exsit or if its password is right
*
* @param username
* @param password
* @return
*/
private boolean validate(String username, String password) {
if (!users.containsKey(username)) {
return false;
}
if (((String) users.get(username)).equals(password)) {
return true;
} else {
return false;
}
}
/**
* Judge is there is meeting hold with the user
*
* @param caller
* @param attender
* @param start
* @param end
* @return
*/
private boolean hasMeeting(String caller, String attender, Calendar start,
Calendar end) {
Enumeration tempMeetings = meetings.elements();
while (tempMeetings.hasMoreElements()) {
Meeting tempMeeting = (Meeting) tempMeetings.nextElement();
if (((tempMeeting.getStartTime().before(start)
&& tempMeeting.getEndTime().before(end) && tempMeeting
.getStartTime().after(start))
|| (tempMeeting.getStartTime().after(start) && tempMeeting
.getEndTime().before(end))
|| (tempMeeting.getStartTime().after(start)
&& tempMeeting.getEndTime().after(end) && tempMeeting
.getEndTime().before(end)) || (tempMeeting
.getStartTime().before(start) && tempMeeting.getEndTime()
.after(end)))
&& ((tempMeeting.getHolder().equals(caller))
|| (tempMeeting.getAttender().equals(attender))
|| (tempMeeting.getHolder().equals(attender)) || (tempMeeting
.getAttender().equals(caller)))) {
return true;
}
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -