/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.mail;
import java.util.Date;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.google.common.collect.Maps;
import com.enonic.cms.core.content.ContentEntity;
import com.enonic.cms.core.content.ContentStatus;
import com.enonic.cms.core.content.ContentVersionEntity;
import com.enonic.cms.core.mail.AbstractMailTemplate;
import com.enonic.cms.core.security.user.UserEntity;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: Oct 25, 2010
* Time: 1:38:57 PM
*/
public abstract class AbstractAssignmentMailTemplate
extends AbstractMailTemplate
{
protected ContentEntity content;
protected ContentVersionEntity contentVersion;
protected String assignmentDescription;
protected UserEntity assigner;
protected Date assignmentDueDate;
public AbstractAssignmentMailTemplate( ContentVersionEntity contentVersion, ContentEntity content )
{
this.contentVersion = contentVersion;
this.content = content;
}
public abstract String getBody();
public abstract String getSubject();
protected String createAssignmentMailInfoElement()
{
String contentPath = content.getPathAsString();
StringBuffer body = new StringBuffer();
Map<String, String> keyValues = Maps.newLinkedHashMap();
if ( StringUtils.isNotBlank( contentPath ) )
{
addKeyValue( keyValues, "%fldStatus%", getTranslatedStatus( contentVersion.getStatus() ) );
if ( assignmentDueDate != null )
{
addKeyValue( keyValues, "%contentAssignmentDuedate%", DATE_FORMAT.print( assignmentDueDate.getTime() ) );
}
addKeyValue( keyValues, "%fldDisplayName%", contentVersion.getTitle() );
addKeyValue( keyValues, "%fldContentType%", content.getContentType().getName() );
addKeyValue( keyValues, "%contentAssignedBy%", createUserName( assigner ) );
addKeyValue( keyValues, "%contentAssignmentPath%", contentPath );
}
String adminUrl = getAdminUrl( content.getKey() );
if ( StringUtils.isNotBlank( adminUrl ) )
{
addKeyValue( keyValues, "%blockURL%", adminUrl );
}
appendKeyValuesWithPadding( body, keyValues );
return body.toString();
}
private void appendKeyValuesWithPadding( StringBuffer body, Map<String, String> keyValues )
{
int maxLength = findKeyMaxLength( keyValues );
addNewLine( body );
for ( String key : keyValues.keySet() )
{
String paddedKey = StringUtils.rightPad( key, maxLength );
body.append( paddedKey + "\t" + keyValues.get( key ) );
addNewLine( body );
}
}
private int findKeyMaxLength( Map<String, String> keyValues )
{
int maxLength = 0;
for ( String key : keyValues.keySet() )
{
if ( key.length() > maxLength )
{
maxLength = key.length();
}
}
return maxLength;
}
private String getTranslatedStatus( ContentStatus status )
{
return getTranslation( "%txtContentState" + status.getKey() + "%", getLanguageCode() );
}
protected void addKeyValue( Map<String, String> keyValueMap, String translatableKey, String value )
{
String translatedKey = getTranslation( translatableKey, getLanguageCode() ) + ":";
keyValueMap.put( translatedKey, value );
}
protected String getLanguageCode()
{
return content.getLanguage() == null ? null : content.getLanguage().getCode();
}
public void setAssignmentDescription( String assignmentDescription )
{
this.assignmentDescription = assignmentDescription;
}
public void setAssigner( UserEntity assigner )
{
this.assigner = assigner;
}
public Date getAssignmentDueDate()
{
return assignmentDueDate;
}
public void setAssignmentDueDate( Date assignmentDueDate )
{
this.assignmentDueDate = assignmentDueDate;
}
}