meetingmanager.java

来自「简单的会议议程系统,展示了Command 模式的应用」· Java 代码 · 共 208 行

JAVA
208
字号
/*
 * @(#)MeetingManager.java        2006/11/13
 *
 * Copyright (c) ZhiYang.
 * All rights reserved.
*/

package agenda;

import java.util.*;
import java.text.*;

/**
 * 会议记录管理
 * @version 1.0
 * @author 杨智 (MSE2006B-06250145)
 *
 */

public class MeetingManager {
	
	/*
	 * container of meeting records
	*/
	private Set meetings = new TreeSet();
	
	/*
	 * exception
	*/
	public static class InvalidRecord extends Exception {
		public InvalidRecord() {
			super("The meeting record is invalid!");
		}
	}
	public static class AlreadyExisted extends Exception {
		public AlreadyExisted() {
			super("Please give another meeting title!");
		}
	}
	public static class TimeIsOverlapped extends Exception {
		public TimeIsOverlapped() {
			super("There is a meeting record overlapped with the given time!");
		}
	}
	
	private boolean checkOverlapped( Meeting mt ) {
		Iterator it = meetings.iterator();
		while( it.hasNext() ) {
			Meeting inmt = (Meeting) it.next();
			if( inmt.isOverlapped(mt) ) {
				return true;
			}
		}
		return false;
	}

	/*
	 * add a meeting record
	 * @throws InvalidRecord, AlreadyExisted, TimeIsOverlapped
	*/
	public void addMeeting( Meeting mt ) throws InvalidRecord, AlreadyExisted, TimeIsOverlapped {
		
		if( mt == null || !mt.isValid() ) {
			throw new InvalidRecord();
		}
		else if( meetings.contains( mt ) ) {
			throw new AlreadyExisted();
		}
		else if( checkOverlapped( mt ) ) {
			throw new TimeIsOverlapped();
		}
		meetings.add ( mt );
	}
	
	/*
	 * query the given user's meeting records located in the time span
	 * @return ArrayList with Meeting objects
	*/
	public ArrayList queryMeeting( String strUser, Date startTime, Date endTime ) {
		ArrayList ret = new ArrayList();
		Iterator it = meetings.iterator();
		while( it.hasNext() ) {
			Meeting inmt = (Meeting) it.next();
			if( inmt.isUserOverlapped(strUser) && inmt.isTimeOverlapped(startTime,endTime) ) {
				ret.add( inmt.clone() );
			}
		}
		return ret;
	}
	public ArrayList queryMeeting( String strUser, String startTime, String endTime ) throws ParseException {
		Date sdt = Meeting.getDateFormat().parse( startTime );
		Date edt = Meeting.getDateFormat().parse( endTime );
		return queryMeeting ( strUser, sdt, edt );
	}


	/*
	 * delete a meeting record accroding to its title
	*/	
	public boolean deleteMeeting( String title ) {
		Meeting mt = new Meeting();
		mt.title = title;
		return meetings.remove( mt );
	}
	
	/*
	 * clear all of meeting records of given user
	*/
	public void clearMeeting( String strUser ) {
		Iterator it = meetings.iterator();
		while( it.hasNext() ) {
			Meeting inmt = (Meeting) it.next();
			if( inmt.isUserOverlapped(strUser) ) {
				it.remove();
			}
		}
	}
	
	
	/*
	 * unit test 
	*/
	public static void main( String argv[] ) {
		
	try {
		Meeting mt1 = new Meeting ( "test1", "op1", "sch1", "06-10-21 10:12:00", "06-10-21 10:32:00" );
		Meeting mt2 = new Meeting ( "test2", "op1", "sch2", "06-10-21 13:16:00", "06-10-21 14:30:00" );
		Meeting mt3 = new Meeting ( "test3", "op2", "sch2", "06-10-21 14:30:00", "06-10-21 15:39:00" );
		Meeting mt4 = new Meeting ( "test2", "op1", "sch2", "06-10-21 10:12:00", "06-10-21 16:30:00" );

		MeetingManager mgr = new MeetingManager();

		try {
			mgr.addMeeting(null);
		}
		catch ( Exception e ) {
			System.out.println(e.getMessage());
		}

		try {
			mgr.addMeeting( new Meeting ( "test2", "op1", "sch2", "06-10-21 10:12:00", "06-10-21 9:30:00" ) );
		}
		catch ( Exception e ) {
			System.out.println(e.getMessage());
		}
		
		try {
			mgr.addMeeting( mt1 );
			System.out.println( mt1 + " added");
			mgr.addMeeting( mt2 );
			System.out.println( mt2 + " added");
			mgr.addMeeting( mt3 );
			System.out.println( mt3 + " added");
			mgr.addMeeting( mt4 );
			System.out.println( mt4 + " added");
		}
		catch ( Exception e ) {
			System.out.println(e.getMessage());
		}

		ArrayList arr = mgr.queryMeeting ( "op1", "06-10-21 10:12:00", "06-10-21 16:30:00");
		for(int i=0; i<arr.size(); ++i ) {
			System.out.println( (Meeting)arr.get(i) + " found with op1");
		}
		arr = mgr.queryMeeting ( "sch2", "06-10-21 10:12:00", "06-10-21 16:30:00");
		for(int i=0; i<arr.size(); ++i ) {
			System.out.println( (Meeting)arr.get(i) + " found with sch2");
		}
	
		mgr.clearMeeting( "op1" );
		System.out.println( "clear all meeting records of op1" );
		try {
			mgr.addMeeting( mt3 );
			System.out.println( mt3 + " added");
			mgr.addMeeting( mt4 );
			System.out.println( mt4 + " added");
			mgr.addMeeting( mt1 );
			System.out.println( mt1 + " added");
			mgr.addMeeting( mt2 );
			System.out.println( mt2 + " added");
		}
		catch ( Exception e ) {
			System.out.println(e.getMessage());
		}

		System.out.println( "delete test3 meeting record..." );
		if( mgr.deleteMeeting("test3") )
			System.out.println( "test3 deleted");

		System.out.println( "delete test2 meeting record..." );
		if( mgr.deleteMeeting("test2") )
			System.out.println( "test2 deleted");

		try {
			mgr.addMeeting( mt4 );
			System.out.println( mt4 + " added");
		}
		catch ( Exception e ) {
			System.out.println(e.getMessage());
		}
	}
	catch ( Exception e ) {
		System.out.println( "has unknown exception: " +e.getMessage() );
		return;
	}
	}
}
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?