/*
* $HeadURL$
* $Id$
*
* Copyright (c) 2006-2011 by Public Library of Science
* http://plos.org
* http://ambraproject.org
*
* 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.
*/
package org.ambraproject.service.mailer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ambraproject.email.impl.FreemarkerTemplateMailer;
import java.net.InetAddress;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class AmbraMailerImpl extends FreemarkerTemplateMailer implements AmbraMailer {
private static final Log log = LogFactory.getLog(AmbraMailerImpl.class);
private Map<String, String> emailThisArticleMap;
private Map<String, String> feedbackEmailMap;
private Map<String, String> autoIngestEmailMap;
private Map<String, String> errorEmailMap;
private Map<String, String> registrationEmailMap;
private Map<String, String> forgotPasswordEmailMap;
private Map<String, String> changeEmailMap;
/**
* Setter for emailThisArticleMap.
* @param emailThisArticleMap emailThisArticleMap
*/
public void setEmailThisArticleMap(final Map<String, String> emailThisArticleMap) {
this.emailThisArticleMap = Collections.unmodifiableMap(emailThisArticleMap);
}
/**
* Setter for feedbackEmailMap.
* @param feedbackEmailMap Value to set for feedbackEmailMap.
*/
public void setFeedbackEmailMap(final Map<String, String> feedbackEmailMap) {
this.feedbackEmailMap = feedbackEmailMap;
}
/**
* Setter for autoIngestEmailMap.
* @param autoIngestEmailMap Value to set for autoIngestEmailMap.
*/
public void setAutoIngestEmailMap(final Map<String, String> autoIngestEmailMap) {
this.autoIngestEmailMap = autoIngestEmailMap;
}
/**
* Setting for errorEmailMap
* @param errorEmailMap
*/
public void setErrorEmailMap(final Map<String, String> errorEmailMap) {
this.errorEmailMap = errorEmailMap;
}
public void setRegistrationEmailMap(Map<String, String> registrationEmailMap) {
this.registrationEmailMap = registrationEmailMap;
}
public void setForgotPasswordEmailMap(Map<String, String> forgotPasswordEmailMap) {
this.forgotPasswordEmailMap = forgotPasswordEmailMap;
}
public void setChangeEmailMap(Map<String, String> changeEmailMap) {
this.changeEmailMap = changeEmailMap;
}
/**
* Send an email when the user selects to email an article to a friend
* @param toEmailAddress toEmailAddress
* @param fromEmailAddress fromEmailAddress
* @param mapFields mapFields to fill up the template with the right values
*/
public void sendEmailThisArticleEmail(final String toEmailAddress, final String fromEmailAddress,
final Map<String, String> mapFields) {
final HashMap<String, Object> newMapFields = new HashMap<String, Object>();
newMapFields.putAll(emailThisArticleMap);
newMapFields.putAll(mapFields);
sendEmail(toEmailAddress, fromEmailAddress, newMapFields);
}
public void sendFeedback(final String fromEmailAddress, final Map<String, Object> mapFields) {
final Map<String, Object> newMapFields = new HashMap<String, Object>();
newMapFields.putAll(feedbackEmailMap);
newMapFields.putAll(mapFields);
sendEmail(feedbackEmailMap.get(TO_EMAIL_ADDRESS), fromEmailAddress, newMapFields);
}
public void sendIngestNotify(final Map<String, Object> mapFields) {
final Map<String, Object> newMapFields = new HashMap<String, Object>();
newMapFields.putAll(autoIngestEmailMap);
newMapFields.putAll(mapFields);
sendEmail(autoIngestEmailMap.get(TO_EMAIL_ADDRESS), getFromEmailAddress(), newMapFields);
}
public void sendError(String message) {
final Map<String, Object> newMapFields = new HashMap<String, Object>();
String host = "couldn't get hostname";
try {
InetAddress netAddress = InetAddress.getLocalHost();
host = netAddress.getHostName();
} catch (Exception ex) {
log.error(ex.getMessage(),ex);
}
newMapFields.putAll(errorEmailMap);
newMapFields.put("error", message);
newMapFields.put("host", host);
sendEmail(errorEmailMap.get(TO_EMAIL_ADDRESS), getFromEmailAddress(), newMapFields);
}
@Override
public void sendVerificationEmail(String email, String verificationToken) {
final Map<String, Object> newMapFields = new HashMap<String, Object>();
newMapFields.putAll(registrationEmailMap);
newMapFields.put("email", email);
newMapFields.put("verificationToken", verificationToken);
newMapFields.put("name", getFromEmailName());
sendEmail(email, newMapFields);
}
@Override
public void sendForgotPasswordEmail(String email, String verificationToken) {
final Map<String, Object> newMapFields = new HashMap<String, Object>();
newMapFields.putAll(forgotPasswordEmailMap);
newMapFields.put("email", email);
newMapFields.put("verificationToken", verificationToken);
newMapFields.put("name", getFromEmailName());
sendEmail(email, newMapFields);
}
@Override
public void sendChangeEmailNotice(String oldEmail, String newEmail, String verificationToken) {
final Map<String, Object> newMapFields = new HashMap<String, Object>();
newMapFields.putAll(changeEmailMap);
newMapFields.put("oldEmail", oldEmail);
newMapFields.put("newEmail", newEmail);
newMapFields.put("verificationToken", verificationToken);
newMapFields.put("name", getFromEmailName());
sendEmail(newEmail, newMapFields);
}
}