/*********************************************************************************
* The contents of this file are subject to the Common Public Attribution
* License Version 1.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.openemm.org/cpal1.html. The License is based on the Mozilla
* Public License Version 1.1 but Sections 14 and 15 have been added to cover
* use of software over a computer network and provide for limited attribution
* for the Original Developer. In addition, Exhibit A has been modified to be
* consistent with Exhibit B.
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is OpenEMM.
* The Original Developer is the Initial Developer.
* The Initial Developer of the Original Code is AGNITAS AG. All portions of
* the code written by AGNITAS AG are Copyright (c) 2007 AGNITAS AG. All Rights
* Reserved.
*
* Contributor(s): AGNITAS AG.
********************************************************************************/
package org.agnitas.beans.impl;
import java.io.Serializable;
import javax.mail.internet.InternetAddress;
import org.agnitas.beans.Mailing;
import org.agnitas.beans.MailingComponent;
import org.agnitas.beans.MediatypeEmail;
import org.agnitas.util.AgnUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.context.ApplicationContext;
/**
*
* @author mhe
*/
public class MediatypeEmailImpl extends MediatypeImpl implements MediatypeEmail, Serializable {
/** Holds value of property subject. */
protected String subject="";
/** Holds value of property linefeed. */
protected int linefeed;
/** Holds value of property mailFormat. */
protected int mailFormat=2;
public final String DEFAULT_CHARSET = "UTF-8";
/** Holds value of property charset. */
protected String charset = DEFAULT_CHARSET;
/** Holds value of property fromAdr. */
protected String fromEmail="";
/** Holds value of property fromAdr. */
protected String fromFullname="";
/**
* Complete Reply-To Address.
*/
/** Holds value of property replyEmail. */
protected String replyEmail="";
/** Holds value of property replyFullname. */
protected String replyFullname="";
/** Creates a new instance of MediaTypeEmail */
public MediatypeEmailImpl() {
template="[agnDYN name=\"Text\"/]";
htmlTemplate="[agnDYN name=\"HTML-Version\"/]";
}
/** Getter for property subject.
* @return Value of property subject.
*
*/
public String getSubject() {
return subject;
}
/** Setter for property subject.
* @param subject New value of property subject.
*
*/
public void setSubject(String subject) {
this.subject = subject;
}
/** Getter for property fromAdr.
* @return Value of property fromAdr.
*
*/
public String getFromEmail() {
return fromEmail;
}
/** Setter for property fromAdr.
* @param fromAdr New value of property fromAdr.
*
*/
public void setFromEmail(String fromEmail) {
this.fromEmail = fromEmail;
}
/** Getter for property fromAdr.
* @return Value of property fromAdr.
*
*/
public String getFromFullname() {
return this.fromFullname;
}
/** Setter for property fromAdr.
* @param fromAdr New value of property fromAdr.
*
*/
public void setFromFullname(String fromFullname) {
this.fromFullname = fromFullname;
}
public String getFromAdr() throws Exception {
InternetAddress tmpFrom=new InternetAddress(
this.fromEmail, this.fromFullname,charset);
//problems with coding
//return AgnUtils.propertySaveString(tmpFrom.toString());
String adr = "";
adr = tmpFrom.getPersonal() + " <" + tmpFrom.getAddress() + ">";
return adr;
}
/** Getter for property linefeed.
* @return Value of property linefeed.
*
*/
public int getLinefeed() {
return this.linefeed;
}
/** Setter for property linefeed.
* @param linefeed New value of property linefeed.
*
*/
public void setLinefeed(int linefeed) {
this.linefeed = linefeed;
}
/** Getter for property mailFormat.
* @return Value of property mailFormat.
*
*/
public int getMailFormat() {
return mailFormat;
}
/** Setter for property mailFormat.
* @param mailFormat New value of property mailFormat.
*
*/
public void setMailFormat(int mailFormat) {
this.mailFormat = mailFormat;
}
/** Getter for property charset.
* @return Value of property charset.
*
*/
public String getCharset() {
return this.charset;
}
/** Setter for property charset.
* @param charset New value of property charset.
*
*/
public void setCharset(String charset) {
this.charset = charset;
}
public String doEscape(String src) {
src=src.replaceAll("\\\\", "\\\\\\\\");
src=src.replaceAll("\"", "\\\\\"");
return src;
}
public String unEscape(String src) {
src=src.replaceAll("\\\\\"", "\"");
src=src.replaceAll("\\\\\\\\", "\\\\");
return src;
}
public String getParam() throws Exception {
StringBuffer result=new StringBuffer();
InternetAddress tmpFrom=new InternetAddress( this.fromEmail, this.fromFullname, charset );
if(StringUtils.isEmpty( replyEmail ) ) {
replyEmail=fromEmail;
}
if(StringUtils.isEmpty( replyFullname ) ) {
replyFullname=fromFullname;
}
InternetAddress tmpReply=new InternetAddress( this.replyEmail, this.replyFullname,charset );
result.append("from=\"");
result.append(doEscape(tmpFrom.toString()));
result.append("\", ");
result.append("subject=\"");
result.append(AgnUtils.propertySaveString(this.subject));
result.append("\", ");
result.append("charset=\"");
result.append(AgnUtils.propertySaveString(this.charset));
result.append("\", ");
result.append("linefeed=\"");
result.append(AgnUtils.propertySaveString(Integer.toString(this.linefeed)));
result.append("\", ");
result.append("mailformat=\"");
result.append(AgnUtils.propertySaveString(Integer.toString(this.mailFormat)));
result.append("\", ");
result.append("reply=\"");
result.append(tmpReply.toString());
result.append("\", ");
result.append("onepixlog=\"");
result.append(AgnUtils.propertySaveString(this.onepixel));
result.append("\", ");
super.setParam(result.toString());
return result.toString();
}
public void setParam(String param) throws Exception {
int tmp=0;
String from=unEscape(AgnUtils.findParam("from", param));
if(from.length() > 0) {
InternetAddress adr=new InternetAddress(from);
this.fromEmail=adr.getAddress();
this.fromFullname=adr.getPersonal();
} else {
this.fromEmail="";
this.fromFullname="";
}
from=AgnUtils.findParam("reply", param);
if(from==null) {
from=AgnUtils.findParam("from", param);
}
if(from.length() > 0) {
InternetAddress adr=new InternetAddress(from);
this.replyEmail=adr.getAddress();
this.replyFullname=adr.getPersonal();
} else {
this.replyEmail="";
this.replyFullname="";
}
this.charset=AgnUtils.findParam("charset", param);
if(this.charset==null) {
this.charset= DEFAULT_CHARSET;
}
this.subject=AgnUtils.findParam("subject", param);
try {
tmp=Integer.parseInt(AgnUtils.findParam("mailformat", param));
} catch (Exception e) {
tmp=2; // default: Offline-HTML
}
this.mailFormat=tmp;
try {
tmp=Integer.parseInt(AgnUtils.findParam("linefeed", param));
} catch (Exception e) {
tmp=72; // default: after 72 characters
}
this.linefeed=tmp;
this.onepixel=AgnUtils.findParam("onepixlog", param);
if(this.onepixel==null) {
this.onepixel=MediatypeEmailImpl.ONEPIXEL_NONE;
}
}
/**
* Getter for property replyAdr.
* @return Value of property replyAdr.
*/
public String getReplyAdr() throws Exception {
InternetAddress tmpReply=new InternetAddress(
this.replyEmail, this.replyFullname,
"utf-8");
return AgnUtils.propertySaveString(tmpReply.toString());
}
/**
* Getter for property replyEmail.
* @return Value of property replyEmail.
*/
public String getReplyEmail() {
return replyEmail;
}
/**
* Setter for property replyAdr.
* @param replyAdr New value of property replyAdr.
*/
public void setReplyEmail(String replyEmail) {
this.replyEmail = replyEmail;
}
/**
* Getter for property replyFullname.
* @return Value of property replyFullname.
*/
public String getReplyFullname() {
return replyFullname;
}
/**
* Setter for property replyFullname.
* @param replyFullname New value of property replyFullname.
*/
public void setReplyFullname(String replyFullname) {
this.replyFullname = replyFullname;
}
/**
* Holds value of property onepixel.
*/
protected String onepixel = MediatypeEmailImpl.ONEPIXEL_NONE;
/**
* Getter for property onepixel.
* @return Value of property onepixel.
*/
public String getOnepixel() {
return this.onepixel;
}
/**
* Setter for property onepixel.
* @param onepixel New value of property onepixel.
*/
public void setOnepixel(String onepixel) {
this.onepixel = onepixel;
}
/**
* Holds value of property mailingID.
*/
protected int mailingID;
/**
* Getter for property mailingID.
* @return Value of property mailingID.
*/
public int getMailingID() {
return this.mailingID;
}
/**
* Setter for property mailingID.
* @param mailingID New value of property mailingID.
*/
public void setMailingID(int mailingID) {
this.mailingID = mailingID;
}
/**
* Holds value of property onepixel.
*/
protected String htmlTemplate;
/**
* Getter for property onepixel.
* @return Value of property onepixel.
*/
public String getHtmlTemplate() {
return htmlTemplate;
}
/**
* Setter for property onepixel.
* @param onepixel New value of property onepixel.
*/
public void setHtmlTemplate(String htmlTemplate) {
this.htmlTemplate = htmlTemplate;
}
public void syncTemplate(Mailing mailing, ApplicationContext con) {
MailingComponent component;
component=mailing.getTextTemplate();
if(component!=null) {
component.setEmmBlock(template);
// component.setBinaryBlock(template.getBytes());
}
component=mailing.getHtmlTemplate();
if(component!=null) {
component.setEmmBlock(htmlTemplate);
// component.setBinaryBlock(htmlTemplate.getBytes());
}
}
}