com.aimluck.eip.msgboard.MsgboardTopicSelectData.java Source code

Java tutorial

Introduction

Here is the source code for com.aimluck.eip.msgboard.MsgboardTopicSelectData.java

Source

/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2015 Aimluck,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 ("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.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("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;
    }
}