Package org.pentaho.platform.plugin.services.email

Source Code of org.pentaho.platform.plugin.services.email.EmailConfigurationXml

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.plugin.services.email;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.pentaho.platform.api.email.IEmailConfiguration;
import org.pentaho.platform.api.util.XmlParseException;
import org.pentaho.platform.config.DtdEntityResolver;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.plugin.services.messages.Messages;
import org.pentaho.platform.util.xml.dom4j.XmlDom4JHelper;

import javax.xml.bind.annotation.XmlRootElement;
import java.io.File;
import java.io.IOException;

@XmlRootElement
public class EmailConfigurationXml extends EmailConfiguration {

  private static final long serialVersionUID = -3938443547757985845L;

  private static final String ROOT_ELEMENT = "email-smtp"; //$NON-NLS-1$
  private static final String PASSWORD_XPATH = ROOT_ELEMENT + "/mail.password"; //$NON-NLS-1$
  private static final String AUTHENTICATE_XPATH = ROOT_ELEMENT + "/properties/mail.smtp.auth"; //$NON-NLS-1$
  private static final String DEBUG_XPATH = ROOT_ELEMENT + "/properties/mail.debug"; //$NON-NLS-1$
  private static final String DEFAULT_FROM_XPATH = ROOT_ELEMENT + "/mail.from.default"; //$NON-NLS-1$
  private static final String FROM_NAME_XPATH = ROOT_ELEMENT + "/mail.from.name"; //$NON-NLS-1$
  private static final String SMTP_HOST_XPATH = ROOT_ELEMENT + "/properties/mail.smtp.host"; //$NON-NLS-1$
  private static final String SMTP_PORT_XPATH = ROOT_ELEMENT + "/properties/mail.smtp.port"; //$NON-NLS-1$
  private static final String SMTP_PROTOCOL_XPATH = ROOT_ELEMENT + "/properties/mail.transport.protocol"; //$NON-NLS-1$
  private static final String SMTP_QUIT_WAIT_XPATH = ROOT_ELEMENT + "/properties/mail.smtp.quitwait"; //$NON-NLS-1$
  private static final String USER_ID_XPATH = ROOT_ELEMENT + "/mail.userid"; //$NON-NLS-1$
  private static final String USE_SSL_XPATH = ROOT_ELEMENT + "/properties/mail.smtp.ssl"; //$NON-NLS-1$
  private static final String USE_START_TLS_XPATH = ROOT_ELEMENT + "/properties/mail.smtp.starttls.enable"; //$NON-NLS-1$
  private static final Integer MIN_PORT_NUMBER = 0;
  private static final Integer MAX_PORT_NUMBER = 65535;

  private static final Log logger = LogFactory.getLog( EmailConfigurationXml.class );
  private static final Messages messages = Messages.getInstance();

  private static final String DEFAULT_EMAIL_CONFIG_PATH = "system" + File.separator + "smtp-email" + File.separator
      + "email_config.xml";

  public EmailConfigurationXml() throws Exception {
    this( new File( PentahoSystem.getApplicationContext().getSolutionPath( DEFAULT_EMAIL_CONFIG_PATH ) ) );
  }

  public EmailConfigurationXml( File pentahoXmlFile ) throws IOException, DocumentException {
    if ( null == pentahoXmlFile ) {
      throw new IllegalArgumentException();
    }
    loadFromConfigurationDocument( XmlDom4JHelper.getDocFromFile( pentahoXmlFile, new DtdEntityResolver() ) );
  }

  public EmailConfigurationXml( String xml ) throws DocumentException, XmlParseException {
    if ( null == xml ) {
      throw new IllegalArgumentException();
    }
    loadFromConfigurationDocument( XmlDom4JHelper.getDocFromString( xml, new DtdEntityResolver() ) );
  }

  /**
   * Protected empty constructor for testing and subclasses
   */
  protected EmailConfigurationXml( final Document doc ) throws DocumentException {
    if ( doc == null ) {
      throw new IllegalArgumentException();
    }
    loadFromConfigurationDocument( doc );
  }

  private void loadFromConfigurationDocument( final Document doc ) throws DocumentException {
    final Element rootElement = doc.getRootElement();
    if ( ( rootElement != null ) && !doc.getRootElement().getName().equals( ROOT_ELEMENT ) ) {
      throw new DocumentException( messages.getErrorString( "EmailConfigurationXml.ERROR_0002_INVALID_ROOT_ELEMENT" ) ); //$NON-NLS-1$
    }

    setSmtpHost( getStringValue( doc, SMTP_HOST_XPATH ) );
    setSmtpPort( getIntegerPortValue( doc, SMTP_PORT_XPATH ) );
    setSmtpProtocol( getStringValue( doc, SMTP_PROTOCOL_XPATH ) );
    setUseStartTls( getBooleanValue( doc, USE_START_TLS_XPATH ) );
    setAuthenticate( getBooleanValue( doc, AUTHENTICATE_XPATH ) );
    setUseSsl( getBooleanValue( doc, USE_SSL_XPATH ) );
    setDebug( getBooleanValue( doc, DEBUG_XPATH ) );
    setSmtpQuitWait( getBooleanValue( doc, SMTP_QUIT_WAIT_XPATH ) );

    setDefaultFrom( getStringValue( doc, DEFAULT_FROM_XPATH ) );
    setFromName( getStringValue( doc, FROM_NAME_XPATH ) );
    setUserId( getStringValue( doc, USER_ID_XPATH ) );
    setPassword( getStringValue( doc, PASSWORD_XPATH ) );
  }

  private static String getStringValue( final Document doc, final String xpath ) {
    try {
      final Element element = (Element) doc.selectSingleNode( xpath );
      return element != null ? element.getText() : null;
    } catch ( Exception e ) {
      logger.error( messages.getErrorString( "EmailConfigurationXml.ERROR_0001_ERROR_PARSING_DATA", e
          .getLocalizedMessage() ) );
    }
    return null;
  }

  private static Integer getIntegerPortValue( final Document doc, final String xpath ) {
    try {
      final Element element = (Element) doc.selectSingleNode( xpath );
      Integer value = Integer.MIN_VALUE;
      if ( element != null && !StringUtils.isEmpty( element.getText() ) ) {
        value = Integer.parseInt( element.getText() );
      }
      if ( value >= MIN_PORT_NUMBER && value <= MAX_PORT_NUMBER ) {
        return value;
      }
    } catch ( Exception e ) {
      logger.error( messages.getErrorString( "EmailConfigurationXml.ERROR_0001_ERROR_PARSING_DATA", e
          .getLocalizedMessage() ) );
    }
    return Integer.MIN_VALUE;
  }

  private static boolean getBooleanValue( final Document doc, final String xpath ) {
    try {
      final Element element = (Element) doc.selectSingleNode( xpath );
      return element != null && Boolean.parseBoolean( element.getText() );
    } catch ( Exception e ) {
      logger.error( messages.getErrorString( "EmailConfigurationXml.ERROR_0001_ERROR_PARSING_DATA", e
          .getLocalizedMessage() ) );
    }
    return false;
  }

  private static void setValue( final Document doc, final String xPath, final String value ) {
    Element element = (Element) doc.selectSingleNode( xPath );
    if ( null == element ) {
      element = DocumentHelper.makeElement( doc, xPath );
    }
    element.setText( value );
  }

  public Document getDocument() {
    return EmailConfigurationXml.getDocument( this );
  }

  public static Document getDocument( final IEmailConfiguration emailConfiguration ) {
    final Document document = DocumentHelper.createDocument();
    document.addElement( ROOT_ELEMENT );
    setValue( document, SMTP_HOST_XPATH, ObjectUtils.toString( emailConfiguration.getSmtpHost() ) );
    setValue( document, SMTP_PORT_XPATH, ObjectUtils.toString( emailConfiguration.getSmtpPort() ) );
    setValue( document, SMTP_PROTOCOL_XPATH, ObjectUtils.toString( emailConfiguration.getSmtpProtocol() ) );
    setValue( document, USE_START_TLS_XPATH, ObjectUtils.toString( emailConfiguration.isUseStartTls(), Boolean.FALSE
        .toString() ) );
    setValue( document, AUTHENTICATE_XPATH, ObjectUtils.toString( emailConfiguration.isAuthenticate(), Boolean.FALSE
        .toString() ) );
    setValue( document, USE_SSL_XPATH, ObjectUtils.toString( emailConfiguration.isUseSsl(),
      Boolean.FALSE.toString() ) );
    setValue( document, DEBUG_XPATH, ObjectUtils.toString( emailConfiguration.isDebug(), Boolean.FALSE.toString() ) );
    setValue( document, SMTP_QUIT_WAIT_XPATH, ObjectUtils.toString( emailConfiguration.isSmtpQuitWait(), Boolean.FALSE
        .toString() ) );

    setValue( document, DEFAULT_FROM_XPATH, ObjectUtils.toString( emailConfiguration.getDefaultFrom() ) );
    setValue( document, FROM_NAME_XPATH, ObjectUtils.toString( emailConfiguration.getFromName() ) );
    setValue( document, USER_ID_XPATH, ObjectUtils.toString( emailConfiguration.getUserId() ) );
    setValue( document, PASSWORD_XPATH, ObjectUtils.toString( emailConfiguration.getPassword() ) );
    return document;
  }
}
TOP

Related Classes of org.pentaho.platform.plugin.services.email.EmailConfigurationXml

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.