Android Open Source - RabbitEars Deserialization Helper






From Project

Back to project page RabbitEars.

License

The source code is released under:

MIT License

If you think the Android project RabbitEars listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.fbs.rabbitears.helpers;
//from  ww w.ja  v a2  s.  c o  m
import com.fbs.rabbitears.Config;
import com.fbs.rabbitears.R;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.stanfy.gsonxml.GsonXml;
import com.stanfy.gsonxml.GsonXmlBuilder;
import com.stanfy.gsonxml.XmlParserCreator;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * XML Deserialization Helpers
 */
public class DeserializationHelper
{
    private static final FeedParserCreator CREATOR;
    private static final GsonXml          GSON_XML;
    private static final DateDeserializer DATE_DESERIALIZER;

    /**
     * Static Initializers
     */
    static
    {
        DATE_DESERIALIZER = new DateDeserializer();
        CREATOR  = new FeedParserCreator();
        GSON_XML = new GsonXmlBuilder()
                .wrap(
                        new GsonBuilder()
                            .registerTypeAdapter(Date.class, DATE_DESERIALIZER)
                )
                .setSameNameLists(true)
                .setXmlParserCreator(CREATOR)
                .create();
    }

    /**
     * Get GSON XML deserializer
     * @return GsonXml for feed deserialization
     */
    public static GsonXml getGsonXml()
    {
        return GSON_XML;
    }

    /**
     * Parses date using a list of potential formats (see strings.xml)
     * @param str String date text
     * @return Date parsed from string or null
     */
    public static Date parseDate(String str)
    {
        String[] formats = Config.getResources().getStringArray(R.array.markup_date_formats);
        Date     date    = null;

        for (String format : formats)
        {
            try
            {
                date = new SimpleDateFormat(format)
                        .parse(str);
                break;
            }
            catch (Exception e)
            {
                e.getMessage();
            }
        }

        return date;
    }

    /**
     * Feed deserialization parser creator
     */
    static class FeedParserCreator
            implements XmlParserCreator
    {
        @Override
        public XmlPullParser createParser()
        {
            try
            {
                return XmlPullParserFactory.newInstance().newPullParser();
            }
            catch (Exception e)
            {
                throw new RuntimeException(e);
            }
        }
    }

    /**
     * Custom date deserializer
     */
    static class DateDeserializer
            implements JsonDeserializer<Date>
    {
        @Override
        public Date deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
                throws JsonParseException
        {
            return parseDate(json.getAsString());
        }
    }
}




Java Source Code List

com.fbs.rabbitears.ApplicationTest.java
com.fbs.rabbitears.Config.java
com.fbs.rabbitears.RabbitEars.java
com.fbs.rabbitears.activities.BaseActivity.java
com.fbs.rabbitears.activities.FeedLister.java
com.fbs.rabbitears.activities.ItemLister.java
com.fbs.rabbitears.activities.ItemStreamer.java
com.fbs.rabbitears.activities.ItemViewer.java
com.fbs.rabbitears.activities.Settings.java
com.fbs.rabbitears.adapters.FeedArrayAdapter.java
com.fbs.rabbitears.adapters.FeedItemArrayAdapter.java
com.fbs.rabbitears.contracts.feed.Author.java
com.fbs.rabbitears.contracts.feed.Content.java
com.fbs.rabbitears.contracts.feed.Entry.java
com.fbs.rabbitears.contracts.feed.Feed.java
com.fbs.rabbitears.contracts.feed.Link.java
com.fbs.rabbitears.contracts.rss.Category.java
com.fbs.rabbitears.contracts.rss.Channel.java
com.fbs.rabbitears.contracts.rss.Enclosure.java
com.fbs.rabbitears.contracts.rss.Guid.java
com.fbs.rabbitears.contracts.rss.Image.java
com.fbs.rabbitears.contracts.rss.Item.java
com.fbs.rabbitears.contracts.rss.Rss.java
com.fbs.rabbitears.events.Event.java
com.fbs.rabbitears.events.FeedDownloadEvent.java
com.fbs.rabbitears.events.ItemProcessEvent.java
com.fbs.rabbitears.fragments.AddFeedDialog.java
com.fbs.rabbitears.fragments.BaseDialogFragment.java
com.fbs.rabbitears.helpers.DeserializationHelper.java
com.fbs.rabbitears.helpers.FileHelper.java
com.fbs.rabbitears.helpers.ModelHelper.java
com.fbs.rabbitears.helpers.ViewHelper.java
com.fbs.rabbitears.models.FeedItem.java
com.fbs.rabbitears.models.Feed.java
com.fbs.rabbitears.models.ItemMedia.java
com.fbs.rabbitears.tasks.DownloadFeedImageTask.java
com.fbs.rabbitears.tasks.DownloadFeedTask.java
com.fbs.rabbitears.tasks.ProcessFeedItemsTask.java
com.fbs.rabbitears.utils.RssParser.java
com.fbs.rabbitears.utils.Size.java
com.fbs.rabbitears.views.MediaStreamer.java