package com.njtransit.departurevision; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.LinkedHashSet; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import com.google.gson.Gson; import com.njtransit.domain.TrainStatus; /** * Created by IntelliJ IDEA. * User: rgravener * Date: 2/14/11 * Time: 11:50 PM */ public class DepartureVision { public interface TrainStatusListener { void onTrainStatus(TrainStatus status); } private static String nj = "http://technically.us:7979/"; private InputStream stream; private Gson gson; StringBuilder b = new StringBuilder(); public DepartureVision() { gson = new Gson(); } private LinkedHashSet<TrainStatusListener> listeners = new LinkedHashSet<TrainStatusListener>(); public void addListener(TrainStatusListener listener) { listeners.add(listener); } public void removeListener(TrainStatusListener listener) { listeners.remove(listener); } public synchronized void stopDepartures() throws IOException { if(stream!=null) { stream.close(); stream = null; } } public synchronized void startDepartures(String id) throws IOException { stopDepartures(); URL u = new URL("http://technically.us:7979/"+id.toLowerCase()); stream = u.openStream(); while (true) { int k = stream.read(); if (k == -1) { continue; } char c = (char) k; if (c == '\n') { TrainStatus status = gson.fromJson( b.toString(), TrainStatus.class); if (status.getTrack() != null) { status.setTrack(status.getTrack().replace("Track", "")); } if (status.getStatus() != null && status.getStatus() .trim().length() == 0) { status.setStatus(null); } onTrainStatus(status); b.setLength(0); } else { b.append(c); } } } private void onTrainStatus(TrainStatus status) { for(TrainStatusListener l : listeners) { l.onTrainStatus(status); } } }