com.aimluck.eip.webmail.WebMailSelectData.java Source code

Java tutorial

Introduction

Here is the source code for com.aimluck.eip.webmail.WebMailSelectData.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.webmail;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.jar.Attributes;

import javax.mail.Message;

import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.commons.lang.StringUtils;
import org.apache.jetspeed.om.security.JetspeedUser;
import org.apache.jetspeed.portal.portlets.VelocityPortlet;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.rundata.JetspeedRunData;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;

import com.aimluck.eip.cayenne.om.portlet.EipMMailAccount;
import com.aimluck.eip.cayenne.om.portlet.EipTMail;
import com.aimluck.eip.cayenne.om.portlet.EipTMailFolder;
import com.aimluck.eip.common.ALAbstractSelectData;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALEipConstants;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.mail.ALFolder;
import com.aimluck.eip.mail.ALLocalMailMessage;
import com.aimluck.eip.mail.ALMailFactoryService;
import com.aimluck.eip.mail.ALMailHandler;
import com.aimluck.eip.mail.ALMailMessage;
import com.aimluck.eip.mail.ALPop3MailReceiveThread;
import com.aimluck.eip.mail.util.ALMailUtils;
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.util.ALCommonUtils;
import com.aimluck.eip.util.ALEipUtils;
import com.aimluck.eip.util.ALLocalizationUtils;
import com.aimluck.eip.webmail.beans.WebmailAccountLiteBean;
import com.aimluck.eip.webmail.util.WebMailUtils;
import com.sk_jp.mail.MailUtility;

/**
 * Web??????? <br />
 */
public class WebMailSelectData extends ALAbstractSelectData<EipTMail, ALMailMessage> {
    /** logger */
    private static final JetspeedLogger logger = JetspeedLogFactoryService
            .getLogger(WebMailSelectData.class.getName());

    /** ????? (?? or ?) */
    private String currentTab = null;

    JetspeedUser user = null;

    /** ID */
    private int userId = -1;

    /** ID */
    private int accountId = -1;

    /** ID */
    private int folderId = -1;

    /** ??? */
    private Map<Integer, Integer> unreadMailSumMap;

    /** ? */
    private final String finalAccessDateStr = null;

    private String orgId;

    /** ?? */
    private String mailReceiveThreadStatus;

    /** ??? */
    private ALFolder folder;

    /** ??? */
    private WebMailFolderResultData selectedFolder;

    /**  */
    private List<WebmailAccountLiteBean> mailAccountList = new ArrayList<WebmailAccountLiteBean>();

    /**  */
    private List<WebMailFolderResultData> mailFolderList = new ArrayList<WebMailFolderResultData>();

    /**
     * 
     * @param action
     * @param rundata
     * @param context
     */
    @Override
    public void init(ALAction action, RunData rundata, Context context)
            throws ALPageNotFoundException, ALDBErrorException {
        String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR);
        if (sort == null || sort.equals("")) {
            ALEipUtils.setTemp(rundata, context, LIST_SORT_STR,
                    ALEipUtils.getPortlet(rundata, context).getPortletConfig().getInitParameter("p2a-sort"));
        }

        orgId = Database.getDomainName();
        userId = ALEipUtils.getUserId(rundata);
        user = (JetspeedUser) ((JetspeedRunData) rundata).getUser();

        // ???
        mailReceiveThreadStatus = ALEipUtils.getTemp(rundata, context, "start_recieve");
        ALEipUtils.removeTemp(rundata, context, "start_recieve");

        String tabParam = rundata.getParameters().getString("tab");
        currentTab = ALEipUtils.getTemp(rundata, context, "tab");
        if (tabParam == null && currentTab == null) {
            ALEipUtils.setTemp(rundata, context, "tab", WebMailUtils.TAB_RECEIVE);
            currentTab = WebMailUtils.TAB_RECEIVE;
        } else if (tabParam != null) {
            ALEipUtils.setTemp(rundata, context, "tab", tabParam);
            currentTab = tabParam;
        }

        // ???????????
        if (ALEipUtils.isMatch(rundata, context)) {

            // ID
            if (rundata.getParameters().containsKey(WebMailUtils.ACCOUNT_ID)) {
                ALEipUtils.setTemp(rundata, context, WebMailUtils.ACCOUNT_ID,
                        rundata.getParameters().getString(WebMailUtils.ACCOUNT_ID));
            }

            // ID
            if (rundata.getParameters().containsKey(WebMailUtils.FOLDER_ID)) {
                ALEipUtils.setTemp(rundata, context, WebMailUtils.FOLDER_ID,
                        rundata.getParameters().getString(WebMailUtils.FOLDER_ID));
            }

        } else {
            String _accountId = ALEipUtils.getTemp(rundata, context, WebMailUtils.ACCOUNT_ID);
            if (StringUtils.isEmpty(_accountId) || !StringUtils.isNumeric(_accountId)) {
                ALEipUtils.setTemp(rundata, context, WebMailUtils.ACCOUNT_ID, ALEipUtils
                        .getPortlet(rundata, context).getPortletConfig().getInitParameter("p3a-accounts"));
            }
        }

        try {
            accountId = Integer.parseInt(ALEipUtils.getTemp(rundata, context, WebMailUtils.ACCOUNT_ID));
        } catch (Exception ignore) {
            accountId = 0;
        }

        try {
            folderId = Integer.parseInt(ALEipUtils.getTemp(rundata, context, WebMailUtils.FOLDER_ID));
        } catch (Exception e) {
            folderId = 0;
        }

        // accountId?????????????
        if (!validateAccountId()) {
            accountId = 0;
        }

        // ID??????????????ID??
        if (accountId == 0) {
            try {
                Expression exp = ExpressionFactory.matchExp(EipMMailAccount.USER_ID_PROPERTY, userId);
                SelectQuery<EipMMailAccount> query = Database.query(EipMMailAccount.class, exp);

                query.select(EipMMailAccount.ACCOUNT_ID_PK_COLUMN);
                List<EipMMailAccount> accounts = query.fetchList();
                if (accounts != null && accounts.size() > 0) {
                    EipMMailAccount account = accounts.get(0);
                    accountId = account.getAccountId();
                    ALEipUtils.setTemp(rundata, context, WebMailUtils.ACCOUNT_ID, Integer.toString(accountId));
                } else {
                    // ????????
                    return;
                }
            } catch (Exception e) {
            }
        }

        // ?
        EipMMailAccount account = ALMailUtils.getMailAccount(userId, accountId);
        if (account == null) {
            action.addErrorMessage(ALLocalizationUtils.getl10nFormat("WEBMAIL_NO_ACCOUNT"));
            return;
        }

        // ????
        EipTMailFolder mailFolder = WebMailUtils.getEipTMailFolder(account, String.valueOf(folderId));

        // ??????????????????ID??
        if (mailFolder == null) {
            folderId = account.getDefaultFolderId();

            // ?
            ALEipUtils.setTemp(rundata, context, WebMailUtils.FOLDER_ID, String.valueOf(folderId));

            // ??
            mailFolder = WebMailUtils.getEipTMailFolder(account, String.valueOf(folderId));
        }

        selectedFolder = new WebMailFolderResultData(mailFolder);

        // ?
        mailFolderList = WebMailUtils.getMailFolderAll(account);

        // ??????????
        if (accountId > 0) {
            int type_mail = (WebMailUtils.TAB_RECEIVE.equals(currentTab)) ? ALFolder.TYPE_RECEIVE
                    : ALFolder.TYPE_SEND;
            ALMailHandler handler = ALMailFactoryService.getInstance().getMailHandler();
            folder = handler.getALFolder(type_mail, orgId, userId, Integer.valueOf(accountId));
            folder.setRowsNum(super.getRowsNum());
        }

        loadUnreadMailSumMap(rundata, context);

        super.init(action, rundata, context);

        // ????????
        if ("date".equals(ALEipUtils.getTemp(rundata, context, LIST_SORT_STR))) {
            String sort_type = ALEipUtils.getTemp(rundata, context, LIST_SORT_TYPE_STR);
            if (sort_type == null || sort_type.equals("")) {
                ALEipUtils.setTemp(rundata, context, LIST_SORT_TYPE_STR, ALEipConstants.LIST_SORT_TYPE_DESC);
            }
        }
    }

    private boolean validateAccountId() {
        for (WebmailAccountLiteBean bean : mailAccountList) {
            if (accountId == (int) bean.getAccountId().getValue()) {
                return true;
            }
        }
        return false;
    }

    /**
     * 
     * @param rundata
     * @param context
     */
    public void loadMailAccountList(RunData rundata, Context context) {
        mailAccountList = WebMailUtils.getMailAccountList(rundata, context);
    }

    /**
     * ???
     * 
     * @param rundata
     * @param context
     * @return
     */
    @Override
    protected ResultList<EipTMail> selectList(RunData rundata, Context context) {
        try {
            if (folder == null) {
                return null;
            }

            loadUnreadMailSumMap(rundata, context);
            return folder.getIndexRows(rundata, context);
        } catch (Exception ex) {
            logger.error("webmail", ex);
            return null;
        }
    }

    /**
     * ????<br>
     * ????????????<br>
     * ?????????<br>
     * ???????
     * 
     * @param rundata
     * @param context
     */
    private void loadUnreadMailSumMap(RunData rundata, Context context) {
        String unreadMailSumMapString = ALEipUtils.getTemp(rundata, context, WebMailUtils.UNREAD_MAIL);
        if ((rundata.getParameters().containsKey("noupdateunread") || rundata.getParameters().containsKey("sort")
                || rundata.getParameters().containsKey("tab")) && unreadMailSumMapString != null
                && !rundata.getParameters().containsKey("updateunread")) {
            // ??HashMap???
            unreadMailSumMap = WebMailUtils.getUnreadMailSumMapFromString(unreadMailSumMapString);
        } else {
            // ???????????????
            unreadMailSumMap = WebMailUtils.getUnreadMailNumberMap(rundata, userId, accountId);
        }
        // ??
        ALEipUtils.setTemp(rundata, context, WebMailUtils.UNREAD_MAIL, unreadMailSumMap.toString());
    }

    /**
     * 
     * @param rundata
     * @param context
     * @return
     */
    @Override
    protected ALMailMessage selectDetail(RunData rundata, Context context) {
        String mailid = ALEipUtils.getTemp(rundata, context, ALEipConstants.ENTITY_ID);

        if (mailid == null || Integer.valueOf(mailid) == null) {
            // Mail ID???
            logger.debug("[Mail] Empty ID...");
            return null;
        }
        return folder.getMail(Integer.valueOf(mailid));
    }

    /**
     * ResultData??? <BR>
     * 
     * 
     */
    @Override
    protected Object getResultData(EipTMail record) {

        WebMailIndexRowResultData rd = new WebMailIndexRowResultData();
        rd.initField();

        rd.setMailId(record.getMailId().toString());

        String isRead = record.getReadFlg();
        if ("T".equals(isRead)) {
            rd.setRead(true);
            rd.setReadImage("themes/" + getTheme() + "/images/icon/webmail_readmail.gif");
            rd.setReadImageDescription("");
            rd.setRead(true);
        } else {
            rd.setRead(false);
            rd.setReadImage("themes/" + getTheme() + "/images/icon/webmail_unreadmail.gif");
            rd.setReadImageDescription("");
            rd.setRead(false);
        }

        String subject = ALMailUtils.decodeSubject(record.getSubject());
        rd.setSubject(ALCommonUtils.compressString(subject, getStrLength()));

        rd.setPerson(MailUtility.decodeText(record.getPerson()));

        rd.setDate(record.getEventDate());
        rd.setFileVolume(record.getFileVolume().toString());

        boolean hasAttachments = ("T".equals(record.getHasFiles()));

        if (hasAttachments) {
            rd.setWithFilesImage("images/webmail/webmail_withfiles.gif");
            rd.setWithFilesImageDescription("");
        }
        rd.hasAttachments(hasAttachments);

        return rd;
    }

    /**
     * 
     * @param obj
     * @return
     */
    @Override
    protected Object getResultDataDetail(ALMailMessage obj) {
        WebMailResultData rd = null;
        try {
            ALLocalMailMessage msg = (ALLocalMailMessage) obj;

            String date = "";

            Date sentDate = msg.getSentDate();
            if (sentDate == null) {
                date = "Unknown";
            } else {
                date = ALMailUtils.translateDate(sentDate);
            }
            rd = new WebMailResultData();
            rd.initField();
            rd.setHeaders(msg.getHeaderArray());
            rd.setSubject(msg.getSubject());
            rd.setFrom(ALMailUtils.getFromDelegate(msg));
            rd.setTo(ALMailUtils.getAddressString(msg.getRecipients(Message.RecipientType.TO, false)));
            rd.setDate(date);
            rd.setBody(msg.getBodyText());
            rd.setAttachmentFileNames(msg.getAttachmentFileNameArray());
        } catch (Exception e) {
            logger.error("webmail", e);
        }
        return rd;
    }

    /**
     * ????????? <BR>
     * 
     * @return
     */
    public String getCurrentTab() {
        return currentTab;
    }

    /**
     * ?????????
     * 
     * @return
     */
    public List<WebMailFolderResultData> getFolderList() {
        return mailFolderList;
    }

    /**
     * @return
     * 
     */
    @Override
    protected Attributes getColumnMap() {
        return null;
    }

    /**
     * 
     * @return
     */
    public List<WebmailAccountLiteBean> getMailAccountList() {
        return mailAccountList;
    }

    /**
     * ???ID????
     * 
     * @return
     */
    public int getAccountId() {
        return accountId;
    }

    public boolean isTheMailAccountSelected(WebmailAccountLiteBean record) {
        return accountId == record.getAccountId().getValue();
    }

    /**
     * ???ID????
     * 
     * @return
     */
    public int getFolderId() {
        return folderId;
    }

    /**
     * ???????
     * 
     * @return
     */
    public WebMailFolderResultData getSelectedFolder() {
        return selectedFolder;
    }

    /**
     * ??
     * 
     * @return
     */
    public int getUnReadMailSumByFolderId(Integer folder_id) {
        int result = 0;
        try {
            if (folder_id != null) {
                if (unreadMailSumMap.containsKey(folder_id)) {
                    result = unreadMailSumMap.get(folder_id);
                }
            }
        } catch (Exception e) {
            logger.error("[WebMailSelectData]", e);
            result = 0;
        }
        return result;
    }

    public String getFinalAccessDate() {
        return finalAccessDateStr;
    }

    /**
     * ?????
     * 
     * @return
     */
    @Override
    public int getRowsNum() {
        return folder.getRowsNum();
    }

    /**
     * ?????
     * 
     * @return
     */
    @Override
    public int getCount() {
        return folder.getCount();
    }

    /**
     * ?????
     * 
     * @return
     */
    @Override
    public int getPagesNum() {
        return folder.getPagesNum();
    }

    /**
     * ????????
     * 
     * @return
     */
    @Override
    public int getCurrentPage() {
        return folder.getCurrentPage();
    }

    /**
     * 
     * @return
     */
    @Override
    public String getCurrentSort() {
        return folder.getCurrentSort();
    }

    /**
     * 
     * @return
     */
    @Override
    public String getCurrentSortType() {
        return folder.getCurrentSortType();
    }

    /**
     * @return
     */
    @Override
    public int getStart() {
        return folder.getStart();
    }

    /**
     * 
     * @param id
     * @return
     */
    public boolean isMatch(int id1, long id2) {
        return id1 == (int) id2;
    }

    public String getStatStr() {
        return ALPop3MailReceiveThread.getReceiveMailResultStr(user, accountId, mailReceiveThreadStatus);
    }

    public void setFiltersPSML(VelocityPortlet portlet, Context context, RunData rundata) {
        ALEipUtils.setTemp(rundata, context, WebMailUtils.ACCOUNT_ID,
                portlet.getPortletConfig().getInitParameter("p3a-accounts"));
    }

}