/*
* 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.project;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.jar.Attributes;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.commons.lang.StringUtils;
import org.apache.jetspeed.portal.portlets.VelocityPortlet;
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.EipTProjectMember;
import com.aimluck.eip.cayenne.om.portlet.EipTProjectTask;
import com.aimluck.eip.cayenne.om.portlet.EipTProjectTaskFile;
import com.aimluck.eip.common.ALAbstractMultiFilterSelectData;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALData;
import com.aimluck.eip.common.ALEipConstants;
import com.aimluck.eip.common.ALEipHolidaysManager;
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.ResultList;
import com.aimluck.eip.orm.query.SelectQuery;
import com.aimluck.eip.project.util.ProjectFile;
import com.aimluck.eip.project.util.ProjectUtils;
import com.aimluck.eip.util.ALEipUtils;
/**
* タスクの検索データを管理するクラスです。 <BR>
*
*/
public class ProjectTaskSimpleSelectData extends
ALAbstractMultiFilterSelectData<EipTProjectTask, EipTProjectTask> implements
ALData {
/** logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(ProjectTaskSimpleSelectData.class.getName());
/** タスクの総数 */
private int taskCount;
/** 全プロジェクトの一覧 */
private List<ProjectResultData> allProject;
/** 選択されているプロジェクトID */
private Integer selectedProjectId;
/** ファイル操作オブジェクト */
private final ProjectFile<EipTProjectTaskFile, EipTProjectTask> pfile =
new ProjectFile<EipTProjectTaskFile, EipTProjectTask>(
EipTProjectTaskFile.class);
/** プロジェクトメンバーリスト */
private List<ALEipUser> projectMembers;
/** 基準日From(検索用) */
private ALDateTimeField base_date_from;
/** 基準日To(検索用) */
private ALDateTimeField base_date_to;
/** キーワード(検索用) */
private String target_keyword;
/** 担当者(検索用) */
private String target_user_id;
/** 分類(検索用) */
private String target_tracker;
/** 優先度(検索用) */
private String target_priority;
/** ステータス(検索用) */
private String target_status;
/** 進捗率FROM(検索用) */
private String target_progress_rate_from;
/** 進捗率TO(検索用) */
private String target_progress_rate_to;
/** 進捗遅れフラグ(検索用) */
private String target_delay;
/** イナズマ線表示フラグ(検索用) */
private String progress_line_checked;
/** 選択最大年 */
private int viewDateMaxYear;
/** インデント表示フラグ */
private final boolean indentFlg = true;
private Calendar calFrom;
private Calendar calTo;
private boolean topView = false;
private Integer loginUserId = null;
/**
* 初期設定
*
* @param action
* ALAction
* @param rundata
* RunData
* @param context
* Context
*/
@Override
public void init(ALAction action, RunData rundata, Context context)
throws ALPageNotFoundException, ALDBErrorException {
// 検索条件・ソートリセット(プロジェクト選択時)
String resetCondition = rundata.getParameters().get("reset_condition");
if (resetCondition != null && resetCondition.length() > 0) {
ALEipUtils.setTemp(rundata, context, "target_keyword", "");
ALEipUtils.setTemp(rundata, context, LIST_SORT_STR, "");
ALEipUtils.setTemp(rundata, context, LIST_SORT_TYPE_STR, "");
}
allProject = ProjectUtils.getAllProject(); // 全プロジェクト
setProject(rundata, context);
super.init(action, rundata, context);
// 年
Calendar cal = Calendar.getInstance();
viewDateMaxYear = cal.get(Calendar.YEAR) + 10;
// メンバー
if (0 != selectedProjectId.intValue()) {
projectMembers = ProjectUtils.getProjectMembers(selectedProjectId);
} else {
projectMembers = ALEipUtils.getUsers("LoginUser");
}
// 基準日(From,To)
calFrom = ProjectUtils.getViewCalendar(rundata, context, "base_date_from");
calTo = ProjectUtils.getViewCalendar(rundata, context, "base_date_to");
calFrom.set(Calendar.DAY_OF_MONTH, 1);
calTo.set(Calendar.DAY_OF_MONTH, calTo.getActualMaximum(Calendar.DATE));
base_date_from = new ALDateTimeField();
base_date_to = new ALDateTimeField();
base_date_from.setValue(calFrom.getTime());
base_date_to.setValue(calTo.getTime());
// イナズマ線表示
progress_line_checked =
ProjectUtils.getParameter(rundata, context, "progress_line_checked");
loginUserId = ALEipUtils.getUserId(rundata);
}
/**
* 一覧データを取得します。 <BR>
*
* @param rundata
* RunData
* @param context
* Context
* @return ResultList
*/
@Override
protected ResultList<EipTProjectTask> selectList(RunData rundata,
Context context) {
try {
if (null == selectedProjectId) {
return null;
}
setSessionParams(rundata, context);
SelectQuery<EipTProjectTask> query = getSelectQuery(rundata, context);
buildSelectQueryForListView(query);
buildSelectQueryForListViewSortOrder(query, rundata, context);
// 表示するカラムのみデータベースから取得する.
ResultList<EipTProjectTask> list = query.getResultList();
// 件数をセットする.
taskCount = list.getTotalCount();
return list;
} catch (Exception ex) {
logger.error("ProjectTaskSimpleSelectData", ex);
return null;
}
}
private void setSessionParams(RunData rundata, Context context) {
// キーワード
target_keyword =
ProjectUtils.getParameter(rundata, context, "target_keyword");
// 担当者
target_user_id =
ProjectUtils.getParameter(rundata, context, "target_user_id");
// 分類
target_tracker =
ProjectUtils.getParameter(rundata, context, "target_tracker");
// 優先度
target_priority =
ProjectUtils.getParameter(rundata, context, "target_priority");
// ステータス
target_status =
ProjectUtils.getParameter(rundata, context, "target_status");
// 進捗率FROM
target_progress_rate_from =
ProjectUtils.getParameter(rundata, context, "target_progress_rate_from");
// 進捗率TO
target_progress_rate_to =
ProjectUtils.getParameter(rundata, context, "target_progress_rate_to");
// 進捗遅れ
target_delay = ProjectUtils.getParameter(rundata, context, "target_delay");
/** for sql injection */
{
if (isRejectParameter(target_user_id)) {
target_user_id = "0";
}
if (isRejectParameter(target_tracker)) {
target_tracker = "0";
}
if (isRejectParameter(target_priority)) {
target_priority = "0";
}
if (isRejectParameter(target_status)) {
target_status = "0";
}
if (isRejectParameter(target_progress_rate_from)) {
target_progress_rate_from = "0";
}
if (isRejectParameter(target_progress_rate_to)) {
target_progress_rate_to = "0";
}
}
}
/**
* 検索条件を設定した SelectQuery を返します。 <BR>
*
* @param rundata
* @param context
* @return
*/
private SelectQuery<EipTProjectTask> getSelectQuery(RunData rundata,
Context context) {
SelectQuery<EipTProjectTask> query = Database.query(EipTProjectTask.class);
query.setQualifier(ExpressionFactory.matchExp(
EipTProjectTask.PARENT_TASK_ID_PROPERTY,
null));
// プロジェクト
if (0 != selectedProjectId) {
Expression ex1 =
ExpressionFactory.matchExp(
EipTProjectTask.PROJECT_ID_PROPERTY,
selectedProjectId);
query.andQualifier(ex1);
}
// キーワード
if (target_keyword != null && target_keyword.trim().length() > 0) {
Expression ex1 =
ExpressionFactory.likeExp(EipTProjectTask.TASK_NAME_PROPERTY, "%"
+ target_keyword
+ "%");
query.andQualifier(ex1);
}
// 担当者
if (StringUtils.isNotEmpty(target_user_id) && !target_user_id.equals("all")) {
Expression exp2 =
ExpressionFactory.matchExp(
EipTProjectTask.EIP_TPROJECT_TASK_MEMBER_PROPERTY
+ "."
+ EipTProjectMember.USER_ID_PROPERTY,
Integer.valueOf(target_user_id));
query.andQualifier(exp2);
}
// 分類
if (StringUtils.isNotEmpty(target_tracker) && !target_tracker.equals("all")) {
Expression ex3 =
ExpressionFactory.matchExp(
EipTProjectTask.TRACKER_PROPERTY,
target_tracker);
query.andQualifier(ex3);
}
// 優先度
if (StringUtils.isNotEmpty(target_priority)
&& !target_priority.equals("all")) {
Expression ex4 =
ExpressionFactory.matchExp(
EipTProjectTask.PRIORITY_PROPERTY,
target_priority);
query.andQualifier(ex4);
}
// ステータス
if (StringUtils.isNotEmpty(target_status) && !target_status.equals("all")) {
Expression ex5 =
ExpressionFactory.matchExp(
EipTProjectTask.STATUS_PROPERTY,
target_status);
query.andQualifier(ex5);
}
// 進捗率FROM
if (StringUtils.isNotEmpty(target_progress_rate_from)
&& !target_progress_rate_from.equals("0")) {
Expression ex6 =
ExpressionFactory.greaterOrEqualExp(
EipTProjectTask.PROGRESS_RATE_PROPERTY,
Integer.valueOf(target_progress_rate_from));
query.andQualifier(ex6);
}
// 進捗率TO
if (StringUtils.isNotEmpty(target_progress_rate_to)
&& !target_progress_rate_to.equals("100")) {
Expression ex7 =
ExpressionFactory.lessOrEqualExp(
EipTProjectTask.PROGRESS_RATE_PROPERTY,
Integer.valueOf(target_progress_rate_to));
query.andQualifier(ex7);
}
// 進捗遅れ
if (StringUtils.isNotEmpty(target_delay)
&& target_delay.equals(ProjectUtils.FLG_ON)) {
/**
* CURRENT_DATE in SQL depend on Database locale, so unify the time in
* java
*/
// @Todo fix
StringBuilder sl = new StringBuilder();
sl.append("(");
sl
.append("( CASE WHEN task.end_plan_date - task.start_plan_date + 1 < 0");
sl.append(" THEN 0");
sl.append(" ELSE task.end_plan_date - task.start_plan_date + 1");
sl.append(" END)"); // タスク日数
sl.append(" <> 0 ");
sl.append(" AND ");
sl.append("(");
sl.append(" ( CASE");
sl
.append(" WHEN task.start_plan_date IS NULL OR task.end_plan_date IS NULL");
sl.append(" THEN 0");
sl
.append(" WHEN ")
.append(ProjectUtils.getCurrentDateWithCast())
.append(" < task.end_plan_date");
sl.append(" THEN");
sl.append(" CASE WHEN ").append(
ProjectUtils.getCurrentDateWithCast()).append(
" - task.start_plan_date + 1 < 0");
sl.append(" THEN 0");
sl
.append(" ELSE ")
.append(ProjectUtils.getCurrentDateWithCast())
.append(" - task.start_plan_date + 1");
sl.append(" END");
sl.append(" ELSE");
sl.append(" task.end_plan_date - task.start_plan_date + 1");
sl.append(" END )"); // 基準日までのタスク経過日数
sl.append(" * 100 / ");
sl
.append(" ( CASE WHEN task.end_plan_date - task.start_plan_date + 1 < 0");
sl.append(" THEN 0");
sl.append(" ELSE task.end_plan_date - task.start_plan_date + 1");
sl.append(" END ) "); // タスク日数
sl.append(" > progress_rate ");
Expression exp = Expression.fromString(sl.toString());
query.andQualifier(exp);
}
if (topView) {
/** ノーマル画面では新規、進行中、フィードバック、担当しているタスクのみ表示する */
Expression exp9 =
ExpressionFactory.matchExp(
EipTProjectTask.EIP_TPROJECT_TASK_MEMBER_PROPERTY
+ "."
+ EipTProjectMember.USER_ID_PROPERTY,
Integer.valueOf(loginUserId));
query.andQualifier(exp9);
Expression exp10 =
ExpressionFactory.inExp(
EipTProjectTask.STATUS_PROPERTY,
ProjectUtils.incompleteStatus);
query.andQualifier(exp10);
}
return query;
}
/**
* ソート句を構築します。
*
* @param crt
* @return
*/
protected SelectQuery<EipTProjectTask> buildSelectQueryForListViewSortOrder(
SelectQuery<EipTProjectTask> query, RunData rundata, Context context) {
buildSelectQueryForListViewSort(query, rundata, context);
String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR);
String crt_key = null;
Attributes map = getColumnMap();
if (sort != null && sort.length() > 0) {
crt_key = map.getValue(sort);
}
if (crt_key == null) {
if (topView) {
query.orderAscending(EipTProjectTask.END_PLAN_DATE_PROPERTY);
query.orderAscending(EipTProjectTask.ORDER_NO_PROPERTY);
} else {
query.orderAscending(EipTProjectTask.ORDER_NO_PROPERTY);
}
}
return query;
}
/**
* 詳細データを取得します。 <BR>
*
* @param rundata
* RunData
* @param context
* Context
* @return 汎用データベースオブジェクトモデル
*/
@Override
protected EipTProjectTask selectDetail(RunData rundata, Context context) {
// オブジェクトモデルを取得
return ProjectUtils.getEipTProjectTask(rundata, context);
}
/**
* ResultDataを取得します。(一覧データ) <BR>
*
* @param record
* レコード
* @return ResultData
*/
@Override
protected Object getResultData(EipTProjectTask record) {
ProjectTaskResultData data = ProjectUtils.getProjectTaskResultData(record);
Integer taskId = (int) data.getTaskId().getValue();
// 子タスク件数
int cntChild = ProjectUtils.getCountChildrenTask(taskId);
// 子タスクが2件以上あればtrue
// 並び替えボタン表示用
data.setHasChildren(cntChild >= 2);
// 進捗更新用
data.setHasChildrenForForm(cntChild > 0);
// 経過タスク日数
int lapsedDays =
ProjectUtils.getLapsedDays(ProjectUtils.toString(record
.getStartPlanDate()), ProjectUtils.toString(Calendar
.getInstance()
.getTime()));
// 予定タスク日数
int taskDays =
ProjectUtils.getLapsedDays(ProjectUtils.toString(record
.getStartPlanDate()), ProjectUtils.toString(record.getEndPlanDate()));
data.setPlanTerm(taskDays);
if (lapsedDays > taskDays) {
// 経過タスク日数≦タスク日数にする
lapsedDays = taskDays;
}
// 予定進捗率
data
.setPlanProgressRate(ProjectUtils.getPlanWorkload(lapsedDays, taskDays));
// 実績工数
List<ProjectTaskMemberResultData> memberList = data.getMemberList();
BigDecimal workload = BigDecimal.valueOf(0);
workload = workload.setScale(1);
for (int i = 0; i < memberList.size(); i++) {
ProjectTaskMemberResultData member = memberList.get(i);
workload = workload.add(member.getWorkload());
}
data.setWorkload(workload);
// 完了予測工数
BigDecimal forecastWorkload = BigDecimal.valueOf(0);
if (data.getProgressRate().getValue() != 0) {
forecastWorkload =
workload.multiply(BigDecimal.valueOf(100)).divide(
BigDecimal.valueOf(data.getProgressRate().getValue()),
2,
BigDecimal.ROUND_HALF_UP);
}
data.setForecastWorkload(forecastWorkload);
// インデント表示フラグ
data.setIndentFlg(indentFlg);
return data;
}
/**
* ResultDataを取得します。(詳細データ) <BR>
*
* @param record
* レコード
* @return ResultData
*/
@Override
protected Object getResultDataDetail(EipTProjectTask record) {
ProjectTaskResultData data = ProjectUtils.getProjectTaskResultData(record);
int taskId = (int) data.getTaskId().getValue();
// ファイルリスト
List<EipTProjectTaskFile> list =
pfile
.getSelectQueryForFiles(EipTProjectTask.TASK_ID_PK_COLUMN, taskId)
.fetchList();
data.setAttachmentFiles(pfile.getFileList(list));
// コメントリスト
data.setCommentList(ProjectUtils.getProjectTaskCommentList("" + taskId));
// パンくずリスト
data.setTopicPath(ProjectUtils.getTaskTopicPath(record.getProjectId()));
return data;
}
/**
* 項目情報を取得する
*
* @return 項目情報
*/
@Override
protected Attributes getColumnMap() {
Attributes map = new Attributes();
map.putValue("task_name", "task_name");
map.putValue("progress_rate", "progress_rate");
return map;
}
/**
* プロジェクトの総数を取得する
*
* @return プロジェクト総数
*/
public int getTaskCount() {
return taskCount;
}
/**
* 全プロジェクトのリストを返す
*
* @return 全プロジェクトのリスト
*/
public List<ProjectResultData> getAllProject() {
return allProject;
}
/**
* 選択されているプロジェクトIDを取得する
*
* @return プロジェクトID
*/
public Integer getSelectedProjectId() {
return selectedProjectId;
}
/**
* プロジェクトメンバーリストを取得します。
*
* @return プロジェクトメンバーリスト
*/
public List<ALEipUser> getProjectMembers() {
return projectMembers;
}
/**
* 検索したキーワードを取得します。
*
* @return 検索キーワード
*/
public String getTargetKeyword() {
return target_keyword;
}
/**
* 検索した担当者を取得します。
*
* @return 検索担当者
*/
public String getTargetUserId() {
return target_user_id;
}
/**
* 検索した分類を取得します。
*
* @return 検索分類
*/
public String getTargetTracker() {
return target_tracker;
}
/**
* 検索した優先度を取得します。
*
* @return 検索優先度
*/
public String getTargetPriority() {
return target_priority;
}
/**
* 検索したステータスを取得します。
*
* @return 検索ステータス
*/
public String getTargetStatus() {
return target_status;
}
/**
* 検索した進捗率FROMを取得します。
*
* @return 進捗率FROM
*/
public String getTargetProgressRateFrom() {
return target_progress_rate_from;
}
/**
* 検索した進捗率TOを取得します。
*
* @return 進捗率TO
*/
public String getTargetProgressRateTo() {
return target_progress_rate_to;
}
/**
* 検索した進捗遅れフラグを取得します。
*
* @return 進捗遅れフラグ
*/
public String getTargetDelay() {
return target_delay;
}
/**
* イナズマ線表示フラグを取得します。
*
* @return イナズマ線表示フラグ
*/
public String getProgressLineChecked() {
return progress_line_checked;
}
/**
* 日付の年最大値を取得する。
*
* @return 年最大値
*/
public int getViewDateMaxYear() {
return viewDateMaxYear;
}
/**
* 基準日Fromを取得する。
*
* @return 基準日From
*/
public ALDateTimeField getBaseDateFrom() {
return base_date_from;
}
/**
* 基準日Toを取得する。
*
* @return 基準日To
*/
public ALDateTimeField getBaseDateTo() {
return base_date_to;
}
/**
* 基準日Fromの年を取得する。
*
* @return 基準日Fromの年
*/
public int getBaseDateFromYear() {
return calFrom.get(Calendar.YEAR);
}
/**
* 基準日Toの年を取得する。
*
* @return 基準日Toの年
*/
public int getBaseDateToYear() {
return calTo.get(Calendar.YEAR);
}
/**
* 加算日数を加えた日を取得する。
*
* @return 加算後の日
*/
public int getDay(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return cal.get(Calendar.DAY_OF_MONTH);
}
/**
* 加算日数を加えた日がシステム日付かチェックする。
*
* @return TRUE:システム日付である
*/
public boolean isToday(int days) {
Calendar today = Calendar.getInstance();
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return today.get(Calendar.YEAR) == cal.get(Calendar.YEAR)
&& today.get(Calendar.MONTH) == cal.get(Calendar.MONTH)
&& today.get(Calendar.DAY_OF_MONTH) == cal.get(Calendar.DAY_OF_MONTH);
}
/**
* 表示年月の日数を取得する。
*
* @return 日数
*/
public int getDays() {
return ProjectUtils.getLapsedDays(calFrom, calTo);
}
/**
* 表示年月の日数を取得する。
*
* @return 日数
*/
public int getDays(Date dateTo) {
Calendar cal = Calendar.getInstance();
cal.setTime(dateTo);
return ProjectUtils.getLapsedDays(calFrom, cal);
}
/**
* 年を取得する。
*
* @return 週番号
*/
public int getYear(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return cal.get(Calendar.YEAR);
}
/**
* 月を取得する。
*
* @return 月
*/
public int getMonth(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return cal.get(Calendar.MONTH);
}
/**
* 週を取得する。
*
* @return 週番号
*/
public int getWeek(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return cal.get(Calendar.WEEK_OF_YEAR);
}
/**
* 分類リストを返します。
*
* @return 分類リスト
*/
public Map<String, String> getTrackerMap() {
return ProjectUtils.getKubunMap("tracker");
}
/**
* ステータスリストを返します。
*
* @return ステータスリスト
*/
public Map<String, String> getStatusMap() {
return ProjectUtils.getKubunMap("status");
}
/**
* 優先度リストを返します。
*
* @return 優先度リスト
*/
public Map<String, String> getPriorityMap() {
return ProjectUtils.getKubunMap("priority");
}
/**
* 現在時刻の long 値を返します。
*
* @return 現在時刻の long 値
*/
public long getNowTime() {
return Calendar.getInstance().getTimeInMillis();
}
/**
* 加算日数を加えた日付が休日かをチェックする。
*
* @return TRUE:加算後の日が休日
*/
public boolean isHoliday(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
// 祝日かどうかを検証する.
ALEipHolidaysManager holidaysManager = ALEipHolidaysManager.getInstance();
return holidaysManager.isHoliday(cal.getTime()) != null;
}
/**
* 加算日数を加えた日付が土曜日かをチェックする。
*
* @return TRUE:加算後の日が土曜
*/
public boolean isSaturday(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return Calendar.SATURDAY == cal.get(Calendar.DAY_OF_WEEK);
}
/**
* 加算日数を加えた日付が土曜日かをチェックする。
*
* @return TRUE:加算後の日が日曜
*/
public boolean isSunday(int days) {
Calendar cal = (Calendar) calFrom.clone();
cal.add(Calendar.DAY_OF_MONTH, days - 1);
return Calendar.SUNDAY == cal.get(Calendar.DAY_OF_WEEK);
}
/**
* ビュータイプを取得する
*
* @return ビュータイプ
*/
public String getViewtype() {
return "project";
}
private boolean isRejectParameter(String numeric) {
return StringUtils.isNotEmpty(numeric)
&& !"all".equals(numeric)
&& !StringUtils.isNumeric(numeric);
}
public void setFiltersFromPSML(VelocityPortlet portlet, Context context,
RunData rundata) {
ALEipUtils.setTemp(rundata, context, LIST_FILTER_STR, portlet
.getPortletConfig()
.getInitParameter("p12f-filters"));
ALEipUtils.setTemp(rundata, context, LIST_FILTER_TYPE_STR, portlet
.getPortletConfig()
.getInitParameter("p12g-filtertypes"));
}
public boolean isProjectEmpty() {
return allProject.isEmpty();
}
public boolean isTaskEmpty() {
return null == getList() || getList().isEmpty();
}
public void setProject(RunData rundata, Context context) {
// validate projectId and reset projectId
String filter = rundata.getParameters().getString("filter", "");
String filterType = rundata.getParameters().getString("filtertype", "");
String sesFilter = ALEipUtils.getTemp(rundata, context, LIST_FILTER_STR);
String sesFilterType =
ALEipUtils.getTemp(rundata, context, LIST_FILTER_TYPE_STR);
sesFilter = sesFilter == null ? "" : sesFilter;
sesFilterType = sesFilterType == null ? "" : sesFilterType;
if (filterType.isEmpty()) {
filter = sesFilter;
filterType = sesFilterType;
}
if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(filterType)) {
selectedProjectId = 0;
setFilter(rundata, context);
return;
}
boolean existProject = false;
for (ProjectResultData data : allProject) {
if (filter.equals(data.getProjectId().toString())) {
existProject = true;
break;
}
}
if (!existProject) {
selectedProjectId = 0;
} else {
selectedProjectId = Integer.valueOf(filter);
}
setFilter(rundata, context);
}
private void setFilter(RunData rundata, Context context) {
ALEipUtils.setTemp(rundata, context, LIST_FILTER_STR, String
.valueOf(selectedProjectId));
ALEipUtils.setTemp(rundata, context, LIST_FILTER_TYPE_STR, "project_id");
ALEipUtils
.setTemp(rundata, context, new StringBuffer().append(
ProjectTaskSelectData.class.getSimpleName()).append(
ALEipConstants.LIST_FILTER).toString(), String
.valueOf(selectedProjectId));
ALEipUtils.setTemp(rundata, context, new StringBuffer().append(
ProjectTaskSelectData.class.getSimpleName()).append(
ALEipConstants.LIST_FILTER_TYPE).toString(), "project_id");
}
public void setTopView(boolean bool) {
this.topView = bool;
}
}