Package com.uphea.rss

Source Code of com.uphea.rss.FeedWriter

package com.uphea.rss;

import jodd.util.StringPool;

import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import java.io.OutputStream;
import java.io.Writer;

import static jodd.util.StringPool.EMPTY;

/**
* Feed writer using STAX.
*/
public class FeedWriter {

  private Feed rssfeed;

  public FeedWriter(Feed rssfeed) {
    this.rssfeed = rssfeed;
  }

  /**
   * Writes feed to output stream.
   */
  public void write(OutputStream out) throws XMLStreamException {
    XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
    XMLEventWriter writer = outputFactory.createXMLEventWriter(out);
    write(writer);
  }

  /**
   * Writes feed to writer.
   */
  public void write(Writer out) throws XMLStreamException {
    XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
    XMLEventWriter writer = outputFactory.createXMLEventWriter(out);
    write(writer);
  }

  /**
   * Writes feed.
   */
  protected void write(XMLEventWriter writer) throws XMLStreamException {
    XMLEventFactory eventFactory = XMLEventFactory.newInstance();
    XMLEvent end = eventFactory.createDTD(StringPool.NEWLINE);

    StartDocument startDocument = eventFactory.createStartDocument();
    writer.add(startDocument);
    writer.add(end);

    StartElement rssStart = eventFactory.createStartElement(EMPTY, EMPTY, "rss");
    writer.add(rssStart);
    writer.add(eventFactory.createAttribute("version", "2.0"));
    writer.add(end);

    writer.add(eventFactory.createStartElement(EMPTY, EMPTY, "channel"));
    writer.add(end);

    if (rssfeed.getPubDate() != null) {
      createNode(writer, "pubDate", rssfeed.getPubDate());
    }
    if (rssfeed.getTitle() != null) {
      createNode(writer, "title", rssfeed.getTitle());
    }
    if (rssfeed.getDescription() != null) {
      createNode(writer, "description", rssfeed.getDescription());
    }
    if (rssfeed.getLink() != null) {
      createNode(writer, "link", rssfeed.getLink());
    }
    if (rssfeed.getLanguage() != null) {
      createNode(writer, "language", rssfeed.getLanguage());
    }
    if (rssfeed.getCopyright() != null) {
      createNode(writer, "copyright", rssfeed.getCopyright());
    }
    for (FeedEntry entry : rssfeed.getEntries()) {
      writer.add(eventFactory.createStartElement(EMPTY, EMPTY, "item"));
      writer.add(end);
      if (entry.getTitle() != null) {
        createNode(writer, "title", entry.getTitle());
      }
      if (entry.getDescription() != null) {
        createNode(writer, "description", entry.getDescription());
      }
      if (rssfeed.getPubDate() != null) {
        createNode(writer, "pubDate", entry.getPubDate());
      }
      if (entry.getLink() != null) {
        createNode(writer, "link", entry.getLink());
      }
      if (entry.getAuthor() != null) {
        createNode(writer, "author", entry.getAuthor());
      }
      if (entry.getGuid() != null) {
        createNode(writer, "guid", entry.getGuid());
      }
      writer.add(end);
      writer.add(eventFactory.createEndElement(EMPTY, EMPTY, "item"));
      writer.add(end);

    }

    writer.add(end);
    writer.add(eventFactory.createEndElement(EMPTY, EMPTY, "channel"));
    writer.add(end);
    writer.add(eventFactory.createEndElement(EMPTY, EMPTY, "rss"));
    writer.add(end);
    writer.add(eventFactory.createEndDocument());

    writer.close();
  }

  protected void createNode(XMLEventWriter eventWriter, String name, String value) throws XMLStreamException {
    XMLEventFactory eventFactory = XMLEventFactory.newInstance();
    XMLEvent end = eventFactory.createDTD(StringPool.NEWLINE);
    XMLEvent tab = eventFactory.createDTD(StringPool.TAB);

    StartElement startNode = eventFactory.createStartElement(EMPTY, EMPTY, name);
    eventWriter.add(tab);
    eventWriter.add(startNode);

    Characters content = eventFactory.createCharacters(value);
    eventWriter.add(content);

    EndElement endNode = eventFactory.createEndElement(EMPTY, EMPTY, name);
    eventWriter.add(endNode);
    eventWriter.add(end);
  }
}
TOP

Related Classes of com.uphea.rss.FeedWriter

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.