package com.papagiannis.tuberun.stores;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import android.content.Context;
public class Store<T> {
protected String FILENAME=null;
transient protected ArrayList<T> list = null;
protected ArrayList<T> getFromFile(Context activity) {
ArrayList<T> result = new ArrayList<T>();
try {
FileInputStream fis = activity.openFileInput(FILENAME);
ObjectInputStream oi = new ObjectInputStream(fis);
try {
while (true) {
try {
@SuppressWarnings("unchecked")
T f = (T) oi.readObject();
result.add(f);
}catch (ClassCastException e) {
//safe to ignore
}
}
} catch (EOFException e) {
}
oi.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public ArrayList<T> getAll(Context activity) {
//returns a reference to the internal object, useful to keep all such refs in sync
if (list != null)
return list;
else {
list = getFromFile(activity);
return list;
}
}
public T get(int i, Context activity) throws IndexOutOfBoundsException {
ArrayList<T> list=getAll(activity);
if (i<list.size()) return list.get(i);
else throw new IndexOutOfBoundsException();
}
public int size(Context activity) {
ArrayList<T> list=getAll(activity);
return list.size();
}
public void storeToFile(Context context) {
FileOutputStream fos;
try {
context.deleteFile(FILENAME);
fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
ObjectOutputStream oo = new ObjectOutputStream(fos);
for (T f : list) {
oo.writeObject(f);
}
oo.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void add(T f, Context a) {
if (list==null) list=new ArrayList<T>();
list.add(f);
storeToFile(a);
}
public void remove(T f, Context a) {
if (list!=null) {
list.remove(f);
}
storeToFile(a);
}
public void removeAll(Context a) {
if (list!=null) list.clear();
storeToFile(a);
}
public boolean contains(T f) {
if (list==null) return false;
return list.contains(f);
}
public void removeIndex(int i, Context activity) {
if (list!=null && list.size()>i && i>=0) list.remove(i);
storeToFile(activity);
}
}