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.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.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 = LogManager.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));
}
}
}
}
}