com.neuron.trafikanten.dataProviders.trafikanten.TrafikantenDevi.java Source code

Java tutorial

Introduction

Here is the source code for com.neuron.trafikanten.dataProviders.trafikanten.TrafikantenDevi.java

Source

/**
 *     Copyright (C) 2009 Anders Aagaard <aagaande@gmail.com>
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * Trafikanten's api is under trafikanten's control and may not be used 
 * without written permission from trafikanten.no.
 * 
 * See Developer.README
 */

package com.neuron.trafikanten.dataProviders.trafikanten;

import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.apache.http.client.methods.HttpGet;
import org.json.JSONArray;
import org.json.JSONObject;

import android.content.Context;
import android.util.Log;

import com.neuron.trafikanten.HelperFunctions;
import com.neuron.trafikanten.dataProviders.GenericDataProviderThread;
import com.neuron.trafikanten.dataProviders.IGenericProviderHandler;
import com.neuron.trafikanten.dataSets.DeviData;

public class TrafikantenDevi extends GenericDataProviderThread<DeviData> {
    private static final String TAG = "Trafikanten-T-DeviThread";
    private Context context;
    private final int stationId;
    private final String lines;
    private final static SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd");

    public TrafikantenDevi(Context context, int stationId, String lines,
            IGenericProviderHandler<DeviData> handler) {
        super();
        this.context = context;
        this.stationId = stationId;
        this.lines = lines;
        start(handler);
    }

    @Override
    public void run() {
        try {
            //String urlString = "http://devi.trafikanten.no/devirest.svc/json/linenames/";
            String urlString = "http://devi.trafikanten.no/devirest.svc/json/lineids/";
            if (lines.length() > 0) {
                urlString = urlString + URLEncoder.encode(lines, "UTF-8");
            } else {
                urlString = urlString + "null";
            }
            urlString = urlString + "/stopids/" + stationId + "/";
            urlString = urlString + "from/" + dateFormater.format(System.currentTimeMillis()) + "/to/2030-12-31";
            Log.i(TAG, "Loading devi data : " + urlString);

            final InputStream stream = HelperFunctions.executeHttpRequest(context, new HttpGet(urlString),
                    false).stream;

            /*
             * Parse json
             */
            final JSONArray jsonArray = new JSONArray(HelperFunctions.InputStreamToString(stream));
            final int arraySize = jsonArray.length();
            for (int i = 0; i < arraySize; i++) {
                final JSONObject json = jsonArray.getJSONObject(i);
                DeviData deviData = new DeviData();

                {
                    /*
                     * Grab validFrom and check if we should show it or not.
                     */
                    deviData.validFrom = HelperFunctions.jsonToDate(json.getString("validFrom"));
                    final long dateDiffHours = (deviData.validFrom - Calendar.getInstance().getTimeInMillis())
                            / HelperFunctions.HOUR;
                    if (dateDiffHours > 3) {
                        /*
                         * This data starts more than 3 hours into the future, hide it.
                         */
                        continue;
                    }
                }
                {
                    /*
                     * Grab published, and see if this should be visible yet.
                     */
                    final long publishDate = HelperFunctions.jsonToDate(json.getString("published"));
                    if (System.currentTimeMillis() < publishDate) {
                        continue;
                    }
                }
                {
                    /*
                     * Check validto, and see if this should be visible yet.
                     */
                    final long validToDate = HelperFunctions.jsonToDate(json.getString("validTo"));
                    if (System.currentTimeMillis() > validToDate) {
                        continue;
                    }
                }

                /*
                 * Grab the easy data
                 */
                deviData.title = json.getString("header");
                deviData.description = json.getString("lead");
                deviData.body = json.getString("body");
                deviData.validTo = HelperFunctions.jsonToDate(json.getString("validTo"));
                deviData.important = json.getBoolean("important");
                deviData.id = json.getInt("id");

                {
                    /*
                     * Grab lines array
                     */
                    final JSONArray jsonLines = json.getJSONArray("lines");
                    final int jsonLinesSize = jsonLines.length();
                    for (int j = 0; j < jsonLinesSize; j++) {
                        deviData.lines.add(jsonLines.getJSONObject(j).getInt("lineID"));
                    }
                }

                {
                    /*
                     * Grab stops array
                     */
                    final JSONArray jsonLines = json.getJSONArray("stops");
                    final int jsonLinesSize = jsonLines.length();
                    for (int j = 0; j < jsonLinesSize; j++) {
                        deviData.stops.add(jsonLines.getJSONObject(j).getInt("stopID"));
                    }
                }

                ThreadHandlePostData(deviData);
            }

        } catch (Exception e) {
            if (e.getClass() == InterruptedException.class) {
                ThreadHandlePostExecute(null);
                return;
            }
            ThreadHandlePostExecute(e);
            return;
        }
        ThreadHandlePostExecute(null);
    }
}