TimeIntervalBean
ClickToCallBean
Test
package com.test;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class TimeIntervalBean{
private Calendar currentCalendar;
private Calendar initialTimeCalendar;
private Calendar terminalTimeCalendar;
private Boolean isWeekendToday = Boolean.FALSE;
private Boolean isWeekendNextday = Boolean.FALSE;
private Calendar initialTimeCalendarNextday;
private Calendar terminalTimeCalendarNextday;
private Calendar endTimeCalendar;
private int field;
private int roundInterval;
private int firstTimeInterval;
private int subTimeInterval;
private List startTimeList = new ArrayList();
private List endTimeList = new ArrayList();
public int getSubTimeInterval() {
return subTimeInterval;
}
public void setSubTimeInterval(int subTimeInterval) {
this.subTimeInterval = subTimeInterval;
}
public Calendar getCurrentCalendar() {
return currentCalendar;
}
public void setCurrentCalendar(Calendar currentCalendar) {
this.currentCalendar = currentCalendar;
}
public Calendar getInitialTimeCalendar() {
return initialTimeCalendar;
}
public void setInitialTimeCalendar(Calendar initialTimeCalendar) {
this.initialTimeCalendar = initialTimeCalendar;
}
public Calendar getTerminalTimeCalendar() {
return terminalTimeCalendar;
}
public void setTerminalTimeCalendar(Calendar terminalTimeCalendar) {
this.terminalTimeCalendar = terminalTimeCalendar;
}
public Calendar getEndTimeCalendar() {
return endTimeCalendar;
}
public void setEndTimeCalendar(Calendar endTimeCalendar) {
this.endTimeCalendar = endTimeCalendar;
}
public int getField() {
return field;
}
public void setField(int field) {
this.field = field;
}
public int getRoundInterval() {
return roundInterval;
}
public void setRoundInterval(int roundInterval) {
this.roundInterval = roundInterval;
}
public int getFirstTimeInterval() {
return firstTimeInterval;
}
public void setFirstTimeInterval(int firstTimeInterval) {
this.firstTimeInterval = firstTimeInterval;
}
public List getStartTimeList() {
return startTimeList;
}
public void setStartTimeList(List startTimeList) {
this.startTimeList = startTimeList;
}
public List getEndTimeList() {
return endTimeList;
}
public void setEndTimeList(List endTimeList) {
this.endTimeList = endTimeList;
}
public Boolean getIsWeekendToday() {
return isWeekendToday;
}
public void setIsWeekendToday(Boolean isWeekendToday) {
this.isWeekendToday = isWeekendToday;
}
public Boolean getIsWeekendNextday() {
return isWeekendNextday;
}
public void setIsWeekendNextday(Boolean isWeekendNextday) {
this.isWeekendNextday = isWeekendNextday;
}
public Calendar getInitialTimeCalendarNextday() {
return initialTimeCalendarNextday;
}
public void setInitialTimeCalendarNextday(Calendar initialTimeCalendarNextday) {
this.initialTimeCalendarNextday = initialTimeCalendarNextday;
}
public Calendar getTerminalTimeCalendarNextday() {
return terminalTimeCalendarNextday;
}
public void setTerminalTimeCalendarNextday(Calendar terminalTimeCalendarNextday) {
this.terminalTimeCalendarNextday = terminalTimeCalendarNextday;
}
}
ClickToCallBean
package com.test;
import java.util.List;
public class ClickToCallBean {
private String subBusiness;
private String timeZone;
private String customerNumber;
private String preferLanguage;
private List preferLanguageList;
private String countryCode;
private String areaCode;
private String phoneNumber;
private String extensionNumber;
private Boolean isCusomterMobile;
private String enquirySubject;
private List enquirySubjectList;
private String enquiryDetails;
private String callBackTime;
private List callBackTimeList;
private String callBackStartTime;
private String callBackEndTime;
private List startTimeList;
private List endTimeList;
private String confirmNumber;
private Boolean hasErrorFlag = Boolean.FALSE;
public String getTimeZone() {
return timeZone;
}
public void setTimeZone(String timeZone) {
if (timeZone != null) {
this.timeZone = timeZone ;
}
}
public String getCustomerNumber() {
return customerNumber;
}
public void setCustomerNumber(String customerNumber) {
this.customerNumber = customerNumber ;
}
public String getPreferLanguage() {
return preferLanguage;
}
public void setPreferLanguage(String preferLanguage) {
this.preferLanguage = preferLanguage ;
}
public List getPreferLanguageList() {
return preferLanguageList;
}
public void setPreferLanguageList(List preferLanguageList) {
this.preferLanguageList = preferLanguageList;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode ;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode ;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber ;
}
public String getExtensionNumber() {
return extensionNumber;
}
public void setExtensionNumber(String extensionNumber) {
this.extensionNumber = extensionNumber ;
}
public Boolean getIsCusomterMobile() {
return isCusomterMobile;
}
public void setIsCusomterMobile(Boolean isCusomterMobile) {
this.isCusomterMobile = isCusomterMobile;
}
public String getEnquirySubject() {
return enquirySubject;
}
public void setEnquirySubject(String enquirySubject) {
this.enquirySubject = enquirySubject ;
}
public List getEnquirySubjectList() {
return enquirySubjectList;
}
public void setEnquirySubjectList(List enquirySubjectList) {
this.enquirySubjectList = enquirySubjectList;
}
public String getEnquiryDetails() {
return enquiryDetails;
}
public void setEnquiryDetails(String enquiryDetails) {
this.enquiryDetails = enquiryDetails ;
}
public String getCallBackTime() {
return callBackTime;
}
public void setCallBackTime(String callBackTime) {
this.callBackTime = callBackTime ;
}
public List getCallBackTimeList() {
return callBackTimeList;
}
public void setCallBackTimeList(List callBackTimeList) {
this.callBackTimeList = callBackTimeList;
}
public String getCallBackStartTime() {
return callBackStartTime;
}
public void setCallBackStartTime(String callBackStartTime) {
this.callBackStartTime = callBackStartTime ;
}
public String getCallBackEndTime() {
return callBackEndTime;
}
public void setCallBackEndTime(String callBackEndTime) {
this.callBackEndTime = callBackEndTime ;
}
public String getConfirmNumber() {
return confirmNumber;
}
public void setConfirmNumber(String confirmNumber) {
this.confirmNumber = confirmNumber ;
}
public Boolean getHasErrorFlag() {
return hasErrorFlag;
}
public void setHasErrorFlag(Boolean hasErrorFlag) {
this.hasErrorFlag = hasErrorFlag;
}
public List getStartTimeList() {
return startTimeList;
}
public void setStartTimeList(List startTimeList) {
this.startTimeList = startTimeList;
}
public List getEndTimeList() {
return endTimeList;
}
public void setEndTimeList(List endTimeList) {
this.endTimeList = endTimeList;
}
public String getSubBusiness() {
return subBusiness;
}
public void setSubBusiness(String subBusiness) {
this.subBusiness = subBusiness ;
}
}
Test
package com.test.change;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;
public class Test {
public static void generateCallBackTimeList() throws ParseException{
Calendar cal =Calendar.getInstance();
TimeIntervalBean timeIntervalBean = new TimeIntervalBean();
ClickToCallBean ctcBean = new ClickToCallBean();
timeIntervalBean.setField(Calendar.MINUTE);
timeIntervalBean.setRoundInterval(30);
timeIntervalBean.setFirstTimeInterval(30);
timeIntervalBean.setSubTimeInterval(30);
String saturdayInitialTime = "00:00";
String saturdayTerminalTime = "24:00";
String saturdayInitialTimeArray[] = saturdayInitialTime.split(":");
String saturdayTerminalTimeArray[] = saturdayTerminalTime.split(":");
String sundayInitialTime = "06:00";
String sundayTerminalTime = "24:00";
String sundayInitialTimeArray[] = sundayInitialTime.split(":");
String sundayTerminalTimeArray[] = sundayTerminalTime.split(":");
String initialTime = "00:00";
String terminalTime = "24:00";
String initialTimeArray[] = initialTime.split(":");
String terminalTimeArray[] = terminalTime.split(":");
TimeZone timeZone=cal.getTimeZone();
TimeZone.setDefault(timeZone);
ctcBean.setTimeZone(timeZone.getID());
Calendar currentCalendar = Calendar.getInstance(timeZone);
// String noServiceDate="7,1";
//
//
// String []noServiceDateArray=null;
// if( noServiceDate!=null || !"".equals(noServiceDate)){
// noServiceDateArray =noServiceDate.split(",");//1 7
// }
//
// TimeZone timeZone = businessUnit.getToolkit().getDateTimeFormatter().getCurrentCalendar((Locale)baseProfile.getProperty(BaseProfile.LOCALE), true).getTimeZone();
// TimeZone.setDefault(timeZone);
int initialTimeHour = Integer.valueOf(initialTimeArray[0]).intValue();
int initialTimeMinutes = Integer.valueOf(initialTimeArray[1]).intValue();
int terminalTimeHour = Integer.valueOf(terminalTimeArray[0]).intValue();
int terminalTimeMinutes = Integer.valueOf(terminalTimeArray[1]).intValue();
// Arrays.binarySearch(noServiceDateArray, dayOfWeek)>=0
if(String.valueOf(currentCalendar.get(Calendar.DAY_OF_WEEK)).equals("6")){
System.out.println("11111111");
initialTimeHour = Integer.valueOf(saturdayInitialTimeArray[0]).intValue();
initialTimeMinutes = Integer.valueOf(saturdayInitialTimeArray[1]).intValue();
terminalTimeHour = Integer.valueOf(saturdayTerminalTimeArray[0]).intValue();
terminalTimeMinutes = Integer.valueOf(saturdayTerminalTimeArray[1]).intValue();
}
if(String.valueOf(currentCalendar.get(Calendar.DAY_OF_WEEK)).equals("7")){
System.out.println("222222222");
initialTimeHour = Integer.valueOf(sundayInitialTimeArray[0]).intValue();
initialTimeMinutes = Integer.valueOf(sundayInitialTimeArray[1]).intValue();
terminalTimeHour = Integer.valueOf(sundayTerminalTimeArray[0]).intValue();
terminalTimeMinutes = Integer.valueOf(sundayTerminalTimeArray[1]).intValue();
}
//Initial CITI Operating Time based on values getting from Rule
Calendar initialTimeCalendar = Calendar.getInstance(timeZone);
initialTimeCalendar.set(Calendar.HOUR_OF_DAY, initialTimeHour);
initialTimeCalendar.set(Calendar.MINUTE, initialTimeMinutes);
Calendar terminalTimeCalendar = Calendar.getInstance(timeZone);
terminalTimeCalendar.set(Calendar.HOUR_OF_DAY, terminalTimeHour);
terminalTimeCalendar.set(Calendar.MINUTE, terminalTimeMinutes);
timeIntervalBean.setCurrentCalendar(currentCalendar);
timeIntervalBean.setInitialTimeCalendar(initialTimeCalendar);
timeIntervalBean.setTerminalTimeCalendar(terminalTimeCalendar);
Calendar initialNextDay = Calendar.getInstance(timeZone);
initialNextDay.add(Calendar.DAY_OF_WEEK, 1);
Calendar terminalNextDay = Calendar.getInstance(timeZone);
terminalNextDay.add(Calendar.DAY_OF_WEEK, 1);
int initialTimeHourWeekEnd = Integer.valueOf(initialTimeArray[0]).intValue();
int initialTimeMinutesWeekEnd = Integer.valueOf(initialTimeArray[1]).intValue();
int terminalTimeHourNextday = Integer.valueOf(terminalTimeArray[0]).intValue();
int terminalTimeMinutesNextday = Integer.valueOf(terminalTimeArray[1]).intValue();
if(String.valueOf(initialNextDay.get(Calendar.DAY_OF_WEEK)).equals("6")){
// if(initialNextDay.get(Calendar.DAY_OF_WEEK) ==Integer.parseInt(noServiceDateArray[0]) || initialNextDay.get(Calendar.DAY_OF_WEEK) == Integer.parseInt(noServiceDateArray[1])){
//timeIntervalBean.setIsWeekendNextday(Boolean.TRUE);
initialTimeHourWeekEnd = Integer.valueOf(saturdayInitialTimeArray[0]).intValue();
initialTimeMinutesWeekEnd = Integer.valueOf(saturdayInitialTimeArray[1]).intValue();
terminalTimeHourNextday = Integer.valueOf(saturdayTerminalTimeArray[0]).intValue();
terminalTimeMinutesNextday = Integer.valueOf(saturdayTerminalTimeArray[1]).intValue();
}
if(String.valueOf(initialNextDay.get(Calendar.DAY_OF_WEEK)).equals("7")){
// if(initialNextDay.get(Calendar.DAY_OF_WEEK) ==Integer.parseInt(noServiceDateArray[0]) || initialNextDay.get(Calendar.DAY_OF_WEEK) == Integer.parseInt(noServiceDateArray[1])){
//timeIntervalBean.setIsWeekendNextday(Boolean.TRUE);
initialTimeHourWeekEnd = Integer.valueOf(sundayInitialTimeArray[0]).intValue();
initialTimeMinutesWeekEnd = Integer.valueOf(sundayInitialTimeArray[1]).intValue();
terminalTimeHourNextday = Integer.valueOf(sundayTerminalTimeArray[0]).intValue();
terminalTimeMinutesNextday = Integer.valueOf(sundayTerminalTimeArray[1]).intValue();
}
initialNextDay.set(Calendar.HOUR_OF_DAY, initialTimeHourWeekEnd);
initialNextDay.set(Calendar.MINUTE, initialTimeMinutesWeekEnd);
terminalNextDay.set(Calendar.HOUR_OF_DAY, terminalTimeHourNextday);
terminalNextDay.set(Calendar.MINUTE, terminalTimeMinutesNextday);
timeIntervalBean.setInitialTimeCalendarNextday(initialNextDay);
timeIntervalBean.setTerminalTimeCalendarNextday(terminalNextDay);
//Initial the last EndTime round 24 hours based on current Time.
Calendar endTimeCalendar = Calendar.getInstance(timeZone);
// endTimeCalendar.setTime(date);
endTimeCalendar.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(endTimeCalendar.getTime()+"endTimeCalendar");
if(endTimeCalendar.after(terminalNextDay)){
endTimeCalendar = terminalNextDay;
} else if(endTimeCalendar.before(initialNextDay)){
endTimeCalendar = initialNextDay;
}
timeIntervalBean.setEndTimeCalendar(endTimeCalendar);
generateCallBackTimeList(timeIntervalBean);
List startTimeList =timeIntervalBean.getStartTimeList();
List endTimeList =timeIntervalBean.getEndTimeList();
for(int i=0;i<startTimeList.size();i++){
System.out.println(startTimeList.get(i)+"-----------"+endTimeList.get(i));
}
ctcBean.setStartTimeList(timeIntervalBean.getStartTimeList());
ctcBean.setEndTimeList(timeIntervalBean.getEndTimeList());
}
private static void generateCallBackTimeList(TimeIntervalBean timeIntervalBean){
int roundInterval = timeIntervalBean.getRoundInterval();
int firstTimeInterval = timeIntervalBean.getFirstTimeInterval();
int subTimeInterval = timeIntervalBean.getSubTimeInterval();
//Non-operating TimeMillis is used for calculating SubTimeInterval options recurring times
int invalidTimeMillis = (int)(timeIntervalBean.getInitialTimeCalendarNextday().getTimeInMillis() - timeIntervalBean.getTerminalTimeCalendar().getTimeInMillis());
Calendar currentCalendar = timeIntervalBean.getCurrentCalendar();
if(currentCalendar.before(timeIntervalBean.getInitialTimeCalendar())){
currentCalendar = timeIntervalBean.getInitialTimeCalendar();
}
//Generate StartTime of CallBackTimeList based on RoundInterval value from Rule
if(roundInterval != 0){
int tempInterval = currentCalendar.get(timeIntervalBean.getField()) + roundInterval;
currentCalendar.set(Calendar.MINUTE, roundInterval*((int)(tempInterval/roundInterval) ) );
}
//Generate First TimeInterval option
timeIntervalBean.setCurrentCalendar(currentCalendar);
generateList(timeIntervalBean, firstTimeInterval, 1);
//Generate Sub TimeInterval options
//the recurringTime is calculated via LastEndTimeRound24Hours - currentRecurringTime - Non-operatingTime
Calendar endTimeCalendar = timeIntervalBean.getEndTimeCalendar();
long totalTimeInMillis = endTimeCalendar.getTimeInMillis() - currentCalendar.getTimeInMillis() - invalidTimeMillis;
int subTimeIntervalRecuringTimes = (int)totalTimeInMillis / (subTimeInterval*60*1000) ;
generateList(timeIntervalBean, subTimeInterval, subTimeIntervalRecuringTimes);
}
/**
*
* @param timeIntervalBean
* @param interval
* @param recurringTimes
*/
private static void generateList(TimeIntervalBean timeIntervalBean, int interval, int recurringTimes){
List startTimeList = timeIntervalBean.getStartTimeList();
List endTimeList = timeIntervalBean.getEndTimeList();
//Calendar initialTimeCalendar = timeIntervalBean.getInitialTimeCalendar();
Calendar currentCalendar = timeIntervalBean.getCurrentCalendar();
Calendar endTimeCalendar = timeIntervalBean.getEndTimeCalendar();
Calendar tempEndTimeCalendar = Calendar.getInstance(currentCalendar.getTimeZone());
Calendar terminalTimeCalendar = timeIntervalBean.getTerminalTimeCalendar();
for(int i=0; i<recurringTimes; i++){
/*
* If TemporaryCalendar after increasing interval based on currentCalendar is after CITI Operating EndTime,
* step to CITI Operating StartTime of second day
*/
tempEndTimeCalendar.setTimeInMillis(currentCalendar.getTimeInMillis() + interval*60*1000);
if(tempEndTimeCalendar.after(timeIntervalBean.getTerminalTimeCalendar())){
currentCalendar = timeIntervalBean.getInitialTimeCalendarNextday();
terminalTimeCalendar = timeIntervalBean.getTerminalTimeCalendarNextday();
}
/*
* If TemporaryCalendar after increasing interval based on currentCalendar is after the last EndTime round 24Hours based on currentTime,
* break recurring
*/
if(tempEndTimeCalendar.after(endTimeCalendar)){
System.err.println("tempEndTimeCalendar "+tempEndTimeCalendar.getTime());
System.err.println("111111111");
break;
}
//Generate StartTime & EndTime and add into List
startTimeList.add(currentCalendar.getTime());
currentCalendar.add(Calendar.MINUTE, interval);
endTimeList.add(currentCalendar.getTime());
}
timeIntervalBean.setStartTimeList(startTimeList);
timeIntervalBean.setEndTimeList(endTimeList);
timeIntervalBean.setTerminalTimeCalendar(terminalTimeCalendar);
timeIntervalBean.setCurrentCalendar(currentCalendar);
}
public static void main(String[] args) throws ParseException {
// Map map =new HashMap();
// map.put("1", "1V");
// map.put("2", "2V");
// map.put("3", "3V");
// StringBuffer test=new StringBuffer();
// String key="";
// String value="";
// Set set = map.keySet();set.size();
// Iterator it =set.iterator();
// while(it.hasNext()){
// key = (String)it.next();
// value = (String)map.get(key);
// test.append(key).append("=").append(value).append("=");
// }
//
// String rs = test.substring(0, test.lastIndexOf("="));
// System.out.println(test);
// test();
generateCallBackTimeList();
// Calendar cal=Calendar.getInstance();
// cal.setTime(new Date());
// System.out.println("hh:"+cal.get(Calendar.HOUR_OF_DAY)+" mm:"+cal.get(Calendar.MINUTE));
}
}