RSSHandler.java :  » Client » bankdroid » hu » androidportal » rss » Android Open Source

Android Open Source » Client » bankdroid 
bankdroid » hu » androidportal » rss » RSSHandler.java
package hu.androidportal.rss;

import java.text.ParseException;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

public class RSSHandler extends DefaultHandler
{
  //XML element names
  private static final String GUID = "guid";
  private static final String LINK = "link";
  private static final String ITEM = "item";
  private static final String TITLE = "title";
  private static final String CHANNEL = "channel";
  private static final String DESCRIPTION = "description";
  private static final String LANGUAGE = "language";
  private static final String PUBLISH_DATE = "pubDate";
  private static final String AUTHOR = "creator";

  // Feed and Article objects to use for temporary storage
  private RSSItem item = null;
  private RSSChannel channel = null;

  private final StringBuilder elementValue = new StringBuilder();

  private int maxId = -1;

  public RSSHandler( final int maxId )
  {
    this.maxId = maxId;
  }

  @Override
  public void startElement( final String uri, final String localName, final String qName, final Attributes atts )
  {
    String name = localName.trim();
    if ( name.equals("") )
      name = qName.trim();

    if ( name.trim().equals(ITEM) )
    {
      item = new RSSItem();
    }
    else if ( name.trim().equals(CHANNEL) )
    {
      channel = new RSSChannel();
    }

    elementValue.delete(0, elementValue.length());
  }

  @Override
  public void endElement( final String uri, final String localName, final String qName ) throws SAXException
  {
    String name = localName.trim();
    if ( name.equals("") )
      name = qName.trim();

    final RSSObject object = item != null ? item : channel;
    if ( object != null )
    {
      if ( name.equals(TITLE) )
      {
        object.title = elementValue.toString();
      }
      else if ( name.equals(LINK) )
      {
        object.link = elementValue.toString();
      }
      else if ( name.equals(DESCRIPTION) )
      {
        object.description = elementValue.toString();
      }
      else if ( name.equals(GUID) )
      {

        object.id = Long.parseLong(elementValue.substring(0, elementValue.indexOf(" ")));
      }
    }

    if ( item != null )
    {
      if ( name.equals(PUBLISH_DATE) )
      {
        try
        {
          item.publishDate = Formatters.getDefaultFormat().parse(elementValue.toString());
        }
        catch ( final ParseException e )
        {
          throw new SAXParseException("Failed to parse timestamp of RSS Item.", null, e);
        }
      }
      else if ( name.equals(AUTHOR) )
      {
        item.author = elementValue.toString();
      }
      else if ( name.equals(ITEM) )
      {
        //item ready
        if ( item.id > maxId )
        {
          channel.items.add(item);
          item.generateSummary();
        }

        item = null;
      }
    }
    else if ( channel != null )
    {
      if ( name.equals(LANGUAGE) )
      {
        channel.language = elementValue.toString();
      }
      else if ( name.equals(CHANNEL) )
      {
        //item ready, do nothing
      }
    }
  }

  @Override
  public void characters( final char[] ch, final int start, final int length )
  {
    elementValue.append(ch, start, length);
  }

  public RSSChannel getChannel()
  {
    return channel;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.