/**
* Copyright 2007-2010 非也
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License v3 as published by the Free Software
* Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this library; if not, see http://www.gnu.org/licenses/lgpl.html.
*
*/
package org.fireflow.service.email.send;
import org.apache.commons.lang.StringUtils;
import org.fireflow.model.io.DeserializerException;
import org.fireflow.model.io.SerializerException;
import org.fireflow.model.io.Util4Deserializer;
import org.fireflow.model.io.Util4Serializer;
import org.fireflow.model.io.service.ServiceParser;
import org.fireflow.model.servicedef.ServiceDef;
import org.fireflow.service.email.MailTemplate;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
*
* @author 非也 nychen2000@163.com
* Fire Workflow 官方网站:www.firesoa.com 或者 www.fireflow.org
*
*/
public class MailSendServiceParser extends ServiceParser {
//邮件模板字段
public static final String MAIL_TEMPLATE = "mail-template";
public static final String FROM = "email-from";
public static final String MAILTO_LIST = "mail-to-list";
public static final String CARBONCOPY_LIST = "carbon-copy-list";
public static final String SUBJECT = "subject";
public static final String EMAIL_BODY = "email-body";
public static final String BODY_IS_HTML = "body-is-html";
//链接字段
public static final String CONNECT_INFO = "connect-info";
public static final String SERVICE_NAME = "service.mailsend";
public static final String PROTOCOL = "protocol";
public static final String SERVER_URL = "server-url";
public static final String PORT = "port";
public static final String NEED_AUTH = "need-auth";
public static final String USER_NAME = "user-name";
public static final String PASSWORD = "password";
public static final String USE_SSL = "use-ssl";
public static final String CHARSET = "charset";
/* (non-Javadoc)
* @see org.fireflow.model.io.service.ServiceParser#deserializeService(org.w3c.dom.Element)
*/
@Override
public ServiceDef deserializeService(Element svcElem)
throws DeserializerException {
String localName_1 = svcElem.getLocalName();
String namespaceUri_1 = svcElem.getNamespaceURI();
if (!equalStrings(localName_1,SERVICE_NAME) ||
!equalStrings(namespaceUri_1,SERVICE_NS_URI)){
throw new DeserializerException("The element is not a java service, the element name is '"+localName_1+"'");
}
MailSendServiceDef mailSendServiceDef = new MailSendServiceDef();
this.loadCommonServiceAttribute(mailSendServiceDef, svcElem);
//邮件体信息
Element mailTemplateElem = Util4Deserializer.child(svcElem, this.MAIL_TEMPLATE);
if (mailTemplateElem!=null){
String from = Util4Deserializer.elementAsString(mailTemplateElem, FROM);
mailSendServiceDef.setFrom(from);
MailTemplate mailTemplate = new MailTemplate();
mailSendServiceDef.setMailTemplate(mailTemplate);
Element _childElm = Util4Deserializer.child(mailTemplateElem,MAILTO_LIST);
if (_childElm!=null){
Element expElem = Util4Deserializer.child(_childElm,EXPRESSION);
mailTemplate.setMailToList(this.createExpression(expElem));
}
_childElm = Util4Deserializer.child(mailTemplateElem,CARBONCOPY_LIST);
if (_childElm!=null){
Element expElem = Util4Deserializer.child(_childElm,EXPRESSION);
mailTemplate.setCarbonCopyList(this.createExpression(expElem));
}
_childElm = Util4Deserializer.child(mailTemplateElem,SUBJECT);
if (_childElm!=null){
Element expElem = Util4Deserializer.child(_childElm,EXPRESSION);
mailTemplate.setSubject(this.createExpression(expElem));
}
_childElm = Util4Deserializer.child(mailTemplateElem,EMAIL_BODY);
if (_childElm!=null){
Element expElem = Util4Deserializer.child(_childElm,EXPRESSION);
mailTemplate.setBody(this.createExpression(expElem));
}
_childElm = Util4Deserializer.child(mailTemplateElem,BODY_IS_HTML);
if (_childElm!=null){
Element expElem = Util4Deserializer.child(_childElm,EXPRESSION);
mailTemplate.setBodyIsHtml(this.createExpression(expElem));
}
}
//链接信息
Element connectInfoElem = Util4Deserializer.child(svcElem, CONNECT_INFO);
String protocol = Util4Deserializer.elementAsString(connectInfoElem, PROTOCOL);
if (!StringUtils.isEmpty(protocol)){
mailSendServiceDef.setProtocol(protocol);
}
String serverUrl = Util4Deserializer.elementAsString(connectInfoElem, SERVER_URL);
mailSendServiceDef.setSmtpServer(serverUrl);
String port = Util4Deserializer.elementAsString(connectInfoElem, PORT);
mailSendServiceDef.setSmtpPort(Integer.parseInt(port));
String needAuth = Util4Deserializer.elementAsString(connectInfoElem, NEED_AUTH);
mailSendServiceDef.setNeedAuth(Boolean.parseBoolean(needAuth));
String userName = Util4Deserializer.elementAsString(connectInfoElem, USER_NAME);
mailSendServiceDef.setUserName(userName);
String password = Util4Deserializer.elementAsString(connectInfoElem, PASSWORD);
mailSendServiceDef.setPassword(password);
String useSSL = Util4Deserializer.elementAsString(connectInfoElem, USE_SSL);
mailSendServiceDef.setUseSSL(Boolean.parseBoolean(useSSL));
String charset = Util4Deserializer.elementAsString(connectInfoElem, CHARSET);
mailSendServiceDef.setCharset(charset);
this.loadExtendedAttributes(mailSendServiceDef.getExtendedAttributes(), Util4Deserializer.child(svcElem, EXTENDED_ATTRIBUTES));
return mailSendServiceDef;
}
/* (non-Javadoc)
* @see org.fireflow.model.io.service.ServiceParser#serializeService(org.fireflow.model.servicedef.ServiceDef, org.w3c.dom.Element)
*/
@Override
public void serializeService(ServiceDef service, Element parentElement)
throws SerializerException {
if (!(service instanceof MailSendServiceDef)){
return ;
}
MailSendServiceDef mailSendServiceDef = (MailSendServiceDef)service;
Document document = parentElement.getOwnerDocument();
Element svcElem = document.createElementNS(SERVICE_NS_URI,SERVICE_NS_PREFIX+":"+SERVICE_NAME );
parentElement.appendChild(svcElem);
this.writeCommonServiceAttribute(mailSendServiceDef, svcElem);
//邮件体信息
Element mailTemplateElement = Util4Serializer.addElement(svcElem, MAIL_TEMPLATE);
Util4Serializer.addElement(mailTemplateElement, FROM,mailSendServiceDef.getFrom());
if (mailSendServiceDef.getMailTemplate()!=null){
MailTemplate template = mailSendServiceDef.getMailTemplate();
if (template.getMailToList()!=null){
Element _elem = Util4Serializer.addElement(mailTemplateElement, MAILTO_LIST);
this.writeExpression(template.getMailToList(), _elem);
}
if (template.getCarbonCopyList()!=null){
Element _elem = Util4Serializer.addElement(mailTemplateElement, CARBONCOPY_LIST);
this.writeExpression(template.getCarbonCopyList(), _elem);
}
if (template.getSubject()!=null){
Element _elem = Util4Serializer.addElement(mailTemplateElement, SUBJECT);
this.writeExpression(template.getSubject(), _elem);
}
if (template.getBody()!=null){
Element _elem = Util4Serializer.addElement(mailTemplateElement, EMAIL_BODY);
this.writeExpression(template.getBody(), _elem);
}
if (template.getBodyIsHtml()!=null){
Element _elem = Util4Serializer.addElement(mailTemplateElement, BODY_IS_HTML);
this.writeExpression(template.getBodyIsHtml(), _elem);
}
}
//链接信息
Element connectInfoElement = Util4Serializer.addElement(svcElem, CONNECT_INFO);
Util4Serializer.addElement(connectInfoElement, PROTOCOL,mailSendServiceDef.getProtocol());
Util4Serializer.addElement(connectInfoElement, SERVER_URL,mailSendServiceDef.getSmtpServer());
Util4Serializer.addElement(connectInfoElement, PORT, Integer.toString(mailSendServiceDef.getSmtpPort()));
Util4Serializer.addElement(connectInfoElement, NEED_AUTH, Boolean.toString(mailSendServiceDef.isNeedAuth()));
Util4Serializer.addElement(connectInfoElement, USER_NAME, mailSendServiceDef.getUserName());
Util4Serializer.addElement(connectInfoElement, PASSWORD, mailSendServiceDef.getPassword());
Util4Serializer.addElement(connectInfoElement, USE_SSL, Boolean.toString(mailSendServiceDef.isUseSSL()));
Util4Serializer.addElement(connectInfoElement, CHARSET, mailSendServiceDef.getCharset());
this.writeExtendedAttributes(mailSendServiceDef.getExtendedAttributes(), svcElem);
}
}