package org.djd.busntrain.train;
import android.util.Log;
import org.djd.busntrain.commons.XmlUtil;
import org.djd.busntrain.commons.XmlUtilException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
/**
* Created with IntelliJ IDEA.
* User: acorn
* Date: 11/17/12
* Time: 9:00 PM
* To change this template use File | Settings | File Templates.
*/
public class TrainPredictionsModel implements Serializable {
private static final String TAG = TrainPredictionsModel.class.getSimpleName();
private static SimpleDateFormat TIME_PATTERN = new SimpleDateFormat("yyyyMMdd HH:mm");
final String tmst;
final String staId;
final String stpId;
final String staNm;
final String stpDe;
final String prdt;
final String arrT;
final String isDly;
final String rn;
final String rt;
final String destNm;
final String minutes;
public TrainPredictionsModel(Builder builder) {
tmst = builder.tmst;
staId = builder.staId;
stpId = builder.stpId;
staNm = builder.staNm;
stpDe = builder.stpDe;
prdt = builder.prdt;
arrT = builder.arrT;
isDly = builder.isDly;
rn = builder.rn;
rt = builder.rt;
destNm = builder.destNm;
minutes = TrainPredictionsModel.getMinute(builder);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("TrainPredictionsModel");
sb.append("{tmst='").append(tmst).append('\'');
sb.append(", staId='").append(staId).append('\'');
sb.append(", stpId='").append(stpId).append('\'');
sb.append(", staNm='").append(staNm).append('\'');
sb.append(", stpDe='").append(stpDe).append('\'');
sb.append(", prdt='").append(prdt).append('\'');
sb.append(", arrT='").append(arrT).append('\'');
sb.append(", isDly='").append(isDly).append('\'');
sb.append(", rn='").append(rn).append('\'');
sb.append(", rt='").append(rt).append('\'');
sb.append(", minutes='").append(minutes).append('\'');
sb.append('}');
return sb.toString();
}
public static String getMinute(Builder builder) {
try {
if("1".equals(builder.isDly)) {
return "Delayed";
}
Date curDate = TIME_PATTERN.parse(builder.tmst);
Date arrDate = TIME_PATTERN.parse(builder.arrT);
long diffInMilliSec = arrDate.getTime() - curDate.getTime();
double diffInMilliSecDouble = (double) diffInMilliSec;
double diffInSecDouble = diffInMilliSecDouble / 1000.0;
double diffInMinDouble = diffInSecDouble / 60.0;
diffInMinDouble = Math.floor(diffInMinDouble);
int diffInMinutes = (int) diffInMinDouble;
// practical adjustment
--diffInMinutes;
if (1 >= diffInMinutes) {
return "Due";
}
return String.format("%d Min", diffInMinutes);
} catch (ParseException e) {
throw new IllegalStateException(e);
}
}
public static ArrayList<TrainPredictionsModel> parse(String predictionXml) {
Log.d(TAG, predictionXml);
try {
Builder builder = new Builder();
Document document = XmlUtil.unmarshall(predictionXml);
String timeStamp = XmlUtil.getValue(document.getDocumentElement(), "tmst");
Log.d(TAG, timeStamp);
NodeList nodeList = document.getElementsByTagName("eta");
final int COUNT = nodeList.getLength();
ArrayList<TrainPredictionsModel> trainPredictionsModels =
new ArrayList<TrainPredictionsModel>(COUNT);
for (int i = 0; i < COUNT; i++) {
Element element = (Element) nodeList.item(i);
trainPredictionsModels.add(builder.tmst(timeStamp)
.staId(XmlUtil.getValue(element, "staId"))
.stpId(XmlUtil.getValue(element, "stpId"))
.staNm(XmlUtil.getValue(element, "staNm"))
.prdt(XmlUtil.getValue(element, "prdt"))
.arrT(XmlUtil.getValue(element, "arrT"))
.stpDe(XmlUtil.getValue(element, "stpDe"))
.isDly(XmlUtil.getValue(element, "isDly"))
.rn(XmlUtil.getValue(element, "rn"))
.rt(XmlUtil.getValue(element, "rt"))
.destNm(XmlUtil.getValue(element, "destNm"))
.build());
}
return trainPredictionsModels;
} catch (XmlUtilException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
throw new IllegalStateException();
}
private static class Builder {
private String tmst;
private String staId;
private String stpId;
private String staNm;
private String stpDe;
private String prdt;
private String arrT;
private String isDly;
private String rn;
private String rt;
private String destNm;
public Builder tmst(String tmst) {
this.tmst = tmst;
return this;
}
public Builder staId(String staId) {
this.staId = staId;
return this;
}
public Builder stpId(String stpId) {
this.stpId = stpId;
return this;
}
public Builder staNm(String staNm) {
this.staNm = staNm;
return this;
}
public Builder stpDe(String stpDe) {
this.stpDe = stpDe;
return this;
}
public Builder prdt(String prdt) {
this.prdt = prdt;
return this;
}
public Builder arrT(String arrT) {
this.arrT = arrT;
return this;
}
public Builder isDly(String isDly) {
this.isDly = isDly;
return this;
}
public Builder rn(String rn) {
this.rn = rn;
return this;
}
public Builder rt(String rt) {
this.rt = rt;
return this;
}
public Builder destNm(String destNm) {
this.destNm = destNm;
return this;
}
public TrainPredictionsModel build() {
return new TrainPredictionsModel(this);
}
}
}