📄 agendadatabase.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 + -