⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agendaimpl.java

📁 ssd7 练习4
💻 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 + -