content: package allen.town.podcast.core.export.opml;
  
  import android.content.Context;
  import android.util.Log;
  import android.util.Xml;
  
  import allen.town.podcast.core.util.DateFormatter;
  import org.xmlpull.v1.XmlSerializer;
  
  import java.io.IOException;
  import java.io.Writer;
  import java.util.Date;
  import java.util.List;
  
  import allen.town.podcast.core.export.ExportWriter;
  import allen.town.podcast.model.feed.Feed;
  
  /** Writes OPML documents. */
  public class OpmlWriter implements ExportWriter {
  
      private static final String TAG = "OpmlWriter";
      private static final String ENCODING = "UTF-8";
      private static final String OPML_VERSION = "2.0";
      private static final String OPML_TITLE = "FocusPodcast Subscriptions";
  
      /**
       * Takes a list of feeds and a writer and writes those into an OPML
       * document.
       */
      @Override
      public void writeDocument(List<Feed> feeds, Writer writer, Context context)
              throws IllegalArgumentException, IllegalStateException, IOException {
          Log.d(TAG, "start writing document");
          XmlSerializer xs = Xml.newSerializer();
          xs.setFeature(OpmlSymbols.XML_FEATURE_INDENT_OUTPUT, true);
          xs.setOutput(writer);
  
          xs.startDocument(ENCODING, false);
          xs.startTag(null, OpmlSymbols.OPML);
          xs.attribute(null, OpmlSymbols.VERSION, OPML_VERSION);
  
          xs.startTag(null, OpmlSymbols.HEAD);
          xs.startTag(null, OpmlSymbols.TITLE);
          xs.text(OPML_TITLE);
          xs.endTag(null, OpmlSymbols.TITLE);
          xs.startTag(null, OpmlSymbols.DATE_CREATED);
          xs.text(DateFormatter.formatRfc822Date(new Date()));
          xs.endTag(null, OpmlSymbols.DATE_CREATED);
          xs.endTag(null, OpmlSymbols.HEAD);
  
          xs.startTag(null, OpmlSymbols.BODY);
          for (Feed feed : feeds) {
              xs.startTag(null, OpmlSymbols.OUTLINE);
              xs.attribute(null, OpmlSymbols.TEXT, feed.getTitle());
              xs.attribute(null, OpmlSymbols.TITLE, feed.getTitle());
              if (feed.getType() != null) {
                  xs.attribute(null, OpmlSymbols.TYPE, feed.getType());
              }
              xs.attribute(null, OpmlSymbols.XMLURL, feed.getDownload_url());
              if (feed.getLink() != null) {
                  xs.attribute(null, OpmlSymbols.HTMLURL, feed.getLink());
              }
              xs.endTag(null, OpmlSymbols.OUTLINE);
          }
          xs.endTag(null, OpmlSymbols.BODY);
          xs.endTag(null, OpmlSymbols.OPML);
          xs.endDocument();
          Log.d(TAG, "finish writing document");
      }
  
      public String fileExtension() {
          return "opml";
      }
  
  }
  