package vnsim.vehicular.routePlan.cityRouting; import java.util.ArrayList; public class CrossRoadCongestion { private IntersectionNode intersectionNode; // for every segments in the intersection private ArrayList lastWeek; // for every segments in the intersection private ArrayList> realTimeCongestion; public CrossRoadCongestion(IntersectionNode inode) { realTimeCongestion = new ArrayList>(); lastWeek = new ArrayList(); for (int i = 0; i < inode.getSegmentsNb(); i++) { realTimeCongestion.add(new ArrayList()); lastWeek.add(new WeekCongestion()); } intersectionNode = inode; } public IntersectionNode getIntersectionNode() { return intersectionNode; } // get last congestion on the segment public Double getCongestion(int segmentIndex, int day, int hour) { ArrayList data = realTimeCongestion.get(segmentIndex); if (data.size() == 0) { return null; } return data.get(data.size() - 1); } public Double getLastWeekCongestion(int segmentIndex, int day, int hour) { return lastWeek.get(segmentIndex).getCongestion(day, hour); } public void setCongestion(int segmentIndex, Double congestion) { realTimeCongestion.get(segmentIndex).add(congestion); } public void setLastWeekCongestion(int segmentIndex, int day, int hour, Double congestion) { lastWeek.get(segmentIndex).setCongestion(day, hour, congestion); } // for all segments mediate the real time data and set the value to lastWeek // clears the real-time list; public void updateLastWeekCongestion(int day, int hour) { Double congestion; for (int i = 0; i < lastWeek.size(); i++) { congestion = mediate(realTimeCongestion.get(i)); lastWeek.get(i).setCongestion(day, hour, congestion); realTimeCongestion.get(i).clear(); } } private static Double mediate(ArrayList list) { if (list == null) { return null; } if (list.size() == 0) { return new Double(0); } Double m = new Double(0); for (int i = 0; i < list.size(); i++) { m = m + list.get(i); } return m / list.size(); } public ArrayList cloneLastWeek() { ArrayList cloned = new ArrayList(); for (int i = 0; i < lastWeek.size(); i++) { cloned.add(lastWeek.get(i).cloneWeekCongestion()); } return cloned; } // last week congestion public String toString() { String str = "segments_nb " + lastWeek.size() + "\n"; for (int i = 0; i < lastWeek.size(); i++) { str = str + "segment " + i + "\n"; str = str + lastWeek.get(i).toString() + "\n"; } return str; } }