com.intuit.tank.vm.settings.MailMessageConfig.java Source code

Java tutorial

Introduction

Here is the source code for com.intuit.tank.vm.settings.MailMessageConfig.java

Source

package com.intuit.tank.vm.settings;

/*
 * #%L
 * Intuit Tank Api
 * %%
 * Copyright (C) 2011 - 2015 Intuit Inc.
 * %%
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * #L%
 */

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.enterprise.context.ApplicationScoped;

import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

/**
 * <message event="QUEUE_ADD"> <subject>Job {jobName} Added to Queue</subject> <body> <![CDATA[
 * <p>
 * The Job {jobName} for Project {projectName} was added to the job queue at {eventTime}.
 * </p>
 * ]]> </body> </message>
 * 
 * <br>
 * 
 * @author dangleton
 */
@ApplicationScoped
public class MailMessageConfig extends BaseCommonsXmlConfig {

    private static final long serialVersionUID = 1L;
    private static final Logger LOG = Logger.getLogger(MailMessageConfig.class);
    private static final String KEY_MESSAGE_NODE = "message";
    private static final String KEY_EVENT = "@event";
    private static final String KEY_SUBJECT = "subject";
    private static final String KEY_FOOTER = "footer";
    private static final String KEY_BODY = "body";
    private static final String KEY_CSS = "css-style";

    private static final String DEFAULT = "default";

    private static final String CONFIG_NAME = "mail-messages.xml";
    private static String configName = CONFIG_NAME;

    static {
        File file = new File(configName);
        LOG.info("checking file " + file.getAbsolutePath() + ": exists=" + file.exists());
        if (!file.exists()) {
            LOG.info("System.getenv('WATS_PROPERTIES') = '" + System.getenv("WATS_PROPERTIES") + "'");
            LOG.info("System.getProperty('WATS_PROPERTIES') = '" + System.getProperty("WATS_PROPERTIES") + "'");
            if (System.getenv("WATS_PROPERTIES") != null) {
                configName = System.getenv("WATS_PROPERTIES") + "/" + CONFIG_NAME;
            } else if (System.getProperty("WATS_PROPERTIES") != null) {
                configName = System.getProperty("WATS_PROPERTIES") + "/" + CONFIG_NAME;
            }
        }
    }

    private String configPath = configName;

    private Map<String, MailMessage> messages = new HashMap<String, MailMessage>();

    /**
     * 
     */
    MailMessageConfig(String configPath) {
        this.configPath = configPath;
        readConfig();
    }

    /**
     * private constructor to implement the singleton pattern
     * 
     */
    public MailMessageConfig() {
        readConfig();
    }

    public MailMessage getMailMessage(String event) {
        checkReload();
        MailMessage mailMessage = messages.get(event);
        if (mailMessage == null) {
            mailMessage = messages.get(MailMessageConfig.DEFAULT);
        }
        return mailMessage;
    }

    public Collection<MailMessage> getAllMessages() {
        checkReload();
        return messages.values();
    }

    /**
     * @return the footer
     */
    public String getFooter() {
        return config.getString(KEY_FOOTER,
                "<p class=\"footer\">This message automatically generated by Tank (<a href=\"{tankBaseUrl}\">{tankBaseUrl}</a>). </p>");
    }

    public String getStyle() {
        return config.getString(KEY_CSS, "");
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected String getConfigName() {
        return configPath;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void initConfig(XMLConfiguration configuration) {
        messages.clear();
        if (config != null) {
            String style = getStyle();
            @SuppressWarnings("unchecked")
            List<HierarchicalConfiguration> msgConfigs = config.configurationsAt(KEY_MESSAGE_NODE);
            for (HierarchicalConfiguration msgConfig : msgConfigs) {
                String event = msgConfig.getString(KEY_EVENT);
                String subject = msgConfig.getString(KEY_SUBJECT);
                String body = msgConfig.getString(KEY_BODY);
                if (!StringUtils.isEmpty(event) && !StringUtils.isEmpty(subject) && !StringUtils.isEmpty(body)) {
                    messages.put(event, new MailMessage(body, subject, style));
                }
            }
        }
    }

}