Package com.agiletec.plugins.jpcontentnotifier.aps.system.services.contentnotifier.parse

Source Code of com.agiletec.plugins.jpcontentnotifier.aps.system.services.contentnotifier.parse.ContentNotifierConfigDOM

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* 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.jpcontentnotifier.aps.system.services.contentnotifier.parse;

import java.io.StringReader;
import java.util.Date;

import org.jdom.CDATA;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.aps.util.DateConverter;



import com.agiletec.plugins.jpcontentnotifier.aps.system.services.contentnotifier.model.NotifierConfig;

/*
<notifierConfig>
  <scheduler active="true" onlyOwner="true" delayHours="24" start="13/01/2010 17:39" />
  <mail senderCode="CODE1" mailAttrName="eMail" html="false" >
    <subject><![CDATA[Oggetto della mail di notifica]]></subject>
    <header><![CDATA[Inizio Mail (testata)<br/>]]></header>
    <templateInsert><![CDATA[
<br />
INSERIMENTO NUOVO CONTENUTO
<br />
Contenuto tipo {type} - {descr}
<br />
Data Operazione {date} {time}
<br />
{link}
<br />
    ]]></templateInsert>
    <templateUpdate><![CDATA[
<br />
AGGIORNAMENTO CONTENUTO
<br />
Contenuto tipo {type} - {descr}
<br />
Data Operazione {date} {time}
<br />
<a href="{link}">Link</a>
<br />
    ]]></templateUpdate>

    <!-- Non obbligatorio -->
    <templateRemove><![CDATA[
<br />
Rimozione Contenuto tipo {type} - {descr} <br />
Data Operazione {date} {time}
<br />
    ]]></templateRemove>
    <footer><![CDATA[<br />Fine Mail (footer)]]></footer>
  </mail>
</notifierConfig>
*/
/**
*
* @author E.Santoboni
*
*
*/
public class ContentNotifierConfigDOM {

  /**
   * Extract the newsletter configuration from an xml.
   * @param xml The xml containing the configuration.
   * @return The newsletter configuration.
   * @throws ApsSystemException In case of parsing errors.
   */
  public NotifierConfig extractConfig(String xml) throws ApsSystemException {
    NotifierConfig config = new NotifierConfig();
    Element root = this.getRootElement(xml);
    this.extractScheduler(root, config);
    this.extractMailConfig(root, config);
    return config;
  }

  /**
   * Create an xml containing the newsletter configuration.
   * @param config The newsletter configuration.
   * @return The xml containing the configuration.
   * @throws ApsSystemException In case of errors.
   */
  public String createConfigXml(NotifierConfig config) throws ApsSystemException {
    Element root = this.createConfigElement(config);
    Document doc = new Document(root);
    String xml = new XMLOutputter().outputString(doc);
    return xml;
  }

  private void extractScheduler(Element root, NotifierConfig config) {
    Element schedulerElement = root.getChild(SCHEDULER_ELEM);

    String active = schedulerElement.getAttributeValue(SCHEDULER_ACTIVE_ATTR);
    config.setActive(active == null || active.equalsIgnoreCase("true"));

    String onlyOwner = schedulerElement.getAttributeValue(SCHEDULER_ONLYOWNER_ATTR);
    config.setOnlyOwner(onlyOwner != null && onlyOwner.equalsIgnoreCase("true"));

    String delayHours = schedulerElement.getAttributeValue(SCHEDULER_DELAYHOURS_ATTR);
    int hours = 1;
    if (delayHours != null && delayHours.length()>0) {
      hours = Integer.parseInt(delayHours);
    }
    config.setHoursDelay(hours);

    String start = schedulerElement.getAttributeValue(SCHEDULER_START_ATTR);
    if (start!=null && start.length()>0) {
      config.setStartScheduler(DateConverter.parseDate(start, SCHEDULER_STARTDATE_CONFIG_PATTERN));
    } else {
      config.setStartScheduler(new Date());
    }
  }

  /**
   * Estrae la parte di configurazione relativa alla mail.
   * @param root L'elemento radice contenente il sottoelemento relativo alle mail.
   * @param config La configurazione del servizio newsletter.
   */
  private void extractMailConfig(Element root, NotifierConfig config) {
    Element mailElem = root.getChild(MAIL_ELEM);

    String senderCode = mailElem.getAttributeValue(MAIL_SENDERCODE_ATTR);
    config.setSenderCode(senderCode);

    String mailAttrName = mailElem.getAttributeValue(MAIL_MAILATTRNAME_ATTR);
    config.setMailAttrName(mailAttrName);

    String html = mailElem.getAttributeValue(MAIL_HTML_ATTR);
    config.setHtml(html != null && "true".equalsIgnoreCase(html));

    config.setSubject(mailElem.getChildText(MAIL_SUBJECT_CHILD));

    config.setHeader(mailElem.getChildText(MAIL_HEADER_CHILD));
    config.setFooter(mailElem.getChildText(MAIL_FOOTER_CHILD));

    config.setTemplateInsert(mailElem.getChild(MAIL_TEMPLATE_INSERT_CHILD).getText());
    config.setTemplateUpdate(mailElem.getChild(MAIL_TEMPLATE_UPDATE_CHILD).getText());
    Element templateRemoveElem = mailElem.getChild(MAIL_TEMPLATE_REMOVE_CHILD);
    if (templateRemoveElem!=null && templateRemoveElem.getText().length()>0) {
      config.setTemplateRemove(templateRemoveElem.getText());
    }
  }

  /**
   * Crea l'elemento della configurazione del servizio di newsletter.
   * @param config La configurazione del servizio newsletter.
   * @return L'elemento della configurazione del servizio di newsletter.
   */
  private Element createConfigElement(NotifierConfig config) {
    Element configElem = new Element(ROOT);

    Element schedulerElem = this.createSchedulerElement(config);
    configElem.addContent(schedulerElem);

    Element mailElem = this.createMailElement(config);
    configElem.addContent(mailElem);

    return configElem;
  }

  private Element createSchedulerElement(NotifierConfig config) {
    Element schedulerElement = new Element(SCHEDULER_ELEM);
    schedulerElement.setAttribute(SCHEDULER_ACTIVE_ATTR, String.valueOf(config.isActive()));
    schedulerElement.setAttribute(SCHEDULER_ONLYOWNER_ATTR, String.valueOf(config.isOnlyOwner()));
    schedulerElement.setAttribute(SCHEDULER_DELAYHOURS_ATTR, String.valueOf(config.getHoursDelay()));
    schedulerElement.setAttribute(SCHEDULER_START_ATTR, DateConverter.getFormattedDate(config.getStartScheduler(), SCHEDULER_STARTDATE_CONFIG_PATTERN));
    return schedulerElement;
  }

  /**
   * Crea l'elemento della configurazione relativa alle mail.
   * @param config La configurazione del servizio newsletter.
   * @return L'elemento di configurazione relativo alle mail.
   */
  private Element createMailElement(NotifierConfig config) {
    Element mailElem = new Element(MAIL_ELEM);

    mailElem.setAttribute(MAIL_SENDERCODE_ATTR, config.getSenderCode());
    mailElem.setAttribute(MAIL_MAILATTRNAME_ATTR, config.getMailAttrName());
    mailElem.setAttribute(MAIL_HTML_ATTR, String.valueOf(config.isHtml()));

    Element subject = new Element(MAIL_SUBJECT_CHILD);
    subject.addContent(new CDATA(config.getSubject()));
    mailElem.addContent(subject);

    Element htmlHeader = new Element(MAIL_HEADER_CHILD);
    htmlHeader.addContent(new CDATA(config.getHeader()));
    mailElem.addContent(htmlHeader);

    Element htmlFooter = new Element(MAIL_FOOTER_CHILD);
    htmlFooter.addContent(new CDATA(config.getFooter()));
    mailElem.addContent(htmlFooter);

    Element templateInsert = new Element(MAIL_TEMPLATE_INSERT_CHILD);
    templateInsert.addContent(new CDATA(config.getTemplateInsert()));
    mailElem.addContent(templateInsert);

    Element templateUpdate = new Element(MAIL_TEMPLATE_UPDATE_CHILD);
    templateUpdate.addContent(new CDATA(config.getTemplateUpdate()));
    mailElem.addContent(templateUpdate);

    if (config.isNotifyRemove()) {
      Element templateRemove = new Element(MAIL_TEMPLATE_REMOVE_CHILD);
      templateRemove.addContent(new CDATA(config.getTemplateRemove()));
      mailElem.addContent(templateRemove);
    }

    return mailElem;
  }

  /**
   * 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 = "notifierConfig";

  private static final String SCHEDULER_ELEM = "scheduler";
  private static final String SCHEDULER_ACTIVE_ATTR = "active";
  private static final String SCHEDULER_ONLYOWNER_ATTR = "onlyOwner";
  private static final String SCHEDULER_DELAYHOURS_ATTR = "delayHours";
  private static final String SCHEDULER_START_ATTR = "start";

  private static final String MAIL_ELEM = "mail";
  private static final String MAIL_SENDERCODE_ATTR = "senderCode";
  private static final String MAIL_MAILATTRNAME_ATTR = "mailAttrName";
  private static final String MAIL_HTML_ATTR = "html";

  private static final String MAIL_SUBJECT_CHILD = "subject";
  private static final String MAIL_HEADER_CHILD = "header";
  private static final String MAIL_FOOTER_CHILD = "footer";
  private static final String MAIL_TEMPLATE_INSERT_CHILD = "templateInsert";
  private static final String MAIL_TEMPLATE_UPDATE_CHILD = "templateUpdate";
  private static final String MAIL_TEMPLATE_REMOVE_CHILD = "templateRemove";

  private static final String SCHEDULER_STARTDATE_CONFIG_PATTERN = "dd/MM/yyyy HH:mm";

}
TOP

Related Classes of com.agiletec.plugins.jpcontentnotifier.aps.system.services.contentnotifier.parse.ContentNotifierConfigDOM

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.