/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.mail;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.enonic.vertical.adminweb.AdminHelper;
import com.enonic.cms.core.AdminConsoleTranslationService;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.security.user.UserEntity;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: May 6, 2010
* Time: 2:40:17 PM
*/
public abstract class AbstractMailTemplate
{
protected final static Logger LOG = LoggerFactory.getLogger( AbstractMailTemplate.class );
private List<MailRecipient> mailRecipients = new ArrayList<MailRecipient>();
private Map<String, InputStream> attachments = new LinkedHashMap<String, InputStream>();
private MailRecipient from;
protected static final DateTimeFormatter DATE_FORMAT = DateTimeFormat.forPattern( "dd.MM.yyyy HH:mm" );
protected String getTranslation( String key, String languageCode )
{
if ( !isLanguageCodeAvailable( languageCode ) )
{
languageCode = AdminConsoleTranslationService.getInstance().getDefaultLanguageCode();
}
AdminConsoleTranslationService languageMap = AdminConsoleTranslationService.getInstance();
Map<String, String> translationMap = languageMap.getTranslationMap( languageCode );
String phrase = translationMap.get( key );
if ( phrase != null && !phrase.equalsIgnoreCase( "missing" ) )
{
return phrase;
}
else
{
translationMap = languageMap.getTranslationMap( AdminConsoleTranslationService.getInstance().getDefaultLanguageCode() );
return translationMap.get( key );
}
}
private boolean isLanguageCodeAvailable( String languageCode )
{
try
{
AdminConsoleTranslationService.getInstance().getTranslationMap( languageCode );
return true;
}
catch ( IllegalArgumentException e )
{
LOG.warn( "Languagecode " + languageCode + " is not available, reverting to default language" );
return false;
}
}
protected String getAdminUrl( final ContentKey contentKey )
{
HttpServletRequest request = ServletRequestAccessor.getRequest();
String adminUrl = AdminHelper.getAdminPath( request, false );
if ( adminUrl != null )
{
adminUrl += "/adminpage?page=0&editContent=" + contentKey.toString();
}
return adminUrl;
}
public void addRecipient( MailRecipient recipient )
{
mailRecipients.add( recipient );
}
public void addAttachment( final String filename, final InputStream inputStream )
{
attachments.put( filename, inputStream );
}
public void addRecipient( UserEntity recipient )
{
mailRecipients.add( new MailRecipient( recipient ) );
}
public List<MailRecipient> getMailRecipients()
{
return mailRecipients;
}
public void setMailRecipients( List<MailRecipient> mailRecipients )
{
this.mailRecipients = mailRecipients;
}
public void addMailRecipients( List<UserEntity> mailRecipients )
{
for ( UserEntity recipient : mailRecipients )
{
this.mailRecipients.add( new MailRecipient( recipient.getDisplayName(), recipient.getEmail() ) );
}
}
public MailRecipient getFrom()
{
return from;
}
public void setFrom( MailRecipient from )
{
this.from = from;
}
public abstract String getBody();
public abstract String getSubject();
protected void addNewLine( StringBuffer buffer )
{
buffer.append( "\n" );
}
protected String createUserName( UserEntity user )
{
StringBuffer buffer = new StringBuffer();
buffer.append( user.getDisplayName() );
buffer.append( " (" );
buffer.append( user.getQualifiedName() );
buffer.append( ")" );
return buffer.toString();
}
public boolean isHtml()
{
return false;
}
public Map<String, InputStream> getAttachments()
{
return attachments;
}
}