/*
* 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.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import com.aimluck.commons.field.ALDateTimeField;
import com.aimluck.eip.cayenne.om.portlet.VEipTScheduleList;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.modules.actions.common.ALAction;
import com.aimluck.eip.orm.query.ResultList;
import com.aimluck.eip.schedule.util.ScheduleUtils;
import com.aimluck.eip.util.ALEipUtils;
/**
* スケジュール1日表示の検索結果を管理するクラスです。
*
*/
public class CellScheduleOnedaySelectData extends ScheduleOnedaySelectData {
/** <code>logger</code> logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(CellScheduleOnedaySelectData.class.getName());
@Override
public void init(ALAction action, RunData rundata, Context context)
throws ALPageNotFoundException, ALDBErrorException {
super.init(action, rundata, context);
}
/**
*
* @param rundata
* @param context
* @return
* @throws ALPageNotFoundException
* @throws ALDBErrorException
*/
@Override
protected ResultList<VEipTScheduleList> selectList(RunData rundata,
Context context) throws ALPageNotFoundException, ALDBErrorException {
try {
List<VEipTScheduleList> resultBaseList =
getScheduleList(rundata, context);
List<VEipTScheduleList> resultList =
ScheduleUtils.sortByDummySchedule(resultBaseList);
List<VEipTScheduleList> list = new ArrayList<VEipTScheduleList>();
int resultSize = resultList.size();
int DummySize = 0;
boolean flg = false;
boolean canAdd = true;
for (int i = 0; i < resultSize; i++) {
VEipTScheduleList record = resultList.get(i);
canAdd = true;
if (!record.getStatus().equals("D")) {
if (!flg) {
DummySize = i;
flg = true;
}
for (int j = 0; j < DummySize; j++) {
VEipTScheduleList record2 = resultList.get(j);
if (!record.getRepeatPattern().equals("N")
&& record.getScheduleId().equals(record2.getParentId())) {
canAdd = false;
break;
}
}
} else {
canAdd = false;
}
if (canAdd) {
list.add(record);
}
}
// ソート
Collections.sort(list, new Comparator<VEipTScheduleList>() {
@Override
public int compare(VEipTScheduleList a, VEipTScheduleList b) {
Calendar cal = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
// 期間スケジュールを先頭に表示
if (a.getRepeatPattern().equals("S")) {
if (!b.getRepeatPattern().equals("S")) {
return -1;
}
} else {
if (b.getRepeatPattern().equals("S")) {
return 1;
}
}
cal.setTime(a.getStartDate());
cal.set(0, 0, 0);
cal2.setTime(b.getStartDate());
cal2.set(0, 0, 0);
if ((cal.getTime()).compareTo(cal2.getTime()) != 0) {
return (cal.getTime()).compareTo(cal2.getTime());
} else {
cal.setTime(a.getEndDate());
cal.set(0, 0, 0);
cal2.setTime(b.getEndDate());
cal2.set(0, 0, 0);
return (cal.getTime()).compareTo(cal2.getTime());
}
}
});
if (viewToDo == 1) {
// ToDo の読み込み
loadToDo(rundata, context);
}
return new ResultList<VEipTScheduleList>(list);
} catch (Exception e) {
logger.error("[CellScheduleOnedaySelectData]", e);
throw new ALDBErrorException();
}
}
protected List<VEipTScheduleList> getScheduleList(RunData rundata,
Context context) {
Calendar cal = Calendar.getInstance();
cal.setTime(getViewDate().getValue());
cal.add(Calendar.DATE, 1);
cal.add(Calendar.MILLISECOND, -1);
ALDateTimeField field = new ALDateTimeField();
field.setValue(cal.getTime());
Integer userid = Integer.valueOf(ALEipUtils.getUserId(rundata));
return ScheduleUtils.getScheduleList(
userid,
getViewDate().getValue(),
field.getValue(),
Arrays.asList(userid),
null);
}
/**
*
* @param record
* @return
* @throws ALPageNotFoundException
* @throws ALDBErrorException
*/
@Override
protected Object getResultData(VEipTScheduleList record)
throws ALPageNotFoundException, ALDBErrorException {
CellScheduleResultData rd = new CellScheduleResultData();
CellScheduleResultData rd2 = new CellScheduleResultData();
rd.initField();
rd2.setFormat("yyyy-MM-dd-HH-mm");
rd2.initField();
try {
if ("R".equals(record.getStatus())) {
return null;
}
if (!ScheduleUtils.isView(
getViewDate(),
record.getRepeatPattern(),
record.getStartDate(),
record.getEndDate())) {
return null;
}
// ID
rd.setScheduleId(record.getScheduleId().intValue());
// 親スケジュール ID
rd.setParentId(record.getParentId().intValue());
// タイトル
rd.setName(record.getName());
// 開始時間
rd.setStartDate(record.getStartDate());
// 終了時間
rd.setEndDate(record.getEndDate());
// 仮スケジュールかどうか
rd.setTmpreserve("T".equals(record.getStatus()));
// 公開するかどうか
rd.setPublic("O".equals(record.getPublicFlag()));
// 表示するかどうか
rd.setHidden("P".equals(record.getPublicFlag()));
// ダミーか
// rd.setDummy("D".equals(record.getStatus()));
// 繰り返しパターン
rd.setPattern(record.getRepeatPattern());
// // 期間スケジュールの場合
if (rd.getPattern().equals("S")) {
// spanResultData = rd;
rd.setSpan(true);
return rd;
}
// 繰り返しスケジュールの場合
if (!rd.getPattern().equals("N")) {
if (!ScheduleUtils.isView(getViewDate(), rd.getPattern(), rd
.getStartDate()
.getValue(), rd.getEndDate().getValue())) {
return rd;
}
rd.setRepeat(true);
}
} catch (Exception e) {
logger.error("[CellScheduleOnedaySelectData]", e);
return null;
}
return rd;
}
@Override
protected String getPortletURItoTodo(RunData rundata, long entityid,
String schedulePortletId) {
return ScheduleUtils.getPortletURItoTodoDetailPaneForCell(
rundata,
"Cell_ToDo",
entityid,
schedulePortletId);
}
}