com.netsteadfast.greenstep.bsc.model.HistoryItemScoreNoticeHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.netsteadfast.greenstep.bsc.model.HistoryItemScoreNoticeHandler.java

Source

/* 
 * Copyright 2012-2016 bambooCORE, greenstep of copyright Chen Xin Nien
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * -----------------------------------------------------------------------
 * 
 * author:    Chen Xin Nien
 * contact: chen.xin.nien@gmail.com
 * 
 */
package com.netsteadfast.greenstep.bsc.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import com.netsteadfast.greenstep.base.AppContext;
import com.netsteadfast.greenstep.base.exception.ServiceException;
import com.netsteadfast.greenstep.base.model.YesNo;
import com.netsteadfast.greenstep.bsc.service.IMonitorItemScoreService;
import com.netsteadfast.greenstep.bsc.util.BscScoreColorUtils;
import com.netsteadfast.greenstep.bsc.util.HistoryItemScoreReportContentQueryUtils;
import com.netsteadfast.greenstep.model.TemplateCode;
import com.netsteadfast.greenstep.model.TemplateResultObj;
import com.netsteadfast.greenstep.po.hbm.BbMonitorItemScore;
import com.netsteadfast.greenstep.po.hbm.TbSysMailHelper;
import com.netsteadfast.greenstep.service.ISysMailHelperService;
import com.netsteadfast.greenstep.util.MailClientUtils;
import com.netsteadfast.greenstep.util.SimpleUtils;
import com.netsteadfast.greenstep.util.TemplateUtils;
import com.netsteadfast.greenstep.vo.MonitorItemScoreVO;
import com.netsteadfast.greenstep.vo.SysMailHelperVO;

import ognl.Ognl;
import ognl.OgnlException;

public class HistoryItemScoreNoticeHandler implements java.io.Serializable {
    private static final long serialVersionUID = -2839229894386555550L;
    protected static Logger logger = Logger.getLogger(HistoryItemScoreNoticeHandler.class);
    private IMonitorItemScoreService<MonitorItemScoreVO, BbMonitorItemScore, String> monitorItemScoreService;
    private ISysMailHelperService<SysMailHelperVO, TbSysMailHelper, String> sysMailHelperService;
    private List<String> toMail = new ArrayList<String>();
    private Map<String, String> visions = new HashMap<String, String>();
    private Map<String, String> perspectives = new HashMap<String, String>();
    private Map<String, String> objectives = new HashMap<String, String>();
    private Map<String, String> kpis = new HashMap<String, String>();
    private String dateStr = SimpleUtils.getStrYMD("");
    private String frequency = BscMeasureDataFrequency.FREQUENCY_YEAR;
    private List<String> employees = new ArrayList<String>();
    private List<String> organizations = new ArrayList<String>();

    @SuppressWarnings("unchecked")
    public HistoryItemScoreNoticeHandler() {
        super();
        monitorItemScoreService = (IMonitorItemScoreService<MonitorItemScoreVO, BbMonitorItemScore, String>) AppContext
                .getBean("bsc.service.MonitorItemScoreService");
        sysMailHelperService = (ISysMailHelperService<SysMailHelperVO, TbSysMailHelper, String>) AppContext
                .getBean("core.service.SysMailHelperService");
    }

    public void action() throws ServiceException, Exception {
        if (toMail.size() < 1) {
            return;
        }
        if (!MailClientUtils.getEnable()) {
            logger.warn("MailClientUtils no enable.");
            return;
        }
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("frequency", frequency);
        paramMap.put("dateVal", dateStr);
        List<BbMonitorItemScore> monitorItemScores = monitorItemScoreService.findListByParams(paramMap);
        this.clearNoNeedItem(monitorItemScores);
        if (null == monitorItemScores || monitorItemScores.size() < 1) {
            logger.warn("No history monitor item score data.");
            return;
        }
        StringBuilder outContent = new StringBuilder();
        this.createContent(monitorItemScores, outContent);
        if (null == outContent || outContent.length() < 1) {
            logger.warn("No history monitor mail content data.");
            return;
        }
        SysMailHelperVO sysMailHelper = new SysMailHelperVO();
        sysMailHelper.setSubject("bambooBSC monitor item score mail - frequency: "
                + BscMeasureDataFrequency.getFrequencyMap(false).get(frequency) + " , date: "
                + SimpleUtils.getStrYMD(dateStr, "/"));
        sysMailHelper.setText(outContent.toString().getBytes("utf-8"));
        sysMailHelper.setMailFrom(MailClientUtils.getDefaultFrom());
        StringBuilder to = new StringBuilder();
        for (String mail : toMail) {
            to.append(mail).append(";");
        }
        sysMailHelper.setMailTo(this.toMail.get(0));
        if (this.toMail.size() > 1) {
            sysMailHelper.setMailCc(to.toString());
        }
        sysMailHelper.setMailId(this.sysMailHelperService.findForMaxMailIdComplete(dateStr));
        sysMailHelper.setRetainFlag(YesNo.NO);
        sysMailHelper.setSuccessFlag(YesNo.NO);
        sysMailHelperService.saveObject(sysMailHelper);
    }

    private void createContent(List<BbMonitorItemScore> monitorItemScoresSrc, StringBuilder out)
            throws ServiceException, Exception {
        // create mail content
        List<MonitorItemScoreVO> monitorItemScores = HistoryItemScoreReportContentQueryUtils
                .fill2ValueObjectList(monitorItemScoresSrc);
        BscScoreColorUtils.loadScoreColors();
        for (MonitorItemScoreVO itemScore : monitorItemScores) {
            Map<String, Object> paramMap = new HashMap<String, Object>();
            paramMap.put("title", itemScore.getName());
            paramMap.put("date", SimpleUtils.getStrYMD(itemScore.getDateVal(), "/"));
            paramMap.put("frequency", BscMeasureDataFrequency.getFrequencyMap(false).get(frequency));
            paramMap.put("score", itemScore.getScore());
            paramMap.put("organization", itemScore.getOrganizationName());
            paramMap.put("employee", itemScore.getEmployeeName());
            paramMap.put("bgColor", BscScoreColorUtils.getBackgroundColor(Float.parseFloat(itemScore.getScore())));
            paramMap.put("fnColor", BscScoreColorUtils.getFontColor(Float.parseFloat(itemScore.getScore())));
            TemplateResultObj result = TemplateUtils.getResult(TemplateCode.TPLMSG0003, paramMap);
            if (result.getContent() != null) {
                out.append(result.getContent());
            }
        }

    }

    private boolean isRule(BbMonitorItemScore monitorItemScore, String expression) {
        boolean status = false;
        try {
            String value = String.valueOf(Ognl.getValue(expression, monitorItemScore));
            if ("true".equals(value)) {
                status = true;
            }
        } catch (OgnlException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return status;
    }

    private void clearNoNeedItem(List<BbMonitorItemScore> monitorItemScores) {
        if (null == monitorItemScores) {
            return;
        }
        for (String orgId : organizations) {
            for (Iterator<BbMonitorItemScore> iterator = monitorItemScores.iterator(); iterator.hasNext();) {
                BbMonitorItemScore itemScore = iterator.next();
                if (!orgId.equals(itemScore.getOrgId())) {
                    iterator.remove();
                }
            }
        }
        for (String empId : employees) {
            for (Iterator<BbMonitorItemScore> iterator = monitorItemScores.iterator(); iterator.hasNext();) {
                BbMonitorItemScore itemScore = iterator.next();
                if (!empId.equals(itemScore.getOrgId())) {
                    iterator.remove();
                }
            }
        }
        this.clearNoNeedItem(MonitorItemType.VISION, visions, monitorItemScores);
        this.clearNoNeedItem(MonitorItemType.PERSPECTIVES, perspectives, monitorItemScores);
        this.clearNoNeedItem(MonitorItemType.STRATEGY_OF_OBJECTIVES, objectives, monitorItemScores);
        this.clearNoNeedItem(MonitorItemType.KPI, kpis, monitorItemScores);
    }

    private void clearNoNeedItem(String itemType, Map<String, String> typeDataMap,
            List<BbMonitorItemScore> monitorItemScores) {
        for (Entry<String, String> entry : typeDataMap.entrySet()) {
            for (Iterator<BbMonitorItemScore> iterator = monitorItemScores.iterator(); iterator.hasNext();) {
                BbMonitorItemScore itemScore = iterator.next();
                if (itemType.equals(itemScore.getItemType()) && !entry.getKey().equals(itemScore.getItemId())) {
                    iterator.remove();
                    continue;
                }
                if (!this.isRule(itemScore, entry.getValue())) {
                    iterator.remove();
                    continue;
                }
            }
        }
    }

    public HistoryItemScoreNoticeHandler employee(String empId) {
        if (StringUtils.isBlank(empId) || this.employees.contains(empId)) {
            return this;
        }
        this.employees.add(empId);
        return this;
    }

    public HistoryItemScoreNoticeHandler organization(String orgId) {
        if (StringUtils.isBlank(orgId) || this.organizations.contains(orgId)) {
            return this;
        }
        this.organizations.add(orgId);
        return this;
    }

    public HistoryItemScoreNoticeHandler frequency(String frequency) {
        this.frequency = frequency;
        if (BscMeasureDataFrequency.getFrequencyMap(false).get(frequency) == null) {
            this.frequency = BscMeasureDataFrequency.FREQUENCY_YEAR;
        }
        return this;
    }

    public HistoryItemScoreNoticeHandler date(String dateStr) {
        this.dateStr = dateStr;
        if (!SimpleUtils.isDate(dateStr)) {
            this.dateStr = SimpleUtils.getStrYMD("");
        }
        return this;
    }

    public HistoryItemScoreNoticeHandler vision(String visionId, String ruleExpression) {
        if (StringUtils.isBlank(visionId) || this.visions.get(visionId) != null) {
            return this;
        }
        this.visions.put(visionId, StringUtils.defaultString(ruleExpression).trim());
        return this;
    }

    public HistoryItemScoreNoticeHandler perspective(String perspectiveId, String ruleExpression) {
        if (StringUtils.isBlank(perspectiveId) || this.perspectives.get(perspectiveId) != null) {
            return this;
        }
        this.perspectives.put(perspectiveId, StringUtils.defaultString(ruleExpression).trim());
        return this;
    }

    public HistoryItemScoreNoticeHandler objective(String objectiveId, String ruleExpression) {
        if (StringUtils.isBlank(objectiveId) || this.objectives.get(objectiveId) != null) {
            return this;
        }
        this.objectives.put(objectiveId, StringUtils.defaultString(ruleExpression).trim());
        return this;
    }

    public HistoryItemScoreNoticeHandler kpi(String kpiId, String ruleExpression) {
        if (StringUtils.isBlank(kpiId) || this.kpis.get(kpiId) != null) {
            return this;
        }
        this.kpis.put(kpiId, StringUtils.defaultString(ruleExpression).trim());
        return this;
    }

    public HistoryItemScoreNoticeHandler vision(String visionId) {
        return this.vision(visionId, "null != score");
    }

    public HistoryItemScoreNoticeHandler perspective(String perspectiveId) {
        return this.perspective(perspectiveId, "null != score");
    }

    public HistoryItemScoreNoticeHandler objective(String objectiveId) {
        return this.objective(objectiveId, "null != score");
    }

    public HistoryItemScoreNoticeHandler kpi(String kpiId) {
        return this.kpi(kpiId, "null != score");
    }

    public HistoryItemScoreNoticeHandler to(String email) {
        if (StringUtils.isBlank(email) || this.toMail.contains(email) || email.indexOf("@") == -1) {
            return this;
        }
        this.toMail.add(email);
        return this;
    }

}