Hajj-simulation/src/DataManeger.java

166 lines
5.2 KiB
Java
Raw Normal View History

import java.io.*;
import java.util.ArrayList;
import java.util.Date;
2020-12-16 14:51:45 +01:00
import java.util.List;
public class DataManeger {
private File workingDir;
public DataManeger(){
workingDir = new File("./data/");
workingDir.mkdir();
clearData();
}
public boolean stateAvailable(Date time) {
File f = new File(String.format("./data/%s.bin", time.getTime()));
return f.exists();
}
public State loadState(Date time){
State state = null;
if (stateAvailable(time)){
try {
ObjectInputStream objectInputStream = new ObjectInputStream(
new FileInputStream(String.format("./data/%s.bin", time.getTime())));
state = (State)objectInputStream.readObject();
objectInputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
return state;
}
public boolean saveState(State state, Date time){
try {
FileOutputStream fs = new FileOutputStream(String.format("./data/%s.bin", time.getTime()));
BufferedOutputStream bfs = new BufferedOutputStream(fs);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(bfs);
objectOutputStream.writeObject(state);
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public File[] savedStateFiles() {
return workingDir.listFiles();
}
public Date[] savedStatesTimes() {
File[] files = savedStateFiles();
ArrayList<Date> timesList = new ArrayList<>();
for (File file : files){
if (file.getName().contains(".bin")){
String timeInName = file.getName().replaceAll(".bin", "").trim();
if ("".equals(timeInName)) continue;
long time = Long.parseLong(timeInName);
timesList.add(new HijriDate(time));
}
}
Date[] times = new Date[timesList.size()];
times = timesList.toArray(times);
return times;
}
2020-12-16 14:51:45 +01:00
public List<State> getStates(){
List<State> list = new ArrayList<>();
for (File file : workingDir.listFiles()) {
if (file.getName().contains(".bin")){
try {
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream);
State state = (State) objectInputStream.readObject();
list.add(state);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
return list;
}
private void clearData() {
for (File file : savedStateFiles()) {
if (file.getName().contains(".bin")){
file.delete();
}
}
}
}
class State implements Serializable {
//A better implementation is to make this more general or make Makkah an instance.
private ArrayList<Campaign> listOfCampaigns;
private ArrayList<Vehicle> listOfVehicles;
2020-12-17 19:20:32 +01:00
private ArrayList<Campaign>[] campPerDistrict;
private Route[] stdRoutes;
private Street[] stdStreet;
private Date allArrivedToArafatTime;
private Date allArrivedToHotelsTime;
2020-12-16 14:51:45 +01:00
private Date stateTime;
public State(ArrayList<Campaign> listOfCampaigns,
ArrayList<Vehicle> listOfVehicles,
2020-12-17 19:20:32 +01:00
ArrayList<Campaign>[] campPerDistrict,
2020-12-16 14:51:45 +01:00
Route[] stdRoutes,
Street[] stdStreet,
Date allArrivedToArafatTime,
Date allArrivedToHotelsTime,
Date stateTime) {
//Make clones since values may change if this is running on a thread.
this.listOfCampaigns = (ArrayList<Campaign>) listOfCampaigns.clone();
this.listOfVehicles = (ArrayList<Vehicle>) listOfVehicles.clone();
2020-12-17 19:20:32 +01:00
this.campPerDistrict = (ArrayList<Campaign>[])campPerDistrict.clone();
this.stdRoutes = stdRoutes.clone();
this.stdStreet = stdStreet.clone();
if (allArrivedToArafatTime != null) {
this.allArrivedToArafatTime = (Date) allArrivedToArafatTime.clone();
}
if (allArrivedToHotelsTime != null) {
this.allArrivedToHotelsTime = (Date) allArrivedToHotelsTime.clone();
}
2020-12-16 14:51:45 +01:00
this.stateTime = stateTime;
}
public ArrayList<Campaign> getListOfCampaigns() {
return listOfCampaigns;
}
public ArrayList<Vehicle> getListOfVehicles() {
return listOfVehicles;
}
2020-12-17 19:20:32 +01:00
public ArrayList<Campaign>[] getCampPerDistrict() {
return campPerDistrict;
}
2020-12-17 19:20:32 +01:00
public Route[] getStdRoutes() {
return stdRoutes;
}
public Street[] getStdStreet() {
return stdStreet;
}
public Date getAllArrivedToArafatTime() {
return allArrivedToArafatTime;
}
public Date getAllArrivedToHotelsTime() {
return allArrivedToHotelsTime;
}
2020-12-16 15:42:26 +01:00
public Date getStateTime() {
return stateTime;
}
}