Package com.agiletec.plugins.jpwtt.aps.system.services.ticket.alerter.mail.parse

Source Code of com.agiletec.plugins.jpwtt.aps.system.services.ticket.alerter.mail.parse.WttMailConfigDOM

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando Enterprise Edition software.
* You can redistribute it and/or modify it
* under the terms of the Entando's EULA
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpwtt.aps.system.services.ticket.alerter.mail.parse;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.plugins.jpwtt.aps.system.services.ticket.alerter.mail.model.MailTemplate;
import com.agiletec.plugins.jpwtt.aps.system.services.ticket.alerter.mail.model.WttMailConfig;

/*
<wttMailConfig>
  <mail uniqueMail="true" senderCode="CODE1" mailAttrName="email" >
    <subject>Wtt Alert</subject>
    <templates>
      <template operation="0" descr="OPEN">
        <body type="admin"><![CDATA[Op0: Oggetto della mail admin]]></body>
        <body type="user"><![CDATA[Op0: Oggetto della mail user]]></body>
      </template>
      <template operation="1" descr="SETASSIGNABLE">
        <body type="admin"><![CDATA[Op1: Oggetto della mail admin]]></body>
        <body type="operator"><![CDATA[Op1: Oggetto della mail operator]]></body>
      </template>
      <template operation="2" descr="TAKEINCHARGE">
        <body type="admin"><![CDATA[Op2: Oggetto della mail admin]]></body>
        <body type="operator"><![CDATA[Op2: Oggetto della mail operator]]></body>
      </template>
      <template operation="3" descr="ANSWER">
        <body type="admin"><![CDATA[Op3: Oggetto della mail admin]]></body>
        <body type="user"><![CDATA[Op3: Oggetto della mail user]]></body>
        <body type="operator"><![CDATA[Op3: Oggetto della mail operator]]></body>
      </template>
      <template operation="4" descr="DISPATCH">
        <body type="admin"><![CDATA[Op4: Oggetto della mail admin]]></body>
        <body type="operator"><![CDATA[Op4: Oggetto della mail operator]]></body>
      </template>
      <template operation="5" descr="CLOSE">
        <body type="admin"><![CDATA[Op5: Oggetto della mail admin]]></body>
        <body type="user"><![CDATA[Op5: Oggetto della mail user]]></body>
        <body type="operator"><![CDATA[Op5: Oggetto della mail operator]]></body>
      </template>
      <template operation="6" descr="REOPEN">
        <body type="admin"><![CDATA[Op6: Oggetto della mail admin]]></body>
        <body type="user"><![CDATA[Op6: Oggetto della mail user]]></body>
        <body type="operator"><![CDATA[Op6: Oggetto della mail operator]]></body>
      </template>
    </templates>
  </mail>
  <commonAddresses>
    <admin>
      <!-- PUO ESSERE VUOTO -->
      <address>pippo@agiletec.it</address>
      <address>pluto@agiletec.it</address>
      .....
    </admin>
    <operator>
      <!-- PUO ESSERE VUOTO -->
      <address>topolino@agiletec.it</address>
      <address>minnie@agiletec.it</address>
      .....
    </operator>
  </commonAddresses>
  <interventionTypes>
    <interventionType id="1" >
      <admin>
        <!-- PUO ESSERE VUOTO -->
        <address>paperino@agiletec.it</address>
        <address>paperina@agiletec.it</address>
        .....
      </admin>
      <operator>
        <!-- PUO ESSERE VUOTO -->
        <address>qui@agiletec.it</address>
        <address>quo@agiletec.it</address>
        <address>qua@agiletec.it</address>
        .....
      </operator>
    </interventionType>
    <interventionType id="2">
    </interventionType>
  </interventionTypes>
</wttMailConfig>
*/

/**
* Classe dom delegata alla lettura della configurazione del servizio di web trouble ticketing.
* @version 1.0
* @author E.Mezzano
*/
public class WttMailConfigDOM {
 
  /**
   * Extract the wtt configuration from an xml.
   * @param xml The xml containing the configuration.
   * @return The wtt configuration.
   * @throws ApsSystemException In case of parsing errors.
   */
  public WttMailConfig extractConfig(String xml) throws ApsSystemException {
    WttMailConfig config = new WttMailConfig();
    Element root = this.getRootElement(xml);
    this.extractMailConfig(root, config);
    return config;
  }
 
  private WttMailConfig extractMailConfig(Element root, WttMailConfig config) {
    Element mailElem = root.getChild(MAIL_ELEM);
    this.parseMailElement(mailElem, config);
   
    Element addressesElem = root.getChild(COMMON_ADDRESSES_ELEM);
    this.parseCommonAddressesElement(addressesElem, config);
   
    Element interventionTypesElement = root.getChild(INTERVENTION_TYPES_ELEM);
    this.parseInterventionTypesElement(interventionTypesElement, config);
   
    return config;
  }
 
  private void parseMailElement(Element mailElem, WttMailConfig config) {
    String uniqueMail = mailElem.getAttributeValue(MAIL_UNIQUEMAIL_ATTR);
    config.setUniqueMail("true".equalsIgnoreCase(uniqueMail));
   
    String senderCode = mailElem.getAttributeValue(MAIL_SENDERCODE_ATTR);
    config.setSenderCode(senderCode);
   
    String mailAttrName = mailElem.getAttributeValue(MAIL_MAILATTRNAME_ATTR);
    config.setMailAttrName(mailAttrName);
   
    config.setSubject(mailElem.getChildText(MAIL_SUBJECT_CHILD));
   
    Element templatesElem = mailElem.getChild(MAIL_TEMPLATES_CHILD);
    List<Element> templates = templatesElem.getChildren(MAIL_TEMPLATE_CHILD);
    for (Element templateElem : templates) {
      MailTemplate template = new MailTemplate();
      String operationString = templateElem.getAttributeValue(MAIL_TEMPLATE_OPERATION_ATTR);
      Integer operation = Integer.valueOf(operationString);
      template.setOperation(operationString);
      List<Element> bodyElements = templateElem.getChildren(MAIL_TEMPLATE_BODY_CHILD);
      for (Element bodyElement : bodyElements) {
        String type = bodyElement.getAttributeValue(MAIL_TEMPLATE_BODY_TYPE_ATTR);
        String body = bodyElement.getText();
        template.addTemplateBody(type, body);
      }
      config.addTemplate(operation, template);
    }
  }
 
  private void parseCommonAddressesElement(Element addressesElem, WttMailConfig config) {
    Element adminElement = addressesElem.getChild(ADMIN_ADDRESSES_CHILD);
    if (adminElement!=null) {
      config.setCommonAdminAddresses(this.extractMailAddresses(adminElement));
    }
    Element operatorElement = addressesElem.getChild(OPERATOR_ADDRESSES_CHILD);
    if (operatorElement!=null) {
      config.setCommonOperatorAddresses(this.extractMailAddresses(operatorElement));
    }
  }
 
  private void parseInterventionTypesElement(Element interventionTypesElem, WttMailConfig config) {
    List<Element> interventionTypeElements = interventionTypesElem.getChildren(INTERVENTION_TYPE_CHILD);
    for (Element interventionTypeElem : interventionTypeElements) {
      Integer id = new Integer(interventionTypeElem.getAttributeValue(INTERVENTION_TYPE_ID_ATTR));
      Element adminElement = interventionTypeElem.getChild(ADMIN_ADDRESSES_CHILD);
      if (adminElement!=null) {
        config.addIntervTypeAdminAddresses(id, this.extractMailAddresses(adminElement));
      }
      Element operatorElement = interventionTypeElem.getChild(OPERATOR_ADDRESSES_CHILD);
      if (operatorElement!=null) {
        config.addIntervTypeOperatorAddresses(id, this.extractMailAddresses(operatorElement));
      }
    }
  }
 
  private List<String> extractMailAddresses(Element addressesElem) {
    List<String> destAddresses = new ArrayList<String>();
    if (addressesElem!=null) {
      List<Element> addressesElements = addressesElem.getChildren(ADDRESSES_ADDRESS_CHILD);
      if (addressesElements!=null) {
        for (Element addressElem : addressesElements) {
          String mailAddress = addressElem.getText();
          destAddresses.add(mailAddress);
        }
      }
    }
    return destAddresses;
  }
 
  /**
   * Returns the Xml element from a given text.
   * @param xmlText The text containing an Xml.
   * @return The Xml element from a given text.
   * @throws ApsSystemException In case of parsing exceptions.
   */
  private Element getRootElement(String xmlText) throws ApsSystemException {
    SAXBuilder builder = new SAXBuilder();
    builder.setValidation(false);
    StringReader reader = new StringReader(xmlText);
    Element root = null;
    try {
      Document doc = builder.build(reader);
      root = doc.getRootElement();
    } catch (Throwable t) {
      ApsSystemUtils.getLogger().error("Error parsing xml: " + t.getMessage());
      throw new ApsSystemException("Error parsing xml", t);
    }
    return root;
  }
 
  private static final String ROOT = "wttMailConfig";
 
  private static final String MAIL_ELEM = "mail";
  private static final String MAIL_UNIQUEMAIL_ATTR = "uniqueMail";
  private static final String MAIL_SENDERCODE_ATTR = "senderCode";
  private static final String MAIL_MAILATTRNAME_ATTR = "mailAttrName";
  private static final String MAIL_SUBJECT_CHILD = "subject";
  private static final String MAIL_TEMPLATES_CHILD = "templates";
  private static final String MAIL_TEMPLATE_CHILD = "template";
  private static final String MAIL_TEMPLATE_OPERATION_ATTR = "operation";
  private static final String MAIL_TEMPLATE_BODY_CHILD = "body";
  private static final String MAIL_TEMPLATE_BODY_TYPE_ATTR = "type";
 
  private static final String COMMON_ADDRESSES_ELEM = "commonAddresses";
  private static final String ADMIN_ADDRESSES_CHILD = "admin";
  private static final String OPERATOR_ADDRESSES_CHILD = "operator";
 
  private static final String INTERVENTION_TYPES_ELEM = "interventionTypes";
  private static final String INTERVENTION_TYPE_CHILD = "interventionType";
  private static final String INTERVENTION_TYPE_ID_ATTR = "id";
 
  private static final String ADDRESSES_ADDRESS_CHILD = "address";
 
}
TOP

Related Classes of com.agiletec.plugins.jpwtt.aps.system.services.ticket.alerter.mail.parse.WttMailConfigDOM

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.