/*
* Aipo is a groupware program developed by TOWN, Inc.
* Copyright (C) 2004-2015 TOWN, Inc.
* http://www.aipo.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.aimluck.eip.schedule;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.aimluck.eip.common.ALData;
import com.aimluck.eip.schedule.util.ScheduleUtils;
/**
* カレンダー用のスケジュールのコンテナです。
*
*/
public class AjaxTermScheduleWeekContainer implements ALData {
/** <code>dayList</code> JOB リスト */
private List<AjaxTermScheduleDayContainer> dayList;
/*
*
*/
public void initField() {
dayList = new ArrayList<AjaxTermScheduleDayContainer>();
}
/**
* 表示開始する日付を設定します。
*
* @param cal
*/
public void setViewStartDate(Calendar cal) {
for (int i = 1; i <= 7; i++) {
// 日付を1日ずつずらす
AjaxTermScheduleDayContainer con = new AjaxTermScheduleDayContainer();
con.initField();
con.setDate(cal.getTime());
dayList.add(con);
cal.add(Calendar.DATE, 1);
}
}
/**
* Term をコンテナに格納します。
*
* @param rd
*/
public void addTermResultData(int index, AjaxScheduleResultData rd) {
int span = rd.getRowspan();
AjaxTermScheduleDayContainer con = dayList.get(index);
con.setHasTerm(true);
con.setTermResultData(rd);
for (int i = 1; i < span; i++) {
con = dayList.get(index + i);
con.setHasTerm(true);
}
}
public boolean canAddTerm(AjaxScheduleResultData rd) {
boolean canAdd = true;
Date startDate = rd.getStartDate().getValue();
Date endDate = rd.getEndDate().getValue();
AjaxTermScheduleDayContainer con;
int size = dayList.size();
for (int i = 0; i < size; i++) {
con = dayList.get(i);
Date conDate = con.getDate().getValue();
boolean isEmptyStartDate =
ScheduleUtils.equalsToDate(
ScheduleUtils.getEmptyDate(),
startDate,
false);
boolean isEmptyEndDate =
ScheduleUtils
.equalsToDate(ScheduleUtils.getEmptyDate(), endDate, false);
if (isEmptyStartDate && isEmptyEndDate) {
// 開始日と入稿日が未設定の場合
if (con.isHasTerm()) {
canAdd = false;
}
} else {
if (isEmptyStartDate) {
// 開始日が未設定の場合
if (ScheduleUtils.equalsToDate(endDate, conDate, false)
|| conDate.before(endDate)) {
if (con.isHasTerm()) {
canAdd = false;
}
}
} else if (isEmptyEndDate) {
// 入稿日が未設定の場合
if (ScheduleUtils.equalsToDate(startDate, conDate, false)
|| conDate.after(startDate)) {
if (con.isHasTerm()) {
canAdd = false;
}
}
} else {
// 開始日と入稿日が設定されている場合
if ((ScheduleUtils.equalsToDate(startDate, conDate, false) || conDate
.after(startDate))
&& (ScheduleUtils.equalsToDate(endDate, conDate, false) || conDate
.before(endDate))) {
if (con.isHasTerm()) {
canAdd = false;
}
}
}
}
}
return canAdd;
}
/**
* JOB リストを取得します。
*
* @return
*
* @uml.property name="dayList"
*/
public List<AjaxTermScheduleDayContainer> getDayList() {
return dayList;
}
/**
* 表示すべき期間スケジュールが存在するかどうかを返します
*
* @return
*/
public boolean hasVisibleTerm() {
for (AjaxTermScheduleDayContainer dayContainer : dayList) {
if (dayContainer.isHasTerm()) {
AjaxScheduleResultData rd = dayContainer.getTermResultData();
if (rd != null
&& (!rd.isPrivate() || rd.isLoginuser() || rd.isMember())) {
return true;
}
}
}
return false;
}
}