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

📄 agendadatabase.java

📁 使用java rmi编写的一个议程服务系统
💻 JAVA
字号:
package agendaServer.systemDatabase;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;

import commonResource.Meeting;
import commonResource.Person;

/**
 * 议程管理的数据层,提供议程的添加,保存和查询等操作。
 * @author Crise.Lee
 * @version 1.0
 */
public class agendaDatabase 
{
	 ArrayList<Meeting> bookedUserMeetinglist=null,scheduledUserMeetinglist=null;
	 static HashMap<Person, ArrayList<Meeting>> meetingMap=new HashMap<Person, ArrayList<Meeting>>();
	 Meeting meeting=null;
	 //Person bookedUser=null,scheduledUser=null;

	public agendaDatabase()
	{	}
	
	/**
	 * 添加一个会议到开会的双方议程中
	 * @param meeting
	 * @param bookedUser
	 * @param scheduledUser
	 * @return
	 * @throws RemoteException 
	 */
	public Boolean addMeeting(Meeting meeting,Person bookedUser,Person scheduledUser) throws RemoteException
	{
/**   */ System.out.println("在agendaDatabase中执行添加会议");		
		bookedUserMeetinglist=null;
		scheduledUserMeetinglist=null;
//		
//		if(meetingMap.containsKey(bookedUser))
//		{
//			System.out.println("bookedUser cunzai ");
//			//throw new RemoteException("该用户还没有会议集");
//		}
//		
//		if(meetingMap.containsKey(scheduledUser))
//		{
//			System.out.println("scheduledUser cun zai ");
//			//throw new RemoteException("该用户还没有会议集");
//		}
		/**
		 * 如果该用户还没有自己的会议列表,则添加一个会议列表
		 */
		if(!meetingMap.containsKey(bookedUser))
			initializeMeeting(bookedUser);
		if(!meetingMap.containsKey(scheduledUser))
			initializeMeeting(scheduledUser);
		
		bookedUserMeetinglist=meetingMap.get(bookedUser);
		scheduledUserMeetinglist=meetingMap.get(scheduledUser);
		
///**  */		System.out.println("在判断时间是否有冲突之前!!");

		if(ifTimeOverlap(bookedUserMeetinglist,meeting))
		{
/**  */		System.out.println("错误:添加的会议与发起人现有的会议时间有冲突");
			throw new RemoteException("错误:添加的会议与发起人现有的会议时间有冲突");
		}	
		if(ifTimeOverlap(scheduledUserMeetinglist,meeting))
		{
/**  */	System.out.println("错误:添加的会议与发起人现有的会议时间有冲突");
			throw new RemoteException("错误:添加的会议与预约人现有的会议时间有冲突");
		}
		
///** */	System.out.println("in agendaDatabase addMeeting Time NOT overlap");
///** */  System.out.println(meeting.getUserName() +meeting.gerOtherName());			

		bookedUserMeetinglist.add(meeting);
//		System.out.println("bookedUserMeetinglist.size()="+bookedUserMeetinglist.size());
///**  */	System.out.println("Bookeduser 添加会议成功");

		scheduledUserMeetinglist.add(meeting);
		System.out.println("scheduledUserMeetinglist.size()="+scheduledUserMeetinglist.size());
		
		meetingMap.put(bookedUser, bookedUserMeetinglist);
		meetingMap.put(scheduledUser,scheduledUserMeetinglist);
		
///**  */	System.out.println("in agendaDatabase addMeeting Add Meeting seccess");
///**  */ bookedUserMeetinglist=meetingMap.get(bookedUser);
///**  */	System.out.println("in agendaDatabase addMeeting bookedUserMeetinglist.size()="+bookedUserMeetinglist.size());
		return true;
	}

	/**
	 * 在一个时间段内查询会议
	 * @param user
	 * @param start
	 * @param end
	 * @return
	 * @throws RemoteException 
	 */
	public ArrayList<Meeting> queryMeeting(Person user,Date start,Date end) throws RemoteException
	{
		/**   */ System.out.println("在agendaDatabase中执行查询会议");		
		ArrayList<Meeting> meetings=new ArrayList<Meeting>();
		ArrayList<Meeting> meetingList=null;
		Meeting mt=null;
		
		System.out.println("user.name="+user.getName());
		meetingList=(ArrayList<Meeting>)meetingMap.get(user);
//		if(!meetingMap.containsKey(user))
//		{
//			System.out.println("in the queryMeeting 该用户还没有会议集");
//			throw new RemoteException("该用户还没有会议集");
//		}
		
///**  */	System.out.println("in the queryMeeting 会议集中有该用户");
///**  */	//System.out.println("in the queryMeetin meetinglist.size()="+meetingList.size());
		if(meetingList==null)
		{
			System.out.println("in the queryMeetin 该用户的会议集为空");
			throw new RemoteException("提示: 您的会议集为空");
			
		}

		Iterator<Meeting> iterator=meetingList.iterator();
		while(iterator.hasNext())
		{
			mt=iterator.next();
			if(!(start.after(mt.getStartTime())||end.before(mt.getEndTime())))
			{
//				System.out.println("in function agendaDatabase-->queryMeeting add meeting to meetings ");
				meetings.add(mt);
			}
		}
//		System.out.println("in function agendaDatabase-->queryMeeting: before return meetings ");
		return meetings;
		
	}
	
	/**
	 * 用于实现删除会议的功能,删除成功返回true,否则会有相应的异常抛出 
	 * @param bookedUser
	 * @param title
	 * @return
	 * @throws RemoteException
	 */
	public Boolean deleteMeeting(Person bookedUser,String title) throws RemoteException
	{
/**   */ System.out.println("在agendaDatabase中删除会议");		
		//存放会议的容器
		ArrayList<Meeting> bookedMeetingList=null,scheduledMeetingList=null;
		bookedMeetingList=(ArrayList<Meeting>)meetingMap.get(bookedUser);
		
		if(bookedMeetingList.size()==0)
			throw new RemoteException("提示: 您的会议集中没有会议!!!");
		
		Meeting bMeeting=null,schMeeting=null;
		Iterator<Meeting> bIt=bookedMeetingList.iterator(),schIt=null;
		UserData userData=new UserData();
		Person scheduleUser=null;
		int removeNum=0;
		
		Boolean hasRemove=false;
		
		while(bIt.hasNext())
		{
			bMeeting=bIt.next();
///**  */     	System.out.println("###### 0 deleteMeeting(Person bookedUser,String title)");	
			//有符合条件的会议,执行删除操作
			if(bMeeting.getTitle().equalsIgnoreCase(title)&&bookedUser.getName().equalsIgnoreCase(bMeeting.getUserName()))
			{
///**  */     	System.out.println("###### 1  deleteMeeting(Person bookedUser,String title)");
				//判定数据标准位置为原始状态
				hasRemove=false;
				scheduleUser=userData.getPerson(bMeeting.gerOtherName());
				scheduledMeetingList=meetingMap.get(scheduleUser);
				schIt=scheduledMeetingList.iterator();
				while(schIt.hasNext())
				{
///**  */         	System.out.println("###### 2 deleteMeeting(Person bookedUser,String title)");
					schMeeting=schIt.next();
					if(schMeeting.getTitle().equalsIgnoreCase(title)&&schMeeting
							.getUserName().equalsIgnoreCase(bookedUser.getName()))
					{
///**  */     	        System.out.println("###### 3 deleteMeeting(Person bookedUser,String title)");
						hasRemove=true;
						schIt.remove();
						schIt=scheduledMeetingList.iterator();
///**  */             	System.out.println("###### 4 deleteMeeting(Person bookedUser,String title)");
					}
				}
				//标志位为原始状态,说明并没有在预约的用户会议集中删除会议
				if(!hasRemove)
					throw new RemoteException("Exception:会议在发起人中找到,而没有找到相关的预约人,数据逻辑发生错误!!");
				//从自己的会议列表中删除会议
///**  */     	System.out.println("###### 5 deleteMeeting(Person bookedUser,String title)");
				bookedMeetingList.remove(bMeeting);
				removeNum++;
				bIt=bookedMeetingList.iterator();
			}//if			
		}//while
		if(removeNum==0)
		{
			System.out.println();
			throw new RemoteException("提示: 删除会议数为 0 ,当前的会议集中的会议您为预约人,无权删除会议!!!");
		}
///**  */ System.out.println("###### 6 deleteMeeting(Person bookedUser,String title)");	
/**  */	System.out.println("bookedUserMeetinglist.size()="+bookedUserMeetinglist.size());	
///** */	System.out.println("scheduledUserMeetinglist.size()="+scheduledUserMeetinglist.size());
		return true;
	}
	
	
	/**
	 * 清除某一用户的所有会议,并且从相关预约人那里删除预约的会议
	 * @param bookedUser 用户
	 * @return
	 * @throws RemoteException
	 */
	public Boolean ClearAgendas(Person bookedUser) throws RemoteException
	{
/**   */ System.out.println("在agendaDatabase中执行清楚会议");		
		//存放会议的容器
		ArrayList<Meeting> bookedMeetingList=null,scheduledMeetingList=null;
		bookedMeetingList=(ArrayList<Meeting>)meetingMap.get(bookedUser);
		
		if(bookedMeetingList.size()==0)
			throw new RemoteException("提示: 您的会议集中没有会议!!!");
		
		Meeting bMeeting=null,schMeeting=null;
		Iterator<Meeting> bIt=bookedMeetingList.iterator(),schIt=null;
		UserData userData=new UserData();
		Person scheduleUser=null;
		String title=null;
		Boolean hasRemove=false;
		int clearNum=0;
		
		while(bIt.hasNext())
		{
			bMeeting=bIt.next();
			if(bMeeting.getUserName().equalsIgnoreCase(bookedUser.getName()))
			{
				title=bMeeting.getTitle();
				//判定数据标准位置为原始状态
	    		hasRemove=false;
			
		    	//获得预约人的相关信息
		    	scheduleUser=userData.getPerson(bMeeting.gerOtherName());
		    	scheduledMeetingList=meetingMap.get(scheduleUser);
	    		schIt=scheduledMeetingList.iterator();
	    		while(schIt.hasNext())
		    	{
	    			schMeeting=schIt.next();
		    		if(schMeeting.getTitle().equalsIgnoreCase(title)&&schMeeting
		    				.getUserName().equalsIgnoreCase(bookedUser.getName()))
			    	{
 					hasRemove=true;
	     				schIt.remove();
	     				schIt=scheduledMeetingList.iterator();
	    			}
	     		}
	    		//标志位为原始状态,说明并没有在预约的用户会议集中删除会议
    			if(!hasRemove)
		    		throw new RemoteException("Exception:会议在发起人中找到,而没有找到相关的预约人,数据逻辑发生错误!!");
	    		//从自己的会议列表中删除会议
		    	bIt.remove();
	    		clearNum++;
		    	bIt=bookedMeetingList.iterator();
///**   */ System.out.println("###########        qingchuyige    ######################################");		
			}	
		}
		if(clearNum==0)
			throw new RemoteException("提示:清除会议数为 0 ,当前的会议集中的会议您为预约人,无权删除会议!!!");
		return true;
	}
	
	
	/**
	 * 判断添加需要添加的会议与现有的会议是否有时间的冲突,如果冲突返回true否则返回false;
	 * @param meetingList
	 * @param meeting
	 * @return
	 */
	public Boolean ifTimeOverlap(ArrayList<Meeting> meetingList,Meeting meeting)
	{
///**  */		System.out.println("in the function ifTimeOverlap 1");
		Date start=null,end=null;
		Meeting mt=null;
		
		start=meeting.getStartTime();
		end=meeting.getEndTime();
		
		if(meetingList==null)
			return false;
		
		Iterator<Meeting> iterator=meetingList.iterator();

		//此时该用户还没有任何会议议程
		if(!iterator.hasNext())
			return false;
		
		mt=iterator.next();
		while(mt!=null)
		{
			if(mt.getStartTime().after(end)||mt.getEndTime().before(start))
				if(iterator.hasNext())
					mt=iterator.next();
				else
					mt=null;
			else
				return true;
		}
		
///**  */		System.out.println("in the function ifTimeOverlap:has no overlap");

		return false;
	}
	
	/**
	 * 当添加一个会议的时候要初始化该用户的会议集
	 * @param user
	 * @throws RemoteException
	 */
	public void initializeMeeting(Person user) throws RemoteException
	{
//		System.out.println("in initializeMeeting");
//		if(meetingMap.containsKey(user))
//			throw new RemoteException("错误:该用户的会议集已经做了初始化!!!");

		ArrayList<Meeting> meetingList=new ArrayList<Meeting>();
		if(meetingList==null)
			System.out.println("initializeMeeting meetinglist is null");
		meetingMap.put(user,meetingList);
//		/*** */ System.out.println("初始化成功!!");
	}
	
	
	public void print(Person user)
	{
		bookedUserMeetinglist=meetingMap.get(user);
		if(bookedUserMeetinglist==null)
		{
			System.out.println("in print function bookedUserMeetinglist.size");//+//bookedUserMeetinglist.size());
		}
		for(int i=0;i<bookedUserMeetinglist.size();i++)
		{
			System.out.println("第 "+i+" 个会议  "+"会议名:"+bookedUserMeetinglist.get(i).getTitle());
			System.out.println("                         发起人:"+bookedUserMeetinglist.get(i).getTitle());
			System.out.println("                         邀请人:"+bookedUserMeetinglist.get(i).getTitle());
			System.out.println("                         起始时间:"+bookedUserMeetinglist.get(i).getTitle());
			System.out.println("                         结束时间:"+bookedUserMeetinglist.get(i).getTitle());	
		}
		
	}

}

⌨️ 快捷键说明

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