timefinder.java
来自「100多M的J2EE培训内容」· Java 代码 · 共 118 行
JAVA
118 行
package com.borland.training.meetings.sessions;import java.util.*;import javax.ejb.*;import javax.naming.*;import com.borland.training.meetings.entities.*;public class TimeFinder { private static TimeFinder instance = null; private EJBHomeFactory homeFactory; private TimeFinder() throws NamingException { homeFactory = EJBHomeFactory.getInstance(); } public static TimeFinder getInstance() throws NamingException { if(instance == null) { instance = new TimeFinder(); } return instance; } public TimePeriod firstAvailableTime(Collection attendees, java.util.Date earliestTime) throws FinderException, NamingException { Collection meetings = null; int defaultInterval = 1; long maxAttempts = 10; int attempt = 0; // number of times the earliestTime was shifted to later TimePeriod result = new TimePeriod(); MeetingHome meetingHome = (MeetingHome) homeFactory.lookupByLocalEJBReference("Meeting"); boolean conflictFound = true; System.out.println("Entering the main loop"); earliestSearch: while(attempt++ < maxAttempts && conflictFound) { conflictFound = false; System.out.println("Looking for meetings in progress at: " + earliestTime); // find all meetings that will be in progress at earliestTime meetings = meetingHome.findByTime( new java.sql.Timestamp(earliestTime.getTime()), new java.sql.Timestamp(earliestTime.getTime())); // for each meeting Iterator miter = meetings.iterator(); while(miter.hasNext()) { Meeting meeting = (Meeting) miter.next(); // for each attendee within each meeting System.out.println("Checking meeting: " + meeting.getId() + ", " + meeting.getTopic() + ", " + meeting.getStartTime() + ", " + meeting.getFinishTime()); Iterator aiter = meeting.getAttendees().iterator(); while(aiter.hasNext()) { Attendee attendee = (Attendee) aiter.next(); System.out.println("\tChecking attendee: " + attendee.getName()); // if meeting is scheduled for one of the specified attendees if(attendees.contains(attendee)) { System.out.println("\tConflict discovered for attendee: " + attendee.getName()); // select a new earliest time (= when this meeting finishes) earliestTime = meeting.getFinishTime(); conflictFound = true; continue earliestSearch; } } } } if(conflictFound) { System.out.println("No available time period"); // No available time period return null; } // earliestTime found result.setStartTime(earliestTime); Calendar cal = Calendar.getInstance(); cal.setTime(earliestTime); cal.add(Calendar.HOUR, defaultInterval); result.setFinishTime(cal.getTime()); System.out.println("Proposed time period: " + result.getStartTime() + ", " + result.getFinishTime()); // now search for timeInterval System.out.println("Checking if endTime conflicts with any meetings"); meetings = meetingHome.findByTime( new java.sql.Timestamp(result.getStartTime().getTime()), new java.sql.Timestamp(result.getFinishTime().getTime())); Iterator miter = meetings.iterator(); // find earliest starting time amongst pertinent meetings while(miter.hasNext()) { Meeting meeting = (Meeting) javax.rmi.PortableRemoteObject.narrow(miter.next(), Meeting.class); System.out.println("Checking meeting: " + meeting.getId() + ", " + meeting.getTopic() + ", " + meeting.getStartTime() + ", " + meeting.getFinishTime()); Iterator aiter = meeting.getAttendees().iterator(); while(aiter.hasNext()) { Attendee attendee = (Attendee) aiter.next(); // if meeting is scheduled to include one of the attendees System.out.println("\tChecking attendee: " + attendee.getName()); if (attendees.contains(attendee)) { System.out.println("\tAttendee in the list"); java.util.Date startTime = meeting.getStartTime(); Calendar calStart = Calendar.getInstance(); calStart.setTime(startTime); Calendar calEnd = Calendar.getInstance(); calEnd.setTime(result.getFinishTime()); if(calStart.before(calEnd)) { result.setFinishTime(startTime); } System.out.println("\tSetting endTime to: " + result.getFinishTime()); } } } return result; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?