/*
* 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.msgboard;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
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.services.TurbineServices;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import com.aimluck.commons.field.ALStringField;
import com.aimluck.commons.utils.ALStringUtil;
import com.aimluck.eip.cayenne.om.portlet.EipTMsgboardCategory;
import com.aimluck.eip.cayenne.om.portlet.EipTMsgboardCategoryMap;
import com.aimluck.eip.cayenne.om.portlet.EipTMsgboardFile;
import com.aimluck.eip.cayenne.om.portlet.EipTMsgboardTopic;
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.ALEipGroup;
import com.aimluck.eip.common.ALEipManager;
import com.aimluck.eip.common.ALEipPost;
import com.aimluck.eip.common.ALEipUser;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.common.ALPermissionException;
import com.aimluck.eip.fileupload.beans.FileuploadBean;
import com.aimluck.eip.fileupload.util.FileuploadUtils;
import com.aimluck.eip.modules.actions.common.ALAction;
import com.aimluck.eip.msgboard.util.MsgboardUtils;
import com.aimluck.eip.orm.Database;
import com.aimluck.eip.orm.query.ResultList;
import com.aimluck.eip.orm.query.SelectQuery;
import com.aimluck.eip.services.accessctl.ALAccessControlConstants;
import com.aimluck.eip.services.accessctl.ALAccessControlFactoryService;
import com.aimluck.eip.services.accessctl.ALAccessControlHandler;
import com.aimluck.eip.util.ALEipUtils;
/**
* 掲示板トピックの検索データを管理するクラスです。 <BR>
*
*/
public class MsgboardTopicSelectData extends
ALAbstractMultiFilterSelectData<EipTMsgboardTopic, EipTMsgboardTopic>
implements ALData {
/** logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(MsgboardTopicSelectData.class.getName());
/** カテゴリ一覧 */
private List<MsgboardCategoryResultData> categoryList;
/** 部署一覧 */
private List<ALEipGroup> postList;
/** トピックの総数 */
private int topicSum;
/** 親トピックオブジェクト */
private Object parentTopic;
/** 子トピックオブジェクト */
private List<MsgboardTopicResultData> coTopicList;
/** ログインユーザ ID */
private int uid;
/** 返信フォーム表示の有無(トピック詳細表示) */
private boolean showReplyForm = false;
/** 閲覧権限の有無 */
private boolean hasAclCategoryList;
/** 他ユーザーの作成したトピックの編集権限 */
private boolean hasAclUpdateTopicOthers;
/** 他ユーザーの作成したトピックの削除権限 */
private boolean hasAclDeleteTopicOthers;
/** 初期表示 */
private int table_colum_num;
/** カテゴリの初期値を取得する */
private String filterType = "";
/** カテゴリ ID */
private String categoryId = "";
/** ターゲット */
private ALStringField target_keyword;
/** グループID */
private String postId = "";
/** カテゴリ名 */
private String categoryName = "";
/** グループ名 */
private String postName = "";
private boolean isFileUploadable;
/**
*
* @param action
* @param rundata
* @param context
*/
@Override
public void init(ALAction action, RunData rundata, Context context)
throws ALPageNotFoundException, ALDBErrorException {
super.init(action, rundata, context);
String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR);
if (sort == null || sort.equals("")) {
VelocityPortlet portlet = ALEipUtils.getPortlet(rundata, context);
String sortStr = null;
if (portlet != null) {
sortStr = portlet.getPortletConfig().getInitParameter("p2a-sort");
} else {
sortStr = "update_date";
}
ALEipUtils.setTemp(rundata, context, LIST_SORT_STR, sortStr);
if ("create_date".equals(sortStr) || "update_date".equals(sortStr)) {
ALEipUtils.setTemp(rundata, context, LIST_SORT_TYPE_STR, "desc");
}
}
uid = ALEipUtils.getUserId(rundata);
ALAccessControlFactoryService aclservice =
(ALAccessControlFactoryService) ((TurbineServices) TurbineServices
.getInstance()).getService(ALAccessControlFactoryService.SERVICE_NAME);
ALAccessControlHandler aclhandler = aclservice.getAccessControlHandler();
hasAclCategoryList =
aclhandler.hasAuthority(
ALEipUtils.getUserId(rundata),
ALAccessControlConstants.POERTLET_FEATURE_MSGBOARD_CATEGORY,
ALAccessControlConstants.VALUE_ACL_LIST);
hasAclDeleteTopicOthers =
aclhandler.hasAuthority(
ALEipUtils.getUserId(rundata),
ALAccessControlConstants.POERTLET_FEATURE_MSGBOARD_TOPIC_OTHER,
ALAccessControlConstants.VALUE_ACL_DELETE);
hasAclUpdateTopicOthers =
aclhandler.hasAuthority(
ALEipUtils.getUserId(rundata),
ALAccessControlConstants.POERTLET_FEATURE_MSGBOARD_TOPIC_OTHER,
ALAccessControlConstants.VALUE_ACL_UPDATE);
// My グループの一覧を取得する.
postList = ALEipUtils.getMyGroups(rundata);
// カテゴリの初期値を取得する
try {
updateCategoryName();
} catch (Exception ex) {
logger.error("msgboard", ex);
}
target_keyword = new ALStringField();
isFileUploadable = ALEipUtils.isFileUploadable(rundata);
}
/**
*
* @param rundata
* @param context
*/
public void loadCategoryList(RunData rundata, Context context) {
// カテゴリ一覧
categoryList = MsgboardUtils.loadCategoryList(rundata);
setCategory(rundata, context);
}
/**
*
* @param rundata
* @param context
*/
public void setCategory(RunData rundata, Context context) {
// validate categoryId and filterType, categoryId set
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 (filterType.equals("category")) {
filter = "0," + filter;
filterType = "post,category";
} else if (filterType.equals("post,category")) {
// do nothing
} else {
filter = "";
filterType = "";
}
if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(filterType)) {
this.filterType = "";
categoryId = "";
return;
}
String[] splited = filter.split(",");
if (splited.length < 2) {
this.filterType = "";
categoryId = "";
return;
}
categoryId = filter.split(",")[1];
this.filterType = filterType;
boolean existCategory = false;
for (MsgboardCategoryResultData data : categoryList) {
if (categoryId.equals(data.getCategoryId().toString())) {
existCategory = true;
break;
}
}
if (!existCategory) {
categoryId = "0";
ALEipUtils.setTemp(
rundata,
context,
LIST_FILTER_STR,
filter.split(",")[0] + "," + categoryId);
ALEipUtils.setTemp(
rundata,
context,
LIST_FILTER_TYPE_STR,
"post,category");
}
}
/**
* 一覧データを取得します。 <BR>
*
* @param rundata
* @param context
* @return
*/
@Override
public ResultList<EipTMsgboardTopic> selectList(RunData rundata,
Context context) {
try {
if (MsgboardUtils.hasResetFlag(rundata, context)) {
MsgboardUtils.resetFilter(rundata, context, this.getClass().getName());
target_keyword.setValue("");
} else {
target_keyword.setValue(MsgboardUtils
.getTargetKeyword(rundata, context));
}
SelectQuery<EipTMsgboardTopic> query = getSelectQuery(rundata, context);
buildSelectQueryForListView(query);
buildSelectQueryForListViewSort(query, rundata, context);
// 表示するカラムのみデータベースから取得する.
ResultList<EipTMsgboardTopic> list = query.getResultList();
// 件数をセットする.
topicSum = list.getTotalCount();
return list;
} catch (Exception ex) {
logger.error("msgboard", ex);
return null;
}
}
/**
* 検索条件を設定した SelectQuery を返します。 <BR>
*
* @param rundata
* @param context
* @return
*/
private SelectQuery<EipTMsgboardTopic> getSelectQuery(RunData rundata,
Context context) {
if ((target_keyword != null) && (!target_keyword.getValue().equals(""))) {
ALEipUtils.setTemp(rundata, context, LIST_SEARCH_STR, target_keyword
.getValue());
} else {
ALEipUtils.removeTemp(rundata, context, LIST_SEARCH_STR);
}
SelectQuery<EipTMsgboardTopic> query =
Database.query(EipTMsgboardTopic.class);
Expression exp1 =
ExpressionFactory.matchExp(EipTMsgboardTopic.PARENT_ID_PROPERTY, Integer
.valueOf(0));
query.setQualifier(exp1);
// アクセス制御
Expression exp01 =
ExpressionFactory.matchExp(
EipTMsgboardTopic.EIP_TMSGBOARD_CATEGORY_PROPERTY
+ "."
+ EipTMsgboardCategory.PUBLIC_FLAG_PROPERTY,
"T");
Expression exp02 =
ExpressionFactory.matchExp(
EipTMsgboardTopic.EIP_TMSGBOARD_CATEGORY_PROPERTY
+ "."
+ EipTMsgboardCategory.EIP_TMSGBOARD_CATEGORY_MAPS_PROPERTY
+ "."
+ EipTMsgboardCategoryMap.STATUS_PROPERTY,
"O");
Expression exp03 =
ExpressionFactory.matchExp(
EipTMsgboardTopic.EIP_TMSGBOARD_CATEGORY_PROPERTY
+ "."
+ EipTMsgboardCategory.EIP_TMSGBOARD_CATEGORY_MAPS_PROPERTY
+ "."
+ EipTMsgboardCategoryMap.STATUS_PROPERTY,
"A");
Expression exp11 =
ExpressionFactory.matchExp(
EipTMsgboardTopic.EIP_TMSGBOARD_CATEGORY_PROPERTY
+ "."
+ EipTMsgboardCategory.PUBLIC_FLAG_PROPERTY,
"F");
Expression exp12 =
ExpressionFactory.matchExp(
EipTMsgboardTopic.EIP_TMSGBOARD_CATEGORY_PROPERTY
+ "."
+ EipTMsgboardCategory.EIP_TMSGBOARD_CATEGORY_MAPS_PROPERTY
+ "."
+ EipTMsgboardCategoryMap.USER_ID_PROPERTY,
Integer.valueOf(ALEipUtils.getUserId(rundata)));
query.andQualifier((exp01.andExp(exp02.orExp(exp03))).orExp(exp11
.andExp(exp12)));
query.distinct(true);
return buildSelectQueryForFilter(query, rundata, context);
}
/**
* パラメータをマップに変換します。
*
* @param key
* @param val
*/
@Override
protected void parseFilterMap(String key, String val) {
super.parseFilterMap(key, val);
Set<String> unUse = new HashSet<String>();
for (Entry<String, List<String>> pair : current_filterMap.entrySet()) {
if (pair.getValue().contains("0")) {
unUse.add(pair.getKey());
}
}
for (String unusekey : unUse) {
current_filterMap.remove(unusekey);
}
}
// :TODO
@Override
protected SelectQuery<EipTMsgboardTopic> buildSelectQueryForFilter(
SelectQuery<EipTMsgboardTopic> query, RunData rundata, Context context) {
if (current_filterMap.containsKey("category")) {
// カテゴリを含んでいる場合デフォルトとは別にフィルタを用意
List<String> categoryIds = current_filterMap.get("category");
categoryId = categoryIds.get(0).toString();
List<MsgboardCategoryResultData> categoryList =
MsgboardUtils.loadCategoryList(rundata);
boolean existCategory = false;
if (categoryList != null && categoryList.size() > 0) {
for (MsgboardCategoryResultData category : categoryList) {
if (categoryId.equals(category.getCategoryId().toString())) {
existCategory = true;
break;
}
}
}
if (!existCategory) {
categoryId = "";
current_filterMap.remove("category");
}
updateCategoryName();
}
super.buildSelectQueryForFilter(query, rundata, context);
if (current_filterMap.containsKey("post")) {
// 部署を含んでいる場合デフォルトとは別にフィルタを用意
List<String> postIds = current_filterMap.get("post");
boolean existPost = false;
for (int i = 0; i < postList.size(); i++) {
String pid = postList.get(i).getName().toString();
if (pid.equals(postIds.get(0).toString())) {
existPost = true;
break;
}
}
Map<Integer, ALEipPost> map = ALEipManager.getInstance().getPostMap();
if (postIds != null && !postIds.isEmpty()) {
for (Map.Entry<Integer, ALEipPost> item : map.entrySet()) {
String pid = item.getValue().getGroupName().toString();
if (pid.equals(postIds.get(0).toString())) {
existPost = true;
break;
}
}
}
if (existPost) {
HashSet<Integer> userIds = new HashSet<Integer>();
for (String post : postIds) {
List<Integer> userId = ALEipUtils.getUserIds(post);
userIds.addAll(userId);
}
if (userIds.isEmpty()) {
userIds.add(-1);
}
Expression exp =
ExpressionFactory.inExp(EipTMsgboardTopic.OWNER_ID_PROPERTY, userIds);
query.andQualifier(exp);
postId = postIds.get(0).toString();
updatePostName();
} else {
postId = "";
updatePostName();
current_filterMap.remove("post");
}
}
String search = ALEipUtils.getTemp(rundata, context, LIST_SEARCH_STR);
if (search != null && !"".equals(search)) {
current_search = search;
Expression ex1 =
ExpressionFactory.likeExp(EipTMsgboardTopic.NOTE_PROPERTY, "%"
+ search
+ "%");
Expression ex2 =
ExpressionFactory.likeExp(EipTMsgboardTopic.TOPIC_NAME_PROPERTY, "%"
+ search
+ "%");
SelectQuery<EipTMsgboardTopic> q =
Database.query(EipTMsgboardTopic.class);
q.andQualifier(ex1.orExp(ex2));
List<EipTMsgboardTopic> queryList = q.fetchList();
List<Integer> resultid = new ArrayList<Integer>();
for (EipTMsgboardTopic item : queryList) {
if (item.getParentId() != 0 && !resultid.contains(item.getParentId())) {
resultid.add(item.getParentId());
} else if (!resultid.contains(item.getTopicId())) {
resultid.add(item.getTopicId());
}
}
if (resultid.size() == 0) {
// 検索結果がないことを示すために-1を代入
resultid.add(-1);
}
Expression ex =
ExpressionFactory.inDbExp(
EipTMsgboardTopic.TOPIC_ID_PK_COLUMN,
resultid);
query.andQualifier(ex);
}
return query;
}
/**
* ResultData に値を格納して返します。(一覧データ) <BR>
*
* @param obj
* @return
*/
@Override
protected Object getResultData(EipTMsgboardTopic record) {
try {
MsgboardTopicResultData rd = new MsgboardTopicResultData();
rd.initField();
rd.setTopicId(record.getTopicId().longValue());
rd.setTopicName(record.getTopicName());
rd.setCategoryId(record
.getEipTMsgboardCategory()
.getCategoryId()
.longValue());
rd.setCategoryName(record.getEipTMsgboardCategory().getCategoryName());
// 公開/非公開を設定する.
rd.setPublicFlag("T".equals(record
.getEipTMsgboardCategory()
.getPublicFlag()));
rd.setOwnerId(record.getOwnerId().longValue());
rd.setOwnerName(ALEipUtils
.getUserFullName(record.getOwnerId().intValue()));
rd.setUpdateUser(ALEipUtils.getUserFullName(record
.getUpdateUserId()
.intValue()));
rd.setCreateDate(record.getCreateDate());
rd.setUpdateDate(record.getUpdateDate());
// 新着を設定する(期限は最終更新日からの 1 日間).
Date date = record.getUpdateDate();
Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
rd.setNewTopicFlag(date.after(now.getTime()));
rd.setReplyCount(MsgboardUtils.countReply(record.getTopicId()));
rd.setLoginUserId(uid);
return rd;
} catch (Exception ex) {
logger.error("msgboard", ex);
return null;
}
}
/**
* 詳細表示します。
*
* @param action
* @param rundata
* @param context
* @return TRUE 成功 FASLE 失敗
*/
@Override
public boolean doViewDetail(ALAction action, RunData rundata, Context context) {
try {
init(action, rundata, context);
doCheckAclPermission(
rundata,
context,
ALAccessControlConstants.VALUE_ACL_DETAIL);
action.setMode(ALEipConstants.MODE_DETAIL);
List<EipTMsgboardTopic> aList = selectDetailList(rundata, context);
if (aList != null) {
coTopicList = new ArrayList<MsgboardTopicResultData>();
int size = aList.size();
for (int i = 0; i < size; i++) {
coTopicList.add((MsgboardTopicResultData) getResultDataDetail(aList
.get(i)));
}
}
action.setResultData(this);
action.putData(rundata, context);
return true;
} catch (ALPermissionException e) {
ALEipUtils.redirectPermissionError(rundata);
return false;
} catch (ALPageNotFoundException e) {
ALEipUtils.redirectPageNotFound(rundata);
return false;
} catch (ALDBErrorException e) {
ALEipUtils.redirectDBError(rundata);
return false;
}
}
/**
* 詳細データを取得します。 <BR>
*
* @param rundata
* @param context
* @return
*/
public List<EipTMsgboardTopic> selectDetailList(RunData rundata,
Context context) throws ALPageNotFoundException, ALDBErrorException {
String topicid =
ALEipUtils.getTemp(rundata, context, ALEipConstants.ENTITY_ID);
if (topicid == null || Integer.valueOf(topicid) == null) {
// トピック ID が空の場合
logger.debug("[MsgboardTopic] Empty ID...");
throw new ALPageNotFoundException();
}
VelocityPortlet portlet = ALEipUtils.getPortlet(rundata, context);
String cotopicsort = null;
if (portlet != null) {
cotopicsort = portlet.getPortletConfig().getInitParameter("p2b-sort");
} else {
cotopicsort = "response_old";
}
try {
parentTopic =
getResultDataDetail(MsgboardUtils.getEipTMsgboardParentTopic(
rundata,
context,
false));
SelectQuery<EipTMsgboardTopic> query =
getSelectQueryForCotopic(rundata, context, topicid, cotopicsort);
/** 詳細画面は全件表示する */
// buildSelectQueryForListView(query);
if ("response_new".equals(cotopicsort)) {
query.orderDesending(EipTMsgboardTopic.CREATE_DATE_PROPERTY);
} else {
query.orderAscending(EipTMsgboardTopic.CREATE_DATE_PROPERTY);
}
List<EipTMsgboardTopic> resultList = query.fetchList();
// 表示するカラムのみデータベースから取得する.
return resultList;
} catch (ALPageNotFoundException pageNotFound) {
// logger.error("[MsgboardTopicSelectData]", pageNotFound);
throw pageNotFound;
} catch (Exception ex) {
logger.error("[MsgboardTopicSelectData]", ex);
throw new ALDBErrorException();
}
}
@Override
public EipTMsgboardTopic selectDetail(RunData rundata, Context context) {
ALEipUtils.redirectPageNotFound(rundata);
return null;
}
private SelectQuery<EipTMsgboardTopic> getSelectQueryForCotopic(
RunData rundata, Context context, String topicid, String cotopicsort) {
SelectQuery<EipTMsgboardTopic> query =
Database.query(EipTMsgboardTopic.class);
Expression exp =
ExpressionFactory.matchExp(EipTMsgboardTopic.PARENT_ID_PROPERTY, Integer
.valueOf(topicid));
query.setQualifier(exp);
query.distinct(true);
return query;
}
private SelectQuery<EipTMsgboardFile> getSelectQueryForFiles(int topicid) {
SelectQuery<EipTMsgboardFile> query =
Database.query(EipTMsgboardFile.class);
Expression exp =
ExpressionFactory.matchDbExp(
EipTMsgboardTopic.TOPIC_ID_PK_COLUMN,
Integer.valueOf(topicid));
query.setQualifier(exp);
query.orderAscending(EipTMsgboardFile.UPDATE_DATE_PROPERTY);
query.orderAscending(EipTMsgboardFile.FILE_PATH_PROPERTY);
return query;
}
/**
* ResultData に値を格納して返します。(詳細データ) <BR>
*
* @param obj
* @return
*/
@Override
protected Object getResultDataDetail(EipTMsgboardTopic record)
throws ALPageNotFoundException, ALDBErrorException {
try {
// 親トピックのアクセス権限をもとに,返信フォーム表示の有無を決定する.
if (record.getParentId().intValue() == 0) {
EipTMsgboardCategory category = record.getEipTMsgboardCategory();
if ("T".equals(category.getPublicFlag())) {
List<?> categoryMap = category.getEipTMsgboardCategoryMaps();
int mapsize = categoryMap.size();
for (int i = 0; i < mapsize; i++) {
EipTMsgboardCategoryMap map =
(EipTMsgboardCategoryMap) categoryMap.get(i);
if ("A".equals(map.getStatus())) {
showReplyForm = true;
} else {
if (map.getUserId().intValue() == uid) {
// ログインユーザが所属メンバの場合
showReplyForm = true;
break;
}
}
}
} else {
// 非公開のトピックの場合は,
// データベースの検索時にアクセスをフィルタリングしている.
showReplyForm = true;
}
}
MsgboardTopicResultData rd = new MsgboardTopicResultData();
rd.initField();
rd.setTopicId(record.getTopicId().longValue());
rd.setTopicName(record.getTopicName());
rd.setParentId(record.getParentId().longValue());
rd.setCategoryId(record
.getEipTMsgboardCategory()
.getCategoryId()
.longValue());
rd.setCategoryName(record.getEipTMsgboardCategory().getCategoryName());
// 公開/非公開を設定する.
rd.setPublicFlag("T".equals(record
.getEipTMsgboardCategory()
.getPublicFlag()));
rd.setOwnerId(record.getOwnerId().longValue());
rd.setOwnerName(ALEipUtils
.getUserFullName(record.getOwnerId().intValue()));
ALEipUser user = ALEipUtils.getALEipUser(record.getOwnerId().intValue());
if (user != null) {
rd.setOwnerHasPhoto(user.hasPhoto());
}
rd.setNote(record.getNote());
rd.setCreateDate(record.getCreateDate());
rd.setUpdateDate(record.getUpdateDate());
rd.setLoginUserId(uid);
List<EipTMsgboardFile> list =
getSelectQueryForFiles(record.getTopicId().intValue()).fetchList();
if (list != null && list.size() > 0) {
List<FileuploadBean> attachmentFileList =
new ArrayList<FileuploadBean>();
FileuploadBean filebean = null;
EipTMsgboardFile file = null;
int size = list.size();
for (int i = 0; i < size; i++) {
file = list.get(i);
String realname = file.getFileName();
javax.activation.DataHandler hData =
new javax.activation.DataHandler(
new javax.activation.FileDataSource(realname));
filebean = new FileuploadBean();
filebean.setFileId(file.getFileId().intValue());
filebean.setFileName(realname);
if (hData != null) {
filebean.setContentType(hData.getContentType());
}
filebean.setIsImage(FileuploadUtils.isImage(realname));
attachmentFileList.add(filebean);
}
rd.setAttachmentFiles(attachmentFileList);
}
return rd;
} catch (Exception e) {
logger.error("[MsgboardTopicSelectData]", e);
throw new ALDBErrorException();
}
}
/**
*
* @return
*/
public List<MsgboardCategoryResultData> getCategoryList() {
if (hasAclCategoryList) {
return categoryList;
} else {
return new ArrayList<MsgboardCategoryResultData>();
}
}
/**
* トピックの総数を返す. <BR>
*
* @return
*/
public int getTopicSum() {
return topicSum;
}
/**
* @return
*
*/
@Override
protected Attributes getColumnMap() {
Attributes map = new Attributes();
map.putValue("topic_name", EipTMsgboardTopic.TOPIC_NAME_PROPERTY);
map.putValue("create_date", EipTMsgboardTopic.CREATE_DATE_PROPERTY);
map.putValue("update_date", EipTMsgboardTopic.UPDATE_DATE_PROPERTY);
map.putValue("category", EipTMsgboardCategory.CATEGORY_ID_PK_COLUMN);
map.putValue(
"category_name",
EipTMsgboardTopic.EIP_TMSGBOARD_CATEGORY_PROPERTY
+ "."
+ EipTMsgboardCategory.CATEGORY_NAME_PROPERTY);
map.putValue("owner_name", EipTMsgboardTopic.OWNER_ID_PROPERTY);
map.putValue("update_user", EipTMsgboardTopic.UPDATE_USER_ID_PROPERTY);
return map;
}
/**
*
* @param id
* @return
*/
public boolean isMatch(int id1, long id2) {
return id1 == (int) id2;
}
public List<ALEipUser> getUsers(String groupname) {
return ALEipUtils.getUsers(groupname);
}
public Object getParentTopic() {
return parentTopic;
}
public List<MsgboardTopicResultData> getCoTopicList() {
return coTopicList;
}
public int getUserId() {
return uid;
}
public boolean showReplyForm() {
return showReplyForm;
}
/**
* アクセス権限チェック用メソッド。 アクセス権限の機能名を返します。
*
* @return
*/
@Override
public String getAclPortletFeature() {
return ALAccessControlConstants.POERTLET_FEATURE_MSGBOARD_TOPIC;
}
/**
* 他ユーザのトピックを編集する権限があるかどうかを返します。
*
* @return
*/
public boolean hasAclUpdateTopicOthers() {
return hasAclUpdateTopicOthers;
}
/**
* 他ユーザのトピックを削除する権限があるかどうかを返します。
*
* @return
*/
public boolean hasAclDeleteTopicOthers() {
return hasAclDeleteTopicOthers;
}
public String getCurrentSearchWithSanitize() {
return ALStringUtil.sanitizing(getCurrentSearch());
}
/**
* @return target_keyword
*/
public ALStringField getTargetKeyword() {
return target_keyword;
}
/**
* @return table_colum_num
*/
public int getTableColumNum() {
return table_colum_num;
}
/**
* @param table_colum_num
* セットする table_colum_num
*/
public void setTableColumNum(int table_colum_num) {
this.table_colum_num = table_colum_num;
}
/**
* 部署一覧を取得します
*
* @return postList
*/
public List<ALEipGroup> getPostList() {
return postList;
}
/**
* 部署の一覧を取得する.
*
* @return
*/
public Map<Integer, ALEipPost> getPostMap() {
return ALEipManager.getInstance().getPostMap();
}
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 String getCategoryId() {
return categoryId;
}
public String getPostId() {
return postId;
}
private void updateCategoryName() {
categoryName = "";
if (categoryList != null) {
for (int i = 0; i < categoryList.size(); i++) {
String cid = categoryList.get(i).getCategoryId().toString();
if (cid != null && categoryId != null) {
if (cid.equals(categoryId.toString())) {
categoryName = categoryList.get(i).getCategoryName().toString();
return;
}
}
}
}
}
public String getCategoryName() {
return categoryName;
}
private void updatePostName() {
postName = "";
for (int i = 0; i < postList.size(); i++) {
String pid = postList.get(i).getName().toString();
if (pid.equals(postId.toString())) {
postName = postList.get(i).getAliasName().toString();
return;
}
}
Map<Integer, ALEipPost> map = ALEipManager.getInstance().getPostMap();
for (Map.Entry<Integer, ALEipPost> item : map.entrySet()) {
String pid = item.getValue().getGroupName().toString();
if (pid.equals(postId.toString())) {
postName = item.getValue().getPostName().toString();
return;
}
}
}
public String getPostName() {
return postName;
}
public boolean isFileUploadable() {
return isFileUploadable;
}
}