fr.gotorennes.remote.NextMetroDepartureService.java Source code

Java tutorial

Introduction

Here is the source code for fr.gotorennes.remote.NextMetroDepartureService.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Michel DAVID mimah35-at-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.
 * 
 * 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/>.
 ******************************************************************************/
package fr.gotorennes.remote;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.util.Log;
import fr.gotorennes.domain.NextMetroDeparture;

public class NextMetroDepartureService extends RemoteService<NextMetroDeparture> {

    public static final String COMMAND = "getmetronextdepartures";
    public static final String NODE = "station";

    private static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");

    private static NextMetroDepartureService instance;

    private NextMetroDepartureService(Context context) {
        super();
    }

    protected String getVersion() {
        return "2.2";
    }

    public static synchronized NextMetroDepartureService getInstance(Context context) {
        if (instance == null) {
            instance = new NextMetroDepartureService(context);
        }
        return instance;
    }

    public NextMetroDeparture getNextDeparture(String stationId) {
        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put("mode", "station");
        parameters.put("station", stationId);
        return loadObject(COMMAND, NODE, parameters);
    }

    @Override
    protected NextMetroDeparture populate(JSONObject jsonObject) throws JSONException {
        Log.d("GoToRennes", jsonObject.toString());
        NextMetroDeparture nextDeparture = new NextMetroDeparture();
        nextDeparture.nextForwardDeparture = getNextDate(jsonObject, 1);
        nextDeparture.nextBackwardDeparture = getNextDate(jsonObject, 2);
        nextDeparture.remoteDate = new Date();
        return nextDeparture;
    }

    protected Date getNextDate(JSONObject station, int platform) {
        String departure1 = station.optString("nextTrain1Platform" + platform);
        String departure2 = station.optString("nextTrain2Platform" + platform);
        if (departure1 != null && !departure1.equals("")) {
            try {
                Date departureDate = dateFormat.parse(departure1);
                if (departureDate.before(new Date()) && departure2 != null && !departure2.equals("")) {
                    departureDate = dateFormat.parse(departure2);
                    if (departureDate.before(new Date())) {
                        departureDate = null;
                    }
                }
                return departureDate;
            } catch (Exception ex) {
                Log.e("GoToRennes", "Invalid date format : " + departure1 + " or " + departure2);
            }
        }
        return null;
    }

}