package com.papagiannis.tuberun.favorites; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.util.Log; import com.papagiannis.tuberun.LineType; import com.papagiannis.tuberun.fetchers.Fetcher; public class Favorite implements Serializable { private static final long serialVersionUID = 3L; private static final String FILENAME = "tuberun.favorites"; private LineType lt; private Fetcher fetcher; private String identification; public Favorite(LineType lt, Fetcher fetcher) { super(); this.lt = lt; this.fetcher = fetcher; } public LineType getLine() { return lt; } public void setLine(LineType lt) { this.lt = lt; } public Fetcher getFetcher() { return fetcher; } public void setFetcher(Fetcher fetcher) { this.fetcher = fetcher; } public String getIdentification() { return identification; } public void setIdentification(String identification) { this.identification = identification; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((identification == null) ? 0 : identification.hashCode()); result = prime * result + ((lt == null) ? 0 : lt.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Favorite other = (Favorite) obj; if (identification == null) { if (other.identification != null) return false; } else if (!identification.equals(other.identification)) return false; if (lt != other.lt) return false; return true; } // TODO: remove the statics and rewrite this to use the Store class, like // the ClaimStore. transient private static ArrayList<Favorite> favorites = null; private static ArrayList<Favorite> getFromFile(Activity activity) { ArrayList<Favorite> result = new ArrayList<Favorite>(); try { FileInputStream fis = activity.openFileInput(FILENAME); ObjectInputStream oi = new ObjectInputStream(fis); try { while (true) { Favorite f = (Favorite) oi.readObject(); result.add(f); } } catch (EOFException e) { } oi.close(); } catch (Exception e) { Log.w("Favorites", e); } return result; } public static ArrayList<Favorite> getFavorites(Activity activity) { // returns a reference to the internal object, useful to keep all such // refs in sync if (favorites != null) return favorites; else { favorites = getFromFile(activity); return favorites; } } public static void storeToFile(Activity activity) { FileOutputStream fos; try { activity.deleteFile(FILENAME); fos = activity.openFileOutput(FILENAME, Context.MODE_PRIVATE); ObjectOutputStream oo = new ObjectOutputStream(fos); for (Favorite f : favorites) { oo.writeObject(f); } oo.close(); } catch (Exception e) { Log.w("Favorite.java", e); } } public static void addFavorite(Favorite f, Activity a) { if (favorites != null) favorites.add(f); storeToFile(a); } public static void addFavorite(Favorite f, int to, Activity a) { try { if (favorites != null) favorites.add(to, f); storeToFile(a); } catch (Exception e) { Log.w("Favorties", e); } } public static void removeFavorite(Favorite f, Activity a) { if (favorites != null) { favorites.remove(f); } storeToFile(a); } public static boolean isFavorite(Favorite f) { return favorites.contains(f); } public static void removeIndex(Integer i, Activity activity) { if (favorites != null) favorites.remove(favorites.get(i)); storeToFile(activity); } }