/*
* 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.List;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
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.EipTTodo;
import com.aimluck.eip.cayenne.om.portlet.VEipTScheduleList;
import com.aimluck.eip.cayenne.om.security.TurbineUser;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALEipUser;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.modules.actions.common.ALAction;
import com.aimluck.eip.orm.Database;
import com.aimluck.eip.orm.query.SelectQuery;
import com.aimluck.eip.schedule.util.ScheduleUtils;
import com.aimluck.eip.todo.util.ToDoUtils;
import com.aimluck.eip.util.ALEipUtils;
import com.aimluck.eip.util.ALLocalizationUtils;
/**
* スケジュール1日表示の検索結果を管理するクラスです。
*
*/
public class CellScheduleOnedaySelectByMemberData extends
CellScheduleOnedaySelectData {
/** <code>logger</code> logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(CellScheduleOnedaySelectByMemberData.class.getName());
/** <code>login_user</code> 表示対象ユーザー */
private ALEipUser targerUser;
/** <code>todoList</code> ToDo リスト */
private List<ScheduleToDoResultData> todoList;
/** ポートレット ID */
private String portletId;
/** ログインユーザID */
private int userid;
@Override
public void init(ALAction action, RunData rundata, Context context)
throws ALPageNotFoundException, ALDBErrorException {
super.init(action, rundata, context);
userid = ALEipUtils.getUserId(rundata);
// 表示対象ユーザー取得
String s = rundata.getParameters().getString("selectedmember");
if (s != null) {
targerUser = ALEipUtils.getALEipUser(Integer.parseInt(s));
} else {
// ToDo詳細画面に遷移後に"前画面に戻る"で戻ってきた場合
s = ALEipUtils.getTemp(rundata, context, "target_otheruser_id");
targerUser = ALEipUtils.getALEipUser(Integer.parseInt(s));
}
}
@Override
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());
return ScheduleUtils.getScheduleList(
userid,
getViewDate().getValue(),
field.getValue(),
Arrays.asList((int) targerUser.getUserId().getValue()),
null);
}
@Override
public void loadToDo(RunData rundata, Context context) {
todoList = new ArrayList<ScheduleToDoResultData>();
try {
SelectQuery<EipTTodo> query = getSelectQueryForTodo(rundata, context);
List<EipTTodo> todos = query.fetchList();
int todosize = todos.size();
for (int i = 0; i < todosize; i++) {
EipTTodo record = todos.get(i);
ScheduleToDoResultData rd = new ScheduleToDoResultData();
rd.initField();
// ポートレット ToDo のへのリンクを取得する.
String todo_url =
getPortletURItoTodo(
rundata,
record.getTodoId().longValue(),
portletId);
rd.setTodoId(record.getTodoId().intValue());
rd.setTodoName(record.getTodoName());
rd.setUserId(record.getTurbineUser().getUserId().intValue());
rd.setStartDate(record.getStartDate());
rd.setEndDate(record.getEndDate());
rd.setTodoUrl(todo_url);
// 公開/非公開を設定する.
rd.setPublicFlag("T".equals(record.getPublicFlag()));
todoList.add(rd);
}
} catch (Exception ex) {
logger.error("schedule", ex);
return;
}
}
private SelectQuery<EipTTodo> getSelectQueryForTodo(RunData rundata,
Context context) {
// Integer uid = Integer.valueOf(ALEipUtils.getUserId(rundata));
Integer uid = (int) targerUser.getUserId().getValue();
SelectQuery<EipTTodo> query = Database.query(EipTTodo.class);
Expression exp1 =
ExpressionFactory.noMatchExp(EipTTodo.STATE_PROPERTY, Short
.valueOf((short) 100));
query.setQualifier(exp1);
Expression exp2 =
ExpressionFactory.matchExp(EipTTodo.ADDON_SCHEDULE_FLG_PROPERTY, "T");
query.andQualifier(exp2);
Expression exp3 =
ExpressionFactory.matchDbExp(TurbineUser.USER_ID_PK_COLUMN, uid);
query.andQualifier(exp3);
// 終了日時
Expression exp11 =
ExpressionFactory.greaterOrEqualExp(
EipTTodo.END_DATE_PROPERTY,
getViewDate().getValue());
// 開始日時
Expression exp12 =
ExpressionFactory.lessOrEqualExp(
EipTTodo.START_DATE_PROPERTY,
getViewDate().getValue());
// 開始日時のみ指定されている ToDo を検索
Expression exp21 =
ExpressionFactory.lessOrEqualExp(
EipTTodo.START_DATE_PROPERTY,
getViewDate().getValue());
Expression exp22 =
ExpressionFactory.matchExp(EipTTodo.END_DATE_PROPERTY, ToDoUtils
.getEmptyDate());
// 終了日時のみ指定されている ToDo を検索
Expression exp31 =
ExpressionFactory.greaterOrEqualExp(
EipTTodo.END_DATE_PROPERTY,
getViewDate().getValue());
Expression exp32 =
ExpressionFactory.matchExp(EipTTodo.START_DATE_PROPERTY, ToDoUtils
.getEmptyDate());
query.andQualifier((exp11.andExp(exp12)).orExp(exp21.andExp(exp22)).orExp(
exp31.andExp(exp32)));
return query;
}
/**
*
* @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 rd;
}
if (!ScheduleUtils.isView(
getViewDate(),
record.getRepeatPattern(),
record.getStartDate(),
record.getEndDate())) {
return rd;
}
// 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());
boolean is_member = record.isMember();
// 非公開/完全に隠す に対応
boolean publicable = record.getPublicFlag().equals("O");
if (!publicable && !is_member) {
rd.setName(ALLocalizationUtils.getl10n("SCHEDULE_CLOSE_PUBLIC_WORD"));
}
boolean hidden = record.getPublicFlag().equals("P");
if (hidden && !is_member) {
// 「完全に隠す」でメンバーでない場合
return null;
}
// // 期間スケジュールの場合
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("schedule", e);
return null;
}
return rd;
}
public ALEipUser getTargerUser() {
return targerUser;
}
public void setTargerUser(ALEipUser targerUser) {
this.targerUser = targerUser;
}
@Override
public List<ScheduleToDoResultData> getToDoResultDataList() {
return todoList;
}
@Override
public void setPortletId(String id) {
portletId = id;
}
public String getAliasNameText() {
return ALLocalizationUtils.getl10nFormat("SCHEDULE_GO_SCHEDULE", targerUser
.getAliasName()
.toString());
}
public String getAliasNameOnedayListText() {
return ALLocalizationUtils.getl10nFormat(
"SCHEDULE_ONES_ONEDAY_LIST",
targerUser.getAliasName().toString());
}
}