Compare commits
2 Commits
master
...
phase-1-fi
Author | SHA1 | Date | |
---|---|---|---|
7378cdf17e | |||
9177281deb |
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
|
||||||
</classpath>
|
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,2 @@
|
|||||||
out/
|
out/
|
||||||
/bin/
|
/bin/
|
||||||
*.jpeg
|
|
||||||
*.zip
|
|
||||||
*.bin
|
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
<artifact type="jar" build-on-make="true" name="Hajj-simulation:jar">
|
<artifact type="jar" build-on-make="true" name="Hajj-simulation:jar">
|
||||||
<output-path>$PROJECT_DIR$/out/artifacts/Hajj_simulation_jar</output-path>
|
<output-path>$PROJECT_DIR$/out/artifacts/Hajj_simulation_jar</output-path>
|
||||||
<root id="archive" name="Hajj-simulation.jar">
|
<root id="archive" name="Hajj-simulation.jar">
|
||||||
|
<element id="directory" name="META-INF">
|
||||||
|
<element id="file-copy" path="$PROJECT_DIR$/out/META-INF/MANIFEST.MF" />
|
||||||
|
</element>
|
||||||
<element id="module-output" name="Hajj-simulation" />
|
<element id="module-output" name="Hajj-simulation" />
|
||||||
</root>
|
</root>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
17
.project
17
.project
@ -1,17 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>Hajj-simulation</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
14
package.sh
14
package.sh
@ -1,14 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
GIT=$(command -v git)
|
|
||||||
HEAD=$(command -v head)
|
|
||||||
CUT=$(command -v cut)
|
|
||||||
|
|
||||||
JAR_ARTIFACT="out/artifacts/Hajj_simulation_jar/Hajj-simulation.jar"
|
|
||||||
|
|
||||||
if [ -z $"GIT" ] || [ -z $"HEAD" ] || [ -z $"CUT" ]; then
|
|
||||||
echo "Tools missing"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
tar -cvf Hajj-Simulation-$(git log | head -n1 | cut -d' ' -f2).tar.gz $JAR_ARTIFACT run.sh
|
|
||||||
fi
|
|
9
run.sh
9
run.sh
@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
jav=$(command -v java)
|
|
||||||
|
|
||||||
if [ -z "$jav" ]; then
|
|
||||||
>&2 echo "Can't find java installation"
|
|
||||||
else
|
|
||||||
java -jar out/artifacts/Hajj_simulation_jar/Hajj-simulation.jar
|
|
||||||
fi
|
|
@ -33,7 +33,7 @@ public class Bus extends CivilVehicle {
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder s = new StringBuilder();
|
StringBuilder s = new StringBuilder();
|
||||||
s.append(String.format("ID: %s, Campaign ID: %s\n",this.getUID() , getCampaign().getUID()));
|
s.append(String.format("\nID: %s, Campaign ID: %s\n",this.getUID() , getCampaign().getUID()));
|
||||||
s.append(super.toString());
|
s.append(super.toString());
|
||||||
return s.toString();
|
return s.toString();
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class Campaign implements Serializable {
|
public class Campaign {
|
||||||
|
|
||||||
private String UID;
|
private String UID;
|
||||||
private int numberOfAriivedBuses;
|
private int numberOfAriivedBuses;
|
||||||
|
@ -1,182 +0,0 @@
|
|||||||
import java.io.*;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
private ArrayList<Campaign>[] campPerDistrict;
|
|
||||||
private Route[] stdRoutes;
|
|
||||||
private Street[] stdStreet;
|
|
||||||
private Date allArrivedToArafatTime;
|
|
||||||
private Date allArrivedToHotelsTime;
|
|
||||||
private Date stateTime;
|
|
||||||
private String maxTrip;
|
|
||||||
private String minTrip;
|
|
||||||
|
|
||||||
public State(ArrayList<Campaign> listOfCampaigns,
|
|
||||||
ArrayList<Vehicle> listOfVehicles,
|
|
||||||
ArrayList<Campaign>[] campPerDistrict,
|
|
||||||
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();
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
this.stateTime = stateTime;
|
|
||||||
if (Vehicle.getMinArrived() != null && Vehicle.getMaxArrived() != null){
|
|
||||||
this.maxTrip = Vehicle.getMaxArrived().getTripTime();
|
|
||||||
this.minTrip = Vehicle.getMinArrived().getTripTime();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.maxTrip = "N/A";
|
|
||||||
this.minTrip = "N/A";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<Campaign> getListOfCampaigns() {
|
|
||||||
return listOfCampaigns;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<Vehicle> getListOfVehicles() {
|
|
||||||
return listOfVehicles;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<Campaign>[] getCampPerDistrict() {
|
|
||||||
return campPerDistrict;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Route[] getStdRoutes() {
|
|
||||||
return stdRoutes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Street[] getStdStreet() {
|
|
||||||
return stdStreet;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getAllArrivedToArafatTime() {
|
|
||||||
return allArrivedToArafatTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getAllArrivedToHotelsTime() {
|
|
||||||
return allArrivedToHotelsTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStateTime() {
|
|
||||||
return stateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaxTrip() {
|
|
||||||
return maxTrip;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMinTrip() {
|
|
||||||
return minTrip;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
import java.awt.EventQueue;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.awt.Color;
|
|
||||||
import javax.swing.JScrollBar;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import java.awt.FlowLayout;
|
|
||||||
import java.awt.GridBagLayout;
|
|
||||||
import java.awt.GridBagConstraints;
|
|
||||||
import java.awt.Insets;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
|
|
||||||
public class EventControll {
|
|
||||||
|
|
||||||
private JFrame frame;
|
|
||||||
//private JTextField textField;
|
|
||||||
private JTextField textField_2;
|
|
||||||
private JTextField textField_3;
|
|
||||||
private JTextField textField_4;
|
|
||||||
public static void main(String[] args) {
|
|
||||||
EventQueue.invokeLater(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
EventControll window = new EventControll();
|
|
||||||
window.frame.setVisible(true);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public EventControll() {
|
|
||||||
initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initialize() {
|
|
||||||
frame = new JFrame();
|
|
||||||
frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
|
|
||||||
|
|
||||||
for (int i = 0; i<10 ; i++) {
|
|
||||||
JTextField textField = new JTextField();
|
|
||||||
int x =(int)(((double)i/9.0)*255);
|
|
||||||
textField.setBackground(new Color(255,x,0));
|
|
||||||
frame.getContentPane().add(textField);
|
|
||||||
textField.setColumns(10);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setData(Object A) {
|
|
||||||
//lblNewLabel.setText(A.toString());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,512 +0,0 @@
|
|||||||
import java.awt.Color;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JComboBox;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
import javax.swing.UIManager;
|
|
||||||
import java.awt.SystemColor;
|
|
||||||
|
|
||||||
public class GUI_History {
|
|
||||||
|
|
||||||
private List<State> states;
|
|
||||||
private State selectedState;
|
|
||||||
private ArrayList<Campaign> listOfCampaigns;
|
|
||||||
private ArrayList<Vehicle> listOfVehicles;
|
|
||||||
private ArrayList<Campaign>[] campPerDistrict;
|
|
||||||
private Route[] stdRoutes;
|
|
||||||
private Street[] stdStreet;
|
|
||||||
private Date currenttimeManager;
|
|
||||||
private JFrame frame;
|
|
||||||
private JTable streetTable;
|
|
||||||
private JTable districtTable;
|
|
||||||
private JLabel lblDate;
|
|
||||||
private JLabel lblDestination;
|
|
||||||
private JLabel lblNumOfBuses;
|
|
||||||
private JLabel lblNumOfDonebuses;
|
|
||||||
private JLabel lblMaximumTripValue;
|
|
||||||
private JLabel lblMinimumTripValue;
|
|
||||||
private JLabel lblBusesArrivedInTheLastHourValue;
|
|
||||||
private JLabel lblAverageTripForLastHourValue;
|
|
||||||
private JLabel lblAverageTimeForTheTrip;
|
|
||||||
private Object[][] streetData;
|
|
||||||
private String[] streetColNames = {"Street Name", "Street Load %", "Total", "Buses",
|
|
||||||
"Local Vehicles","Avg. Time"};
|
|
||||||
private String[] districtColNames = {"District", "Campaigns", "Busses", "Arrival %",
|
|
||||||
"Avg. Time", "Best time to Arafat", "Best time to District"};
|
|
||||||
|
|
||||||
public GUI_History(List<State> states) {
|
|
||||||
this.states = states;
|
|
||||||
makeFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void makeFrame() {
|
|
||||||
setData(states.get(0));
|
|
||||||
frame = new JFrame("History");
|
|
||||||
frame.setBounds(200, 150, 1386, 731);
|
|
||||||
frame.setLocationRelativeTo(null);
|
|
||||||
frame.getContentPane().setBackground(new Color(50,50,50));
|
|
||||||
frame.getContentPane().setForeground(new Color(0, 0, 0));
|
|
||||||
frame.getContentPane().setLayout(null);
|
|
||||||
frame.revalidate();
|
|
||||||
frame.setAutoRequestFocus(false);
|
|
||||||
frame.setVisible(true);
|
|
||||||
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
|
||||||
|
|
||||||
|
|
||||||
streetData = new Object[stdStreet.length][6];
|
|
||||||
for (int i = 0; i < stdStreet.length; i++) {
|
|
||||||
streetData[i][0] = stdStreet[i].getName().name();
|
|
||||||
streetData[i][1] = stdStreet[i].getPercentRemainingCapacity();
|
|
||||||
streetData[i][2] = stdStreet[i].getVehicles().size();
|
|
||||||
streetData[i][3] = stdStreet[i].getNumberOfBuses();
|
|
||||||
streetData[i][4] = stdStreet[i].getNumberOfLocalCars();
|
|
||||||
streetData[i][5] = MakkahCity.avgTimeOnStreet(stdStreet[i]);
|
|
||||||
}
|
|
||||||
//District data
|
|
||||||
Object[][] districtData = new Object[campPerDistrict.length][7];
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < campPerDistrict.length; i++) {
|
|
||||||
districtData[i][0] = campPerDistrict[i].get(0).getHotelDistrict().name();
|
|
||||||
districtData[i][1] = campPerDistrict[i].size();
|
|
||||||
districtData[i][2] = MakkahCity.busesInDistrict(District.values()[i]);
|
|
||||||
districtData[i][3] = MakkahCity.getPercentArrival(District.values()[i]);
|
|
||||||
districtData[i][4] = MakkahCity.getAvgTimeOfTrip(District.values()[i]);
|
|
||||||
districtData[i][5] = MakkahCity.getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus());
|
|
||||||
districtData[i][6] = MakkahCity.getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus());
|
|
||||||
}
|
|
||||||
|
|
||||||
//tables
|
|
||||||
|
|
||||||
//Street table
|
|
||||||
streetTable = new JTable(streetData,streetColNames);
|
|
||||||
streetTable.setEnabled(false);
|
|
||||||
DefaultTableModel model = new DefaultTableModel();
|
|
||||||
model.setColumnIdentifiers(streetColNames);
|
|
||||||
streetTable.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
streetTable.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
streetTable.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
streetTable.setBackground(new Color(17,17,17));
|
|
||||||
streetTable.setForeground(Color.white);
|
|
||||||
streetTable.setSelectionBackground(Color.RED);
|
|
||||||
streetTable.setGridColor(new Color(102, 102, 102));
|
|
||||||
streetTable.setSelectionForeground(Color.white);
|
|
||||||
streetTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
streetTable.setRowHeight(25);
|
|
||||||
streetTable.setAutoCreateRowSorter(true);
|
|
||||||
JScrollPane streetScroll = new JScrollPane(streetTable);
|
|
||||||
streetScroll.setBounds(30,75,1140,329);
|
|
||||||
frame.getContentPane().add(streetScroll);
|
|
||||||
|
|
||||||
//District table
|
|
||||||
districtTable = new JTable(districtData,districtColNames);
|
|
||||||
districtTable.setEnabled(false);
|
|
||||||
districtTable.setForeground(new Color(255, 255, 255));
|
|
||||||
districtTable.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
districtTable.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
districtTable.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
districtTable.setBackground(new Color(17,17,17));
|
|
||||||
districtTable.setSelectionBackground(Color.RED);
|
|
||||||
model.setColumnIdentifiers(districtColNames);
|
|
||||||
districtTable.setSelectionForeground(Color.white);
|
|
||||||
districtTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
districtTable.setGridColor(new Color(102, 102, 102));
|
|
||||||
JScrollPane districtScroll = new JScrollPane(districtTable);
|
|
||||||
districtScroll.setEnabled(false);
|
|
||||||
districtTable.setAutoCreateRowSorter(true);
|
|
||||||
districtTable.setRowHeight(25);
|
|
||||||
districtTable.revalidate();
|
|
||||||
districtScroll.setBounds(30,452,1140,105);
|
|
||||||
frame.getContentPane().add(districtScroll);
|
|
||||||
|
|
||||||
JLabel lblStreets = new JLabel("Streets");
|
|
||||||
lblStreets.setFont(new Font("Rockwell", Font.PLAIN, 24));
|
|
||||||
lblStreets.setForeground(new Color(255, 255, 255));
|
|
||||||
lblStreets.setBounds(30, 44, 208, 30);
|
|
||||||
frame.getContentPane().add(lblStreets);
|
|
||||||
|
|
||||||
JLabel lblDistrict = new JLabel("District");
|
|
||||||
lblDistrict.setFont(new Font("Rockwell", Font.PLAIN, 24));
|
|
||||||
lblDistrict.setForeground(new Color(255, 255, 255));
|
|
||||||
lblDistrict.setBounds(30, 425, 166, 29);
|
|
||||||
frame.getContentPane().add(lblDistrict);
|
|
||||||
|
|
||||||
JLabel lblTime = new JLabel("Time:");
|
|
||||||
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime.setForeground(new Color(255, 255, 255));
|
|
||||||
lblTime.setBounds(50, 11, 72, 14);
|
|
||||||
frame.getContentPane().add(lblTime);
|
|
||||||
|
|
||||||
JLabel lblStatus = new JLabel("Status:");
|
|
||||||
lblStatus.setForeground(new Color(255, 255, 255));
|
|
||||||
lblStatus.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblStatus.setBounds(423, 9, 72, 18);
|
|
||||||
frame.getContentPane().add(lblStatus);
|
|
||||||
|
|
||||||
lblDestination = new JLabel();
|
|
||||||
lblDestination.setForeground(new Color(255, 255, 255));
|
|
||||||
lblDestination.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDestination.setBounds(477, 9, 184, 18);
|
|
||||||
frame.getContentPane().add(lblDestination);
|
|
||||||
|
|
||||||
lblDate = new JLabel(currenttimeManager.toString());
|
|
||||||
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDate.setForeground(Color.WHITE);
|
|
||||||
lblDate.setBounds(100, 8, 326, 21);
|
|
||||||
frame.getContentPane().add(lblDate);
|
|
||||||
|
|
||||||
JLabel lblBuses = new JLabel("Buses: ");
|
|
||||||
lblBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBuses.setForeground(new Color(255, 255, 255));
|
|
||||||
lblBuses.setBackground(new Color(192, 192, 192));
|
|
||||||
lblBuses.setBounds(30, 578, 56, 14);
|
|
||||||
frame.getContentPane().add(lblBuses);
|
|
||||||
|
|
||||||
lblNumOfBuses = new JLabel();
|
|
||||||
lblNumOfBuses.setText("0");
|
|
||||||
lblNumOfBuses.setBackground(new Color(0, 0, 0));
|
|
||||||
lblNumOfBuses.setForeground(new Color(255, 255, 255));
|
|
||||||
lblNumOfBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblNumOfBuses.setBounds(79, 579, 90, 12);
|
|
||||||
frame.getContentPane().add(lblNumOfBuses);
|
|
||||||
|
|
||||||
JLabel lblBusesDone = new JLabel("Buses Done:");
|
|
||||||
lblBusesDone.setForeground(new Color(255, 255, 255));
|
|
||||||
lblBusesDone.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBusesDone.setBounds(169, 579, 101, 12);
|
|
||||||
frame.getContentPane().add(lblBusesDone);
|
|
||||||
|
|
||||||
lblNumOfDonebuses = new JLabel();
|
|
||||||
lblNumOfDonebuses.setText("0");
|
|
||||||
lblNumOfDonebuses.setForeground(new Color(255, 255, 255));
|
|
||||||
lblNumOfDonebuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblNumOfDonebuses.setBounds(259, 577, 80, 16);
|
|
||||||
frame.getContentPane().add(lblNumOfDonebuses);
|
|
||||||
|
|
||||||
JLabel lblMaximumTrip = new JLabel("Maximum Trip:");
|
|
||||||
lblMaximumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMaximumTrip.setForeground(new Color(255, 255, 255));
|
|
||||||
lblMaximumTrip.setBounds(30, 619, 112, 22);
|
|
||||||
frame.getContentPane().add(lblMaximumTrip);
|
|
||||||
|
|
||||||
lblMaximumTripValue = new JLabel();
|
|
||||||
lblMaximumTripValue.setText("-:--");
|
|
||||||
lblMaximumTripValue.setForeground(new Color(255, 255, 255));
|
|
||||||
lblMaximumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMaximumTripValue.setBounds(150, 621, 46, 18);
|
|
||||||
frame.getContentPane().add(lblMaximumTripValue);
|
|
||||||
|
|
||||||
JLabel lblMinimumTrip = new JLabel("MinimumTrip:");
|
|
||||||
lblMinimumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMinimumTrip.setForeground(Color.WHITE);
|
|
||||||
lblMinimumTrip.setBounds(30, 655, 112, 18);
|
|
||||||
frame.getContentPane().add(lblMinimumTrip);
|
|
||||||
|
|
||||||
lblMinimumTripValue = new JLabel("-:--");
|
|
||||||
lblMinimumTripValue.setForeground(Color.WHITE);
|
|
||||||
lblMinimumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMinimumTripValue.setBounds(139, 657, 46, 14);
|
|
||||||
frame.getContentPane().add(lblMinimumTripValue);
|
|
||||||
|
|
||||||
JLabel lblBusesArrivedInTheLastHour = new JLabel("Buses Arrived In The Last Hour:");
|
|
||||||
lblBusesArrivedInTheLastHour.setForeground(Color.WHITE);
|
|
||||||
lblBusesArrivedInTheLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBusesArrivedInTheLastHour.setBounds(360, 578, 237, 14);
|
|
||||||
frame.getContentPane().add(lblBusesArrivedInTheLastHour);
|
|
||||||
|
|
||||||
lblBusesArrivedInTheLastHourValue = new JLabel();
|
|
||||||
lblBusesArrivedInTheLastHourValue.setText("0");
|
|
||||||
lblBusesArrivedInTheLastHourValue.setForeground(Color.WHITE);
|
|
||||||
lblBusesArrivedInTheLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBusesArrivedInTheLastHourValue.setBounds(594, 578, 90, 14);
|
|
||||||
frame.getContentPane().add(lblBusesArrivedInTheLastHourValue);
|
|
||||||
|
|
||||||
JLabel lblAverageTripForLastHour = new JLabel("Average Trip For Last Hour:");
|
|
||||||
lblAverageTripForLastHour.setForeground(Color.WHITE);
|
|
||||||
lblAverageTripForLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAverageTripForLastHour.setBackground(Color.BLACK);
|
|
||||||
lblAverageTripForLastHour.setBounds(206, 621, 208, 18);
|
|
||||||
frame.getContentPane().add(lblAverageTripForLastHour);
|
|
||||||
|
|
||||||
lblAverageTripForLastHourValue = new JLabel("(No Arrivals) In Last Hour");
|
|
||||||
lblAverageTripForLastHourValue.setForeground(Color.WHITE);
|
|
||||||
lblAverageTripForLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAverageTripForLastHourValue.setBounds(423, 621, 216, 18);
|
|
||||||
frame.getContentPane().add(lblAverageTripForLastHourValue);
|
|
||||||
|
|
||||||
JLabel lblAvgTime = new JLabel("Average Time For The Trip:");
|
|
||||||
lblAvgTime.setForeground(Color.WHITE);
|
|
||||||
lblAvgTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAvgTime.setBounds(206, 650, 208, 29);
|
|
||||||
frame.getContentPane().add(lblAvgTime);
|
|
||||||
|
|
||||||
lblAverageTimeForTheTrip = new JLabel("-:--");
|
|
||||||
lblAverageTimeForTheTrip.setForeground(Color.WHITE);
|
|
||||||
lblAverageTimeForTheTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAverageTimeForTheTrip.setBounds(423, 657, 101, 14);
|
|
||||||
frame.getContentPane().add(lblAverageTimeForTheTrip);
|
|
||||||
|
|
||||||
JButton btnViewRoutes = new JButton("View Routes");
|
|
||||||
btnViewRoutes.setBounds(1195, 75, 166, 30);
|
|
||||||
btnViewRoutes.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewRoutes.setBackground(new Color(9,9,9));
|
|
||||||
btnViewRoutes.setForeground(Color.white);
|
|
||||||
btnViewRoutes.addActionListener(e -> {
|
|
||||||
GUI_ViewRoute r = new GUI_ViewRoute(stdRoutes ,listOfCampaigns, currenttimeManager);
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(btnViewRoutes);
|
|
||||||
|
|
||||||
JButton btnViewBuses = new JButton("View Buses");
|
|
||||||
btnViewBuses.setBounds(1195, 130, 166, 30);
|
|
||||||
btnViewBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewBuses.setBackground(new Color(9,9,9));
|
|
||||||
btnViewBuses.setForeground(Color.white);
|
|
||||||
btnViewBuses.addActionListener(e -> {
|
|
||||||
GUI_ViewBuses t = new GUI_ViewBuses(listOfCampaigns , currenttimeManager);
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(btnViewBuses);
|
|
||||||
|
|
||||||
JButton btnViewStreet = new JButton("View Street");
|
|
||||||
btnViewStreet.setBounds(1195, 185, 166, 29);
|
|
||||||
btnViewStreet.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewStreet.setBackground(new Color(9,9,9));
|
|
||||||
btnViewStreet.setForeground(Color.white);
|
|
||||||
btnViewStreet.addActionListener(e -> {
|
|
||||||
GUI_ViewStreet t = new GUI_ViewStreet(stdStreet,currenttimeManager);
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(btnViewStreet);
|
|
||||||
|
|
||||||
JComboBox comboBox = new JComboBox<Date>();
|
|
||||||
comboBox.setBackground(new Color(150, 150 , 150));
|
|
||||||
comboBox.setBounds(1143, 11, 217, 33);
|
|
||||||
for (State state : states) {
|
|
||||||
comboBox.addItem(state.getStateTime());
|
|
||||||
}
|
|
||||||
comboBox.addActionListener(e ->{
|
|
||||||
setData(states.get(comboBox.getSelectedIndex()));
|
|
||||||
updateFrame();
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(comboBox);
|
|
||||||
updateFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setData(State state) {
|
|
||||||
listOfCampaigns = state.getListOfCampaigns();
|
|
||||||
listOfVehicles = state.getListOfVehicles();
|
|
||||||
campPerDistrict = state.getCampPerDistrict();
|
|
||||||
stdRoutes = state.getStdRoutes();
|
|
||||||
stdStreet = state.getStdStreet();
|
|
||||||
currenttimeManager = state.getStateTime();
|
|
||||||
selectedState = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateFrame() {
|
|
||||||
streetData = new Object[stdStreet.length][6];
|
|
||||||
for (int i = 0; i < stdStreet.length; i++) {
|
|
||||||
streetData[i][0] = stdStreet[i].getName().name();
|
|
||||||
streetData[i][1] = stdStreet[i].getPercentRemainingCapacity();
|
|
||||||
streetData[i][2] = stdStreet[i].getVehicles().size();
|
|
||||||
streetData[i][3] = stdStreet[i].getNumberOfBuses();
|
|
||||||
streetData[i][4] = stdStreet[i].getNumberOfLocalCars();
|
|
||||||
streetData[i][5] = avgTimeOnStreet(stdStreet[i]);
|
|
||||||
}
|
|
||||||
streetTable.setModel(new DefaultTableModel(streetData ,streetColNames));
|
|
||||||
|
|
||||||
Object[][] districtData = new Object[campPerDistrict.length][7];
|
|
||||||
for (int i = 0; i < campPerDistrict.length; i++) {
|
|
||||||
districtData[i][0] = campPerDistrict[i].get(0).getHotelDistrict().name();
|
|
||||||
districtData[i][1] = campPerDistrict[i].size();
|
|
||||||
districtData[i][2] = busesInDistrict(District.values()[i]);
|
|
||||||
districtData[i][3] = getPercentArrival(District.values()[i]);
|
|
||||||
districtData[i][4] = getAvgTimeOfTrip(District.values()[i]);
|
|
||||||
districtData[i][5] = getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus());
|
|
||||||
districtData[i][6] = getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus());
|
|
||||||
}
|
|
||||||
districtTable.setModel(new DefaultTableModel(districtData, districtColNames));
|
|
||||||
lblDate.setText(currenttimeManager.toString());
|
|
||||||
|
|
||||||
String status = "";
|
|
||||||
if (currenttimeManager.getDay() == 9) {
|
|
||||||
status = "Heading to Arafat";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
status = "Heading to Hotels";
|
|
||||||
}
|
|
||||||
lblDestination.setText(status);
|
|
||||||
|
|
||||||
int numberOfBusses = 0;
|
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
|
||||||
numberOfBusses += campaign.getNumberOfBusses();
|
|
||||||
}
|
|
||||||
String bus = String.format("%d", numberOfBusses);
|
|
||||||
lblNumOfBuses.setText(bus);
|
|
||||||
|
|
||||||
String numOfdoneBuses = String.format("%d", getNumberOfArrivedBusses());
|
|
||||||
lblNumOfDonebuses.setText(numOfdoneBuses);
|
|
||||||
|
|
||||||
String NumberOfBussPerHour = String.format("%d", getNumberOfArrivedBussesPerHour());
|
|
||||||
lblBusesArrivedInTheLastHourValue.setText(NumberOfBussPerHour);
|
|
||||||
|
|
||||||
lblAverageTripForLastHourValue.setText(avgTimeOfTrip());
|
|
||||||
lblAverageTimeForTheTrip.setText(getAvgTripForAllDis());
|
|
||||||
lblMaximumTripValue.setText(selectedState.getMaxTrip());
|
|
||||||
lblMinimumTripValue.setText(selectedState.getMinTrip());
|
|
||||||
}
|
|
||||||
|
|
||||||
//Methods
|
|
||||||
public String avgTimeOnStreet(Street street) {
|
|
||||||
int sum = 0;
|
|
||||||
int counter = 1;
|
|
||||||
for (Campaign campaign : listOfCampaigns)
|
|
||||||
for (Vehicle vehicle : campaign.getArrivedVehicles())
|
|
||||||
if (vehicle.hasCrossedStreet(street)){
|
|
||||||
sum += vehicle.getTimeOnStreet(street);
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
sum /= counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return street.getFastestTimeOfTravel(new Bus());
|
|
||||||
return String.format("%02d:%02d", hours, minutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int busesInDistrict(District district){
|
|
||||||
int buses = 0;
|
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]){
|
|
||||||
buses += campaign.getNumberOfBusses();
|
|
||||||
}
|
|
||||||
return buses;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getPercentArrival(District district) {
|
|
||||||
int sum = 0;
|
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
|
||||||
sum += campaign.getPercentArrived();
|
|
||||||
}
|
|
||||||
return sum/campPerDistrict[district.ordinal()].size();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getAvgTimeOfTrip(District district){
|
|
||||||
int sum = 0;
|
|
||||||
int counter = 1;
|
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
|
||||||
for (Vehicle vehicle : campaign.getVehicles()) {
|
|
||||||
if (vehicle.isArrivedToDest()) {
|
|
||||||
long minutes = (vehicle.getTimeOfArrival().getTime() - vehicle.getTimeStartedMoving().getTime())/60000;
|
|
||||||
sum+= minutes;
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sum = sum /counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return " n/a";
|
|
||||||
return String.format("%2d:%02d", hours,minutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Route getShortestRoute(Campaign campaign, Mashier mashier) {
|
|
||||||
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
|
||||||
Route route = null;
|
|
||||||
double min = Double.MAX_VALUE;
|
|
||||||
for (Route r : routes) {
|
|
||||||
if (r.getMashier() == mashier){
|
|
||||||
if (r.getTotalLength() < min) {
|
|
||||||
min = r.getTotalLength();
|
|
||||||
route = r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return route;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Route[] getRoutesToDistrict(District district) {
|
|
||||||
ArrayList<Route> routes = new ArrayList<>();
|
|
||||||
for (Route route : stdRoutes) {
|
|
||||||
if (route.getHotelArea() == district) {
|
|
||||||
routes.add(route);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Route[] routesArray = new Route[routes.size()];
|
|
||||||
return routes.toArray(routesArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getNumberOfArrivedBusses() {
|
|
||||||
int num = 0;
|
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
|
||||||
for (Vehicle vehicle : campaign.getVehicles()){
|
|
||||||
if (vehicle instanceof Bus &&
|
|
||||||
vehicle.isArrivedToDest()) num++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getNumberOfArrivedBussesPerHour() {
|
|
||||||
Calendar now = new GregorianCalendar();
|
|
||||||
now.setTime(currenttimeManager);
|
|
||||||
Calendar from = (GregorianCalendar)now.clone();
|
|
||||||
from.roll(Calendar.HOUR, -1);
|
|
||||||
int num = 0;
|
|
||||||
for (Campaign campaign : listOfCampaigns){
|
|
||||||
for (Vehicle bus : campaign.getVehicles()){
|
|
||||||
if (bus.isArrivedToDest() && bus.getTimeOfArrival().before(now.getTime())
|
|
||||||
&& bus.getTimeOfArrival().after(from.getTime())) {
|
|
||||||
num++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String avgTimeOfTrip() {
|
|
||||||
//TODO: does output diff value even after all have arrived.
|
|
||||||
Calendar now = new GregorianCalendar();
|
|
||||||
now.setTime(currenttimeManager);
|
|
||||||
Calendar from = (GregorianCalendar)now.clone();
|
|
||||||
from.roll(Calendar.HOUR, -1);
|
|
||||||
int counter = 1;
|
|
||||||
int sum = 0;
|
|
||||||
for (Campaign campaign : listOfCampaigns){
|
|
||||||
for (Vehicle bus : campaign.getVehicles()){
|
|
||||||
if (bus.isArrivedToDest() && bus.getTimeOfArrival().before(now.getTime())
|
|
||||||
&& bus.getTimeOfArrival().after(from.getTime())) {
|
|
||||||
long minutes = (bus.getTimeOfArrival().getTime() - bus.getTimeStartedMoving().getTime())/60000;
|
|
||||||
sum+= minutes;
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sum = sum /counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return "(No Arrivals) In Last Hour";
|
|
||||||
return String.format("%2d:%02d", hours, minutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAvgTripForAllDis() {
|
|
||||||
int sum = 0;
|
|
||||||
int counter = 1;
|
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
|
||||||
for (Vehicle vehicle : campaign.getVehicles()) {
|
|
||||||
if (vehicle.isArrivedToDest()) {
|
|
||||||
long minutes = (vehicle.getTimeOfArrival().getTime() - vehicle.getTimeStartedMoving().getTime())/60000;
|
|
||||||
sum+= minutes;
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}//Make the following a method since it is the same other method
|
|
||||||
sum = sum /counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return "-:--";
|
|
||||||
return String.format("%2d:%02d", hours,minutes);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,237 +0,0 @@
|
|||||||
import java.awt.Color;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
|
|
||||||
public class GUI_Report {
|
|
||||||
JFrame frame;
|
|
||||||
private static ArrayList<Campaign> listOfCampaigns;
|
|
||||||
private static Route[] stdRoutes;
|
|
||||||
private JTable streetTable;
|
|
||||||
private JTable districtTable;
|
|
||||||
private Street[] stdStreet;
|
|
||||||
private Date currenttimeManager;
|
|
||||||
private static ArrayList<Campaign>[] campPerDistrict;
|
|
||||||
private String[] streetColNames = {"Street Name", "Street Load %", "Total","Buses","Local Vehicles","Avg. Time"};
|
|
||||||
private String[] districtColNames = {"District", "Campaigns", "Busses", "Arrival %","Avg. Time", "Best time to Arafat", "Best time to District"};
|
|
||||||
private Object[][] streetData;
|
|
||||||
private Object[][] districtData;
|
|
||||||
private JLabel lblDate;
|
|
||||||
|
|
||||||
public GUI_Report(ArrayList<Campaign> listOfCampaigns, Route[] stdRoutes, Street[] stdStreet, ArrayList<Campaign>[] campPerDistrict, Date currenttimeManager) {
|
|
||||||
this.listOfCampaigns = listOfCampaigns;
|
|
||||||
this.stdRoutes = stdRoutes;
|
|
||||||
this.stdStreet = stdStreet;
|
|
||||||
this.campPerDistrict = campPerDistrict;
|
|
||||||
this.currenttimeManager = currenttimeManager;
|
|
||||||
makeFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void makeFrame() {
|
|
||||||
frame = new JFrame("Report");
|
|
||||||
|
|
||||||
//Street data
|
|
||||||
streetData = new Object[stdStreet.length][6];
|
|
||||||
|
|
||||||
for (int i = 0; i < stdStreet.length; i++) {
|
|
||||||
streetData[i][0] = stdStreet[i].getName().name();
|
|
||||||
streetData[i][1] = stdStreet[i].getPercentRemainingCapacity();
|
|
||||||
streetData[i][2] = stdStreet[i].getVehicles().size();
|
|
||||||
streetData[i][3] = stdStreet[i].getNumberOfBuses();
|
|
||||||
streetData[i][4] = stdStreet[i].getNumberOfLocalCars();
|
|
||||||
streetData[i][5] = avgTimeOnStreet(stdStreet[i]);
|
|
||||||
}
|
|
||||||
DefaultTableModel model = new DefaultTableModel();
|
|
||||||
model.setColumnIdentifiers(streetColNames);
|
|
||||||
//district
|
|
||||||
districtData = new Object[campPerDistrict.length][7];
|
|
||||||
for (int i = 0; i < campPerDistrict.length; i++) {
|
|
||||||
districtData[i][0] = campPerDistrict[i].get(0).getHotelDistrict().name();
|
|
||||||
districtData[i][1] = campPerDistrict[i].size();
|
|
||||||
districtData[i][2] = busesInDistrict(District.values()[i]);
|
|
||||||
districtData[i][3] = getPercentArrival(District.values()[i]);
|
|
||||||
districtData[i][4] = getAvgTimeOfTrip(District.values()[i]);
|
|
||||||
districtData[i][5] = getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus());
|
|
||||||
districtData[i][6] = getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus());
|
|
||||||
}
|
|
||||||
//tables
|
|
||||||
|
|
||||||
//Street table
|
|
||||||
streetTable = new JTable(streetData,streetColNames);
|
|
||||||
streetTable.setEnabled(false);
|
|
||||||
streetTable.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
streetTable.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
streetTable.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
streetTable.setBackground(new Color(17,17,17));
|
|
||||||
streetTable.setForeground(Color.white);
|
|
||||||
streetTable.setGridColor(new Color(102, 102, 102));
|
|
||||||
streetTable.setSelectionForeground(Color.white);
|
|
||||||
streetTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
streetTable.setRowHeight(20);
|
|
||||||
streetTable.setAutoCreateRowSorter(true);
|
|
||||||
JScrollPane streetScroll = new JScrollPane(streetTable);
|
|
||||||
streetTable.getColumnModel().getColumn(0).setPreferredWidth(111);
|
|
||||||
streetTable.getColumnModel().getColumn(1).setPreferredWidth(46);
|
|
||||||
streetTable.getColumnModel().getColumn(2).setPreferredWidth(1);
|
|
||||||
streetTable.getColumnModel().getColumn(3).setPreferredWidth(0);
|
|
||||||
streetTable.getColumnModel().getColumn(4).setPreferredWidth(60);
|
|
||||||
streetTable.getColumnModel().getColumn(5).setPreferredWidth(0);
|
|
||||||
streetScroll.setBounds(10,75,809,269);
|
|
||||||
|
|
||||||
//District table
|
|
||||||
districtTable = new JTable(districtData,districtColNames);
|
|
||||||
districtTable.setEnabled(false);
|
|
||||||
districtTable.setForeground(new Color(255, 255, 255));
|
|
||||||
districtTable.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
districtTable.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
districtTable.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
districtTable.setBackground(new Color(17,17,17));
|
|
||||||
districtTable.setSelectionBackground(Color.RED);
|
|
||||||
model.setColumnIdentifiers(districtColNames);
|
|
||||||
districtTable.setSelectionForeground(Color.white);
|
|
||||||
districtTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
districtTable.setGridColor(new Color(102, 102, 102));
|
|
||||||
JScrollPane districtScroll = new JScrollPane(districtTable);
|
|
||||||
districtScroll.setEnabled(false);
|
|
||||||
districtTable.setAutoCreateRowSorter(true);
|
|
||||||
districtTable.getColumnModel().getColumn(0).setPreferredWidth(43);
|
|
||||||
districtTable.getColumnModel().getColumn(1).setPreferredWidth(30);
|
|
||||||
districtTable.getColumnModel().getColumn(2).setPreferredWidth(0);
|
|
||||||
districtTable.getColumnModel().getColumn(3).setPreferredWidth(0);
|
|
||||||
districtTable.getColumnModel().getColumn(4).setPreferredWidth(0);
|
|
||||||
districtTable.getColumnModel().getColumn(5).setPreferredWidth(85);
|
|
||||||
districtTable.getColumnModel().getColumn(6).setPreferredWidth(93);
|
|
||||||
districtTable.setRowHeight(20);
|
|
||||||
districtTable.revalidate();
|
|
||||||
districtScroll.setBounds(10,395,809,89);
|
|
||||||
|
|
||||||
//lbl
|
|
||||||
|
|
||||||
JLabel lblTime = new JLabel("Time:");
|
|
||||||
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime.setForeground(new Color(255, 255, 255));
|
|
||||||
lblTime.setBounds(50, 11, 72, 14);
|
|
||||||
|
|
||||||
//Add Elements
|
|
||||||
frame.getContentPane().add(streetScroll);
|
|
||||||
frame.getContentPane().add(districtScroll);
|
|
||||||
frame.getContentPane().setBackground(new Color(50,50,50));
|
|
||||||
frame.getContentPane().setForeground(new Color(0, 0, 0));
|
|
||||||
frame.setBounds(100,100,856,540);
|
|
||||||
frame.getContentPane().setLayout(null);
|
|
||||||
|
|
||||||
JLabel lblStreets = new JLabel("Streets");
|
|
||||||
lblStreets.setForeground(Color.WHITE);
|
|
||||||
lblStreets.setFont(new Font("Rockwell", Font.PLAIN, 24));
|
|
||||||
lblStreets.setBounds(10, 34, 208, 30);
|
|
||||||
frame.getContentPane().add(lblStreets);
|
|
||||||
|
|
||||||
JLabel lblDistrict = new JLabel("District");
|
|
||||||
lblDistrict.setForeground(Color.WHITE);
|
|
||||||
lblDistrict.setFont(new Font("Rockwell", Font.PLAIN, 24));
|
|
||||||
lblDistrict.setBounds(10, 355, 166, 29);
|
|
||||||
frame.getContentPane().add(lblDistrict);
|
|
||||||
|
|
||||||
JLabel lblTime_1 = new JLabel("Time:");
|
|
||||||
lblTime_1.setForeground(Color.WHITE);
|
|
||||||
lblTime_1.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime_1.setBounds(190, 21, 72, 14);
|
|
||||||
frame.getContentPane().add(lblTime_1);
|
|
||||||
|
|
||||||
lblDate = new JLabel(currenttimeManager.toString());
|
|
||||||
lblDate.setForeground(Color.WHITE);
|
|
||||||
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDate.setBounds(238, 18, 326, 21);
|
|
||||||
frame.getContentPane().add(lblDate);
|
|
||||||
frame.setLocationRelativeTo(null);
|
|
||||||
frame.revalidate();
|
|
||||||
frame.setLocation(100,150);
|
|
||||||
frame.setAutoRequestFocus(false);
|
|
||||||
frame.setVisible(true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Methods
|
|
||||||
public static String avgTimeOnStreet(Street street) {
|
|
||||||
int sum = 0;
|
|
||||||
int counter = 1;
|
|
||||||
for (Campaign campaign : listOfCampaigns)
|
|
||||||
for (Vehicle vehicle : campaign.getArrivedVehicles())
|
|
||||||
if (vehicle.hasCrossedStreet(street)){
|
|
||||||
sum += vehicle.getTimeOnStreet(street);
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
sum /= counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return street.getFastestTimeOfTravel(new Bus());
|
|
||||||
return String.format("%02d:%02d", hours, minutes);
|
|
||||||
}
|
|
||||||
private static int busesInDistrict(District district){
|
|
||||||
int buses = 0;
|
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]){
|
|
||||||
buses += campaign.getNumberOfBusses();
|
|
||||||
}
|
|
||||||
return buses;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int getPercentArrival(District district) {
|
|
||||||
int sum = 0;
|
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
|
||||||
sum += campaign.getPercentArrived();
|
|
||||||
}
|
|
||||||
return sum/campPerDistrict[district.ordinal()].size();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getAvgTimeOfTrip(District district){
|
|
||||||
int sum = 0;
|
|
||||||
int counter = 1;
|
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
|
||||||
for (Vehicle vehicle : campaign.getVehicles()) {
|
|
||||||
if (vehicle.isArrivedToDest()) {
|
|
||||||
long minutes = (vehicle.getTimeOfArrival().getTime() - vehicle.getTimeStartedMoving().getTime())/60000;
|
|
||||||
sum+= minutes;
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sum = sum /counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return " n/a";
|
|
||||||
return String.format("%2d:%02d", hours,minutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Route getShortestRoute(Campaign campaign, Mashier mashier) {
|
|
||||||
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
|
||||||
Route route = null;
|
|
||||||
double min = Double.MAX_VALUE;
|
|
||||||
for (Route r : routes) {
|
|
||||||
if (r.getMashier() == mashier){
|
|
||||||
if (r.getTotalLength() < min) {
|
|
||||||
min = r.getTotalLength();
|
|
||||||
route = r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return route;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Route[] getRoutesToDistrict(District district) {
|
|
||||||
ArrayList<Route> routes = new ArrayList<>();
|
|
||||||
for (Route route : stdRoutes) {
|
|
||||||
if (route.getHotelArea() == district) {
|
|
||||||
routes.add(route);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Route[] routesArray = new Route[routes.size()];
|
|
||||||
return routes.toArray(routesArray);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,224 +0,0 @@
|
|||||||
import java.awt.EventQueue;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.ListSelectionModel;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.DropMode;
|
|
||||||
import javax.swing.JTextPane;
|
|
||||||
|
|
||||||
public class GUI_ViewBuses {
|
|
||||||
|
|
||||||
private JFrame frame;
|
|
||||||
private ArrayList<Vehicle> vehicles = new ArrayList<>();
|
|
||||||
private ArrayList<Vehicle> vehiclesAlazizya = new ArrayList<>();
|
|
||||||
private ArrayList<Vehicle> vehiclesAlhijra = new ArrayList<>();
|
|
||||||
private ArrayList<Vehicle> vehiclesAlmansoor = new ArrayList<>();
|
|
||||||
private Date currenttimeManager;
|
|
||||||
private JTable table;
|
|
||||||
private Object[][] busData;
|
|
||||||
private String[] busColNames = {"ID", "Street", "location","Progress", "trip time", "Arrive Time"};
|
|
||||||
private JButton Alazizya;
|
|
||||||
private JButton Alhijra;
|
|
||||||
private JButton Almansoor;
|
|
||||||
private JLabel lblTime;
|
|
||||||
private JLabel lblDate;
|
|
||||||
private JLabel lblStatus;
|
|
||||||
private JLabel lblDestination;
|
|
||||||
private JLabel lblDistrict;
|
|
||||||
private JLabel lblDistrictValue;
|
|
||||||
private JTextPane textPane;
|
|
||||||
|
|
||||||
|
|
||||||
public GUI_ViewBuses(ArrayList<Campaign> campaign , Date currenttimeManager) {
|
|
||||||
for (Campaign camp : campaign) {
|
|
||||||
switch (camp.getHotelDistrict()) {
|
|
||||||
case ALAZIZIYA:
|
|
||||||
vehiclesAlazizya.add(camp.getVehicles().get(0));
|
|
||||||
break;
|
|
||||||
case ALHIJRA:
|
|
||||||
vehiclesAlhijra.add(camp.getVehicles().get(0));
|
|
||||||
break;
|
|
||||||
case ALMANSOOR:
|
|
||||||
vehiclesAlmansoor.add(camp.getVehicles().get(0));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.currenttimeManager = currenttimeManager;
|
|
||||||
makeFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void makeFrame() {
|
|
||||||
frame = new JFrame("Buses");
|
|
||||||
|
|
||||||
table = new JTable(busData,busColNames);
|
|
||||||
table.setColumnSelectionAllowed(true);
|
|
||||||
table.setCellSelectionEnabled(true);
|
|
||||||
DefaultTableModel model = new DefaultTableModel();
|
|
||||||
model.setColumnIdentifiers(busColNames);
|
|
||||||
ListSelectionModel model2 = table.getSelectionModel();
|
|
||||||
model2.addListSelectionListener(e -> {
|
|
||||||
if (!model2.isSelectionEmpty()) {
|
|
||||||
int row = model2.getMinSelectionIndex();
|
|
||||||
textPane.setText(((Bus)vehicles.get(row)).toString());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
table.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
table.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
table.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
table.setModel(new DefaultTableModel(busData ,busColNames));
|
|
||||||
table.setBackground(new Color(17,17,17));
|
|
||||||
table.setForeground(Color.WHITE);
|
|
||||||
table.setGridColor(new Color(102, 102, 102));
|
|
||||||
table.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
table.setRowHeight(25);
|
|
||||||
table.setAutoCreateRowSorter(true);
|
|
||||||
table.revalidate();
|
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane(table);
|
|
||||||
scrollPane.getVerticalScrollBar().setBackground(new Color(17,17,17));
|
|
||||||
scrollPane.setBounds(20, 24, 887, 236);
|
|
||||||
|
|
||||||
frame.getContentPane().setBackground(new Color(50,50,50));
|
|
||||||
frame.getContentPane().setForeground(new Color(0, 0, 0));
|
|
||||||
frame.setBounds(100,100,972,454);
|
|
||||||
frame.getContentPane().setLayout(null);
|
|
||||||
frame.setLocationRelativeTo(null);
|
|
||||||
frame.getContentPane().add(scrollPane);
|
|
||||||
|
|
||||||
Alazizya = new JButton("Alazizya");
|
|
||||||
Alazizya.setBackground(new Color(9,9,9));
|
|
||||||
Alazizya.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
Alazizya.setForeground(Color.white);
|
|
||||||
Alazizya.setBounds(20, 366, 116, 23);
|
|
||||||
Alazizya.addActionListener(e -> {
|
|
||||||
if (vehiclesAlazizya.get(0).getRoute() != null)
|
|
||||||
updateVehicles(vehiclesAlazizya);
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(Alazizya);
|
|
||||||
|
|
||||||
Alhijra = new JButton("Alhijra");
|
|
||||||
Alhijra.setBackground(new Color(9,9,9));
|
|
||||||
Alhijra.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
Alhijra.setForeground(Color.white);
|
|
||||||
Alhijra.setBounds(20, 269, 116, 23);
|
|
||||||
Alhijra.addActionListener(e -> {
|
|
||||||
if (vehiclesAlhijra.get(0).getRoute() != null)
|
|
||||||
updateVehicles(vehiclesAlhijra);
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(Alhijra);
|
|
||||||
|
|
||||||
Almansoor = new JButton("Almansoor");
|
|
||||||
Almansoor.setBackground(new Color(9,9,9));
|
|
||||||
Almansoor.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
Almansoor.setForeground(Color.white);
|
|
||||||
Almansoor.setBounds(20, 316, 116, 23);
|
|
||||||
Almansoor.addActionListener(e -> {
|
|
||||||
if (vehiclesAlmansoor.get(0).getRoute() != null)
|
|
||||||
updateVehicles(vehiclesAlmansoor);
|
|
||||||
});
|
|
||||||
frame.getContentPane().add(Almansoor);
|
|
||||||
|
|
||||||
lblTime = new JLabel("Time:");
|
|
||||||
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime.setForeground(new Color(255, 255, 255));
|
|
||||||
lblTime.setBounds(180, 273, 72, 14);
|
|
||||||
frame.getContentPane().add(lblTime);
|
|
||||||
|
|
||||||
lblStatus = new JLabel("Status:");
|
|
||||||
lblStatus.setForeground(new Color(255, 255, 255));
|
|
||||||
lblStatus.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblStatus.setBounds(180, 317, 72, 18);
|
|
||||||
frame.getContentPane().add(lblStatus);
|
|
||||||
|
|
||||||
lblDate = new JLabel(currenttimeManager.toString());
|
|
||||||
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDate.setForeground(Color.WHITE);
|
|
||||||
lblDate.setBounds(235, 270, 326, 21);
|
|
||||||
frame.getContentPane().add(lblDate);
|
|
||||||
|
|
||||||
lblDestination = new JLabel();
|
|
||||||
lblDestination.setForeground(Color.WHITE);
|
|
||||||
lblDestination.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDestination.setBounds(235, 317, 184, 18);
|
|
||||||
frame.getContentPane().add(lblDestination);
|
|
||||||
Calendar cal = new GregorianCalendar();
|
|
||||||
cal.setTime(currenttimeManager);
|
|
||||||
if (cal.get(Calendar.DAY_OF_MONTH) == 9)
|
|
||||||
lblDestination.setText("Heading to Arafat");
|
|
||||||
else lblDestination.setText("Heading to Hotels");
|
|
||||||
|
|
||||||
lblDistrict = new JLabel("District: ");
|
|
||||||
lblDistrict.setForeground(Color.WHITE);
|
|
||||||
lblDistrict.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDistrict.setBackground(Color.LIGHT_GRAY);
|
|
||||||
lblDistrict.setBounds(180, 370, 72, 14);
|
|
||||||
frame.getContentPane().add(lblDistrict);
|
|
||||||
|
|
||||||
lblDistrictValue = new JLabel();
|
|
||||||
lblDistrictValue.setForeground(Color.WHITE);
|
|
||||||
lblDistrictValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDistrictValue.setBackground(Color.BLACK);
|
|
||||||
lblDistrictValue.setBounds(247, 371, 129, 12);
|
|
||||||
frame.getContentPane().add(lblDistrictValue);
|
|
||||||
|
|
||||||
textPane = new JTextPane();
|
|
||||||
textPane.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
textPane.setForeground(Color.WHITE);
|
|
||||||
textPane.setBackground(Color.BLACK);
|
|
||||||
|
|
||||||
JScrollPane scrolltext = new JScrollPane(textPane);
|
|
||||||
scrolltext.setBounds(523, 271, 384, 133);
|
|
||||||
frame.getContentPane().add(scrolltext);
|
|
||||||
|
|
||||||
|
|
||||||
frame.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void updateTable() {
|
|
||||||
busData = new Object[vehicles.size()][6];
|
|
||||||
for (int i = 0; i < vehicles.size(); i++) {
|
|
||||||
busData[i][0] = vehicles.get(i).getUID();
|
|
||||||
if (vehicles.get(i).isMoving())
|
|
||||||
busData[i][1] = vehicles.get(i).getCurrentStreet().getName();
|
|
||||||
else busData[i][1] = "Not Moving";
|
|
||||||
busData[i][2] = vehicles.get(i).getCurrentLocation();
|
|
||||||
if (vehicles.get(i).getProgress() != null)
|
|
||||||
busData[i][3] = vehicles.get(i).getProgress();
|
|
||||||
else busData[i][3] = "%0";
|
|
||||||
busData[i][4] = vehicles.get(i).getTripTime();
|
|
||||||
if (vehicles.get(i).isArrivedToDest())
|
|
||||||
busData[i][5] = getShortTime(vehicles.get(i).getTimeOfArrival());
|
|
||||||
else busData[i][5] = "NOT Arrived";
|
|
||||||
}
|
|
||||||
table.setModel(new DefaultTableModel(busData ,busColNames));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void updateVehicles(ArrayList<Vehicle> vehiclesDistrict) {
|
|
||||||
vehicles.clear();
|
|
||||||
vehicles.addAll(vehiclesDistrict);
|
|
||||||
lblDistrictValue.setText(((Bus)vehiclesDistrict.get(0)).getCampaign().getHotelDistrict().name());
|
|
||||||
lblDate.setText(currenttimeManager.toString());
|
|
||||||
updateTable();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getShortTime(Date time) {
|
|
||||||
Calendar cal = new GregorianCalendar();
|
|
||||||
cal.setTime(time);
|
|
||||||
return String.format("%02d:%02d", cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,127 +0,0 @@
|
|||||||
import java.awt.Color;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.ListSelectionModel;
|
|
||||||
import javax.swing.event.ListSelectionListener;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
import javax.swing.JComboBox;
|
|
||||||
import javax.swing.DefaultComboBoxModel;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.JScrollBar;
|
|
||||||
|
|
||||||
public class GUI_ViewRoute {
|
|
||||||
JFrame frame;
|
|
||||||
private String[] routeColNames = {"Num", "Status", "Length","Capacity", "Best Time", "Used By"};
|
|
||||||
private Object[][] routeData;
|
|
||||||
private JTable table;
|
|
||||||
private Route[] stdRoute;
|
|
||||||
private Date currenttimeManager;
|
|
||||||
private ArrayList<Campaign> listOfCampaigns;
|
|
||||||
private JTextField txtStreets;
|
|
||||||
private JLabel lblDate;
|
|
||||||
private JLabel lblTime;
|
|
||||||
|
|
||||||
public GUI_ViewRoute(Route[] stdRoute, ArrayList<Campaign> listOfCampaigns, Date currenttimeManager) {
|
|
||||||
this.stdRoute = stdRoute;
|
|
||||||
this.listOfCampaigns = listOfCampaigns;
|
|
||||||
this.currenttimeManager = currenttimeManager;
|
|
||||||
makeFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void makeFrame() {
|
|
||||||
frame = new JFrame("Routes");
|
|
||||||
frame.getContentPane().setBackground(new Color(50,50,50));
|
|
||||||
frame.getContentPane().setForeground(new Color(0, 0, 0));
|
|
||||||
frame.setBounds(100,100,815,480);
|
|
||||||
frame.getContentPane().setLayout(null);
|
|
||||||
frame.setLocationRelativeTo(null);
|
|
||||||
|
|
||||||
routeData = new Object[stdRoute.length][6];
|
|
||||||
for (int i = 0; i < stdRoute.length; i++) {
|
|
||||||
routeData[i][0] = i;
|
|
||||||
routeData[i][1] = String.format("%s : %s",stdRoute[i].getHotelArea(),stdRoute[i].getMashier());
|
|
||||||
routeData[i][2] = stdRoute[i].getTotalLength();
|
|
||||||
routeData[i][3] = String.format("%.2f",stdRoute[i].capcity());
|
|
||||||
routeData[i][4] = stdRoute[i].getFastestTimeOfTravel(new Bus());
|
|
||||||
int count = 0;
|
|
||||||
for (Campaign campaign : listOfCampaigns)
|
|
||||||
if (campaign.getRoute() == stdRoute[i])
|
|
||||||
count += campaign.getVehicles().size();
|
|
||||||
|
|
||||||
routeData[i][5] = String.format("%d buses", count);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table = new JTable(routeData,routeColNames);
|
|
||||||
table.setModel(new DefaultTableModel(routeData,routeColNames));
|
|
||||||
table.getColumnModel().getColumn(0).setPreferredWidth(30);
|
|
||||||
table.getColumnModel().getColumn(1).setPreferredWidth(190);
|
|
||||||
table.getColumnModel().getColumn(2).setPreferredWidth(55);
|
|
||||||
table.getColumnModel().getColumn(3).setPreferredWidth(57);
|
|
||||||
table.getColumnModel().getColumn(5).setPreferredWidth(75);
|
|
||||||
table.setColumnSelectionAllowed(true);
|
|
||||||
table.setCellSelectionEnabled(true);
|
|
||||||
DefaultTableModel model = new DefaultTableModel();
|
|
||||||
model.setColumnIdentifiers(routeColNames);
|
|
||||||
ListSelectionModel model2 = table.getSelectionModel();
|
|
||||||
model2.addListSelectionListener(e -> {
|
|
||||||
int row = model2.getMinSelectionIndex();
|
|
||||||
String streets = "";
|
|
||||||
for (Street street : stdRoute[row].getStreets())
|
|
||||||
streets += street.getName().name() +" >> ";
|
|
||||||
if (stdRoute[row].getMashier() == Mashier.ARAFAT)
|
|
||||||
txtStreets.setText(stdRoute[row].getHotelArea().name()+" >> "+streets+stdRoute[row].getMashier().name());
|
|
||||||
else txtStreets.setText(stdRoute[row].getMashier().name()+" >> "+streets+stdRoute[row].getHotelArea().name());
|
|
||||||
});
|
|
||||||
table.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
table.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
table.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
table.setBackground(new Color(17,17,17));
|
|
||||||
table.setForeground(Color.WHITE);
|
|
||||||
table.setGridColor(new Color(102, 102, 102));
|
|
||||||
table.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
table.setRowHeight(25);
|
|
||||||
table.setAutoCreateRowSorter(true);
|
|
||||||
table.revalidate();
|
|
||||||
|
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane(table);
|
|
||||||
scrollPane.setBounds(10, 44, 755, 300);
|
|
||||||
frame.getContentPane().add(scrollPane);
|
|
||||||
|
|
||||||
txtStreets = new JTextField("Select Route");
|
|
||||||
txtStreets.setBackground(Color.BLACK);
|
|
||||||
txtStreets.setForeground(Color.WHITE);
|
|
||||||
txtStreets.setFont(new Font("Rockwell", Font.PLAIN, 17));
|
|
||||||
txtStreets.setBounds(10, 382, 755, 48);
|
|
||||||
frame.getContentPane().add(txtStreets);
|
|
||||||
txtStreets.setColumns(10);
|
|
||||||
|
|
||||||
lblTime = new JLabel("Time:");
|
|
||||||
lblTime.setForeground(Color.WHITE);
|
|
||||||
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime.setBounds(10, 11, 72, 20);
|
|
||||||
frame.getContentPane().add(lblTime);
|
|
||||||
|
|
||||||
lblDate = new JLabel(currenttimeManager.toString());
|
|
||||||
lblDate.setForeground(Color.WHITE);
|
|
||||||
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDate.setBounds(61, 11, 326, 20);
|
|
||||||
frame.getContentPane().add(lblDate);
|
|
||||||
|
|
||||||
JLabel lblStreets = new JLabel("Streets :");
|
|
||||||
lblStreets.setForeground(Color.WHITE);
|
|
||||||
lblStreets.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblStreets.setBounds(10, 355, 72, 20);
|
|
||||||
frame.getContentPane().add(lblStreets);
|
|
||||||
|
|
||||||
frame.setVisible(true);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,272 +0,0 @@
|
|||||||
import java.awt.Color;
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.JTable;
|
|
||||||
import javax.swing.event.ListSelectionEvent;
|
|
||||||
import javax.swing.event.ListSelectionListener;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
|
|
||||||
import javax.swing.JList;
|
|
||||||
import javax.swing.AbstractListModel;
|
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
|
|
||||||
public class GUI_ViewStreet {
|
|
||||||
private JFrame frame;
|
|
||||||
private Street street;
|
|
||||||
private ArrayList<Vehicle> vehicles = new ArrayList<>();
|
|
||||||
private Street[] stdStreet = new Street[StreetNames.values().length];
|
|
||||||
private Date currenttimeManager;
|
|
||||||
private Object[][] vehicleData;
|
|
||||||
private String[] vehicleColNames = {"ID", "District", "location","Progress", "trip time"};
|
|
||||||
private JTable table;
|
|
||||||
private JLabel lblCapcityValue;
|
|
||||||
private JLabel lblDate;
|
|
||||||
private JLabel lblLanesValue;
|
|
||||||
private JLabel lblNumVehicles;
|
|
||||||
private JLabel lblLengthValue;
|
|
||||||
private JTextField txtLow;
|
|
||||||
private JTextField[] textFieldArray = new JTextField[20];
|
|
||||||
private JTextField txtHigh;
|
|
||||||
|
|
||||||
public GUI_ViewStreet(Street[] streets, Date currenttimeManager) {
|
|
||||||
stdStreet = streets.clone();
|
|
||||||
this.currenttimeManager = (Date) currenttimeManager.clone();
|
|
||||||
makeFrame();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void makeFrame() {
|
|
||||||
//street = stdStreet[0];
|
|
||||||
frame = new JFrame("Streets");
|
|
||||||
frame.getContentPane().setBackground(new Color(50,50,50));
|
|
||||||
frame.getContentPane().setForeground(new Color(0, 0, 0));
|
|
||||||
frame.setBounds(100,100,815,480);
|
|
||||||
frame.getContentPane().setLayout(null);
|
|
||||||
frame.setLocationRelativeTo(null);
|
|
||||||
|
|
||||||
vehicleData = new Object[vehicles.size()][6];
|
|
||||||
for (int i = 0; i < vehicles.size(); i++) {
|
|
||||||
vehicleData[i][0] = vehicles.get(i).getUID();
|
|
||||||
if (vehicles.get(i) instanceof Bus)
|
|
||||||
vehicleData[i][1] = ((Bus)vehicles.get(i)).getCampaign().getHotelDistrict().name();
|
|
||||||
else vehicleData[i][1] = "Local Vehicle";
|
|
||||||
vehicleData[i][2] = vehicles.get(i).getCurrentLocation();
|
|
||||||
vehicleData[i][3] = vehicles.get(i).getProgress();
|
|
||||||
vehicleData[i][4] = vehicles.get(i).getTripTime();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
table = new JTable(vehicleData,vehicleColNames);
|
|
||||||
table.setColumnSelectionAllowed(true);
|
|
||||||
table.setCellSelectionEnabled(true);
|
|
||||||
DefaultTableModel model = new DefaultTableModel();
|
|
||||||
model.setColumnIdentifiers(vehicleColNames);
|
|
||||||
table.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
table.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
table.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
table.setModel(new DefaultTableModel(vehicleData ,vehicleColNames));
|
|
||||||
table.setBackground(new Color(17,17,17));
|
|
||||||
table.setForeground(Color.WHITE);
|
|
||||||
table.setGridColor(new Color(102, 102, 102));
|
|
||||||
table.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
table.setRowHeight(25);
|
|
||||||
table.setAutoCreateRowSorter(true);
|
|
||||||
table.revalidate();
|
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane(table);
|
|
||||||
scrollPane.setBounds(10, 194, 755, 236);
|
|
||||||
frame.getContentPane().add(scrollPane);
|
|
||||||
|
|
||||||
JList list = new JList();
|
|
||||||
list.setFont(new Font("Tahoma", Font.PLAIN, 14));
|
|
||||||
list.setBackground(Color.GRAY);
|
|
||||||
list.setModel(new AbstractListModel() {
|
|
||||||
Street[] streets = stdStreet;
|
|
||||||
public int getSize() {
|
|
||||||
return stdStreet.length;
|
|
||||||
}
|
|
||||||
public Object getElementAt(int index) {
|
|
||||||
return streets[index].getName().name();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
list.addListSelectionListener(
|
|
||||||
new ListSelectionListener() {
|
|
||||||
public void valueChanged(ListSelectionEvent e) {
|
|
||||||
street = stdStreet[list.getSelectedIndex()];
|
|
||||||
vehicles = street.getVehicles();
|
|
||||||
updateTable();
|
|
||||||
for (int i = 0; i < textFieldArray.length; i++) {
|
|
||||||
int colorFactor = (int)((1-capcityPoint(i))*255);
|
|
||||||
textFieldArray[i].setBackground(new Color(255,colorFactor,0));
|
|
||||||
}
|
|
||||||
lblCapcityValue.setText(String.format("%%%d", street.getPercentRemainingCapacity()));
|
|
||||||
lblDate.setText(currenttimeManager.toString());
|
|
||||||
lblNumVehicles.setText(String.format("%d", street.getVehicles().size()));
|
|
||||||
lblLengthValue.setText(String.format("%.2f", street.getLength()));
|
|
||||||
lblLanesValue.setText(String.format("%d", street.getNumberOfLanes()));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
list.setBounds(10, 11, 118, 146);
|
|
||||||
JScrollPane scrollList = new JScrollPane(list);
|
|
||||||
scrollList.setBounds(10, 11, 173, 172);
|
|
||||||
frame.getContentPane().add(scrollList);
|
|
||||||
|
|
||||||
txtLow = new JTextField("Low");
|
|
||||||
txtLow.setFont(new Font("Rockwell", Font.BOLD, 13));
|
|
||||||
txtLow.setDisabledTextColor(Color.BLACK);
|
|
||||||
txtLow.setEnabled(false);
|
|
||||||
txtLow.setEditable(false);
|
|
||||||
txtLow.setBackground(Color.YELLOW);
|
|
||||||
txtLow.setBounds(710, 105, 40, 20);
|
|
||||||
frame.getContentPane().add(txtLow);
|
|
||||||
|
|
||||||
txtHigh = new JTextField("High");
|
|
||||||
txtHigh.setFont(new Font("Rockwell", Font.BOLD, 13));
|
|
||||||
txtHigh.setDisabledTextColor(Color.BLACK);
|
|
||||||
txtHigh.setEnabled(false);
|
|
||||||
txtHigh.setEditable(false);
|
|
||||||
txtHigh.setColumns(0);
|
|
||||||
txtHigh.setBackground(Color.RED);
|
|
||||||
txtHigh.setBounds(710, 80, 40, 20);
|
|
||||||
frame.getContentPane().add(txtHigh);
|
|
||||||
|
|
||||||
JLabel lblTime = new JLabel("Time:");
|
|
||||||
lblTime.setForeground(Color.WHITE);
|
|
||||||
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime.setBounds(193, 11, 72, 20);
|
|
||||||
frame.getContentPane().add(lblTime);
|
|
||||||
|
|
||||||
lblDate = new JLabel(currenttimeManager.toString());
|
|
||||||
lblDate.setForeground(Color.WHITE);
|
|
||||||
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDate.setBounds(243, 11, 326, 20);
|
|
||||||
frame.getContentPane().add(lblDate);
|
|
||||||
|
|
||||||
JLabel lblStatus = new JLabel("Status:");
|
|
||||||
lblStatus.setForeground(Color.WHITE);
|
|
||||||
lblStatus.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblStatus.setBounds(511, 11, 72, 20);
|
|
||||||
frame.getContentPane().add(lblStatus);
|
|
||||||
|
|
||||||
JLabel lblDestination = new JLabel();
|
|
||||||
lblDestination.setForeground(Color.WHITE);
|
|
||||||
lblDestination.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDestination.setBounds(568, 11, 184, 20);
|
|
||||||
Calendar cal = new GregorianCalendar();
|
|
||||||
cal.setTime(currenttimeManager);
|
|
||||||
if (cal.get(Calendar.DAY_OF_MONTH) == 9)
|
|
||||||
lblDestination.setText("Heading to Arafat");
|
|
||||||
else lblDestination.setText("Heading to Hotels");
|
|
||||||
frame.getContentPane().add(lblDestination);
|
|
||||||
|
|
||||||
JLabel lblCapcity = new JLabel("Capcity:");
|
|
||||||
lblCapcity.setForeground(Color.WHITE);
|
|
||||||
lblCapcity.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblCapcity.setBounds(193, 45, 72, 20);
|
|
||||||
frame.getContentPane().add(lblCapcity);
|
|
||||||
|
|
||||||
lblCapcityValue = new JLabel();
|
|
||||||
lblCapcityValue.setForeground(Color.WHITE);
|
|
||||||
lblCapcityValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblCapcityValue.setBounds(258, 45, 48, 20);
|
|
||||||
frame.getContentPane().add(lblCapcityValue);
|
|
||||||
|
|
||||||
JLabel lblVehicles = new JLabel("Vehicles: ");
|
|
||||||
lblVehicles.setForeground(Color.WHITE);
|
|
||||||
lblVehicles.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblVehicles.setBounds(370, 45, 72, 20);
|
|
||||||
frame.getContentPane().add(lblVehicles);
|
|
||||||
|
|
||||||
lblNumVehicles = new JLabel();
|
|
||||||
lblNumVehicles.setForeground(Color.WHITE);
|
|
||||||
lblNumVehicles.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblNumVehicles.setBounds(441, 45, 61, 20);
|
|
||||||
frame.getContentPane().add(lblNumVehicles);
|
|
||||||
|
|
||||||
JLabel lblLength = new JLabel("Length:");
|
|
||||||
lblLength.setForeground(Color.WHITE);
|
|
||||||
lblLength.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblLength.setBounds(193, 85, 61, 20);
|
|
||||||
frame.getContentPane().add(lblLength);
|
|
||||||
|
|
||||||
lblLengthValue = new JLabel();
|
|
||||||
lblLengthValue.setForeground(Color.WHITE);
|
|
||||||
lblLengthValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblLengthValue.setBounds(253, 85, 93, 20);
|
|
||||||
frame.getContentPane().add(lblLengthValue);
|
|
||||||
|
|
||||||
JLabel lblLanes = new JLabel("Lanes");
|
|
||||||
lblLanes.setForeground(Color.WHITE);
|
|
||||||
lblLanes.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblLanes.setBounds(370, 85, 61, 20);
|
|
||||||
frame.getContentPane().add(lblLanes);
|
|
||||||
|
|
||||||
lblLanesValue = new JLabel();
|
|
||||||
lblLanesValue.setForeground(Color.WHITE);
|
|
||||||
lblLanesValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblLanesValue.setBounds(431, 85, 26, 20);
|
|
||||||
frame.getContentPane().add(lblLanesValue);
|
|
||||||
|
|
||||||
JLabel lbl100 = new JLabel();
|
|
||||||
lbl100.setText("%100");
|
|
||||||
lbl100.setForeground(Color.WHITE);
|
|
||||||
lbl100.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lbl100.setBounds(715, 170, 45, 15);
|
|
||||||
frame.getContentPane().add(lbl100);
|
|
||||||
|
|
||||||
JLabel lbl0 = new JLabel();
|
|
||||||
lbl0.setText("%0");
|
|
||||||
lbl0.setForeground(Color.WHITE);
|
|
||||||
lbl0.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lbl0.setBounds(193, 170, 25, 15);
|
|
||||||
frame.getContentPane().add(lbl0);
|
|
||||||
|
|
||||||
JLabel lblCapcityPoint = new JLabel("CapcityPoint:");
|
|
||||||
lblCapcityPoint.setForeground(Color.WHITE);
|
|
||||||
lblCapcityPoint.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblCapcityPoint.setBounds(193, 120, 101, 20);
|
|
||||||
frame.getContentPane().add(lblCapcityPoint);
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < textFieldArray.length; i++) {
|
|
||||||
textFieldArray[i] = new JTextField();
|
|
||||||
textFieldArray[i].setEnabled(false);
|
|
||||||
textFieldArray[i].setEditable(false);
|
|
||||||
textFieldArray[i].setBackground(new Color(70, 70, 70));
|
|
||||||
textFieldArray[i].setBounds(190+i*28, 142, 28, 20);
|
|
||||||
frame.getContentPane().add(textFieldArray[i]);
|
|
||||||
textFieldArray[i].setColumns(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
frame.setVisible(true);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateTable() {
|
|
||||||
if (vehicles.isEmpty()) return;
|
|
||||||
vehicleData = new Object[vehicles.size()][6];
|
|
||||||
for (int i = 0; i < vehicles.size(); i++) {
|
|
||||||
vehicleData[i][0] = vehicles.get(i).getUID();// TODO: There is an Exception error here;
|
|
||||||
if (vehicles.get(i) instanceof Bus)
|
|
||||||
vehicleData[i][1] = ((Bus)vehicles.get(i)).getCampaign().getHotelDistrict().name();
|
|
||||||
else vehicleData[i][1] = "Local Vehicle";
|
|
||||||
vehicleData[i][2] = vehicles.get(i).getCurrentLocation();
|
|
||||||
vehicleData[i][3] = vehicles.get(i).getProgress();
|
|
||||||
vehicleData[i][4] = vehicles.get(i).getTripTime();
|
|
||||||
|
|
||||||
}
|
|
||||||
table.setModel(new DefaultTableModel(vehicleData ,vehicleColNames));
|
|
||||||
}
|
|
||||||
|
|
||||||
public double capcityPoint(int x) {
|
|
||||||
double part = street.getLength()/20;
|
|
||||||
double capcity = street.capcityPoint(x*part, (x+1)*part);
|
|
||||||
|
|
||||||
return capcity;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +1,7 @@
|
|||||||
import javax.swing.*;
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class MakkahCity {
|
public class MakkahCity {
|
||||||
|
|
||||||
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
||||||
@ -30,33 +26,9 @@ public class MakkahCity {
|
|||||||
|
|
||||||
private static final InputListener inputListener = new InputListener();
|
private static final InputListener inputListener = new InputListener();
|
||||||
private static final Thread t = new Thread(inputListener,"InputThread-Makkah");
|
private static final Thread t = new Thread(inputListener,"InputThread-Makkah");
|
||||||
private static boolean isAllRoutSet;
|
|
||||||
private static final DataManeger dataManeger = new DataManeger();
|
|
||||||
private static volatile boolean done_flag;
|
|
||||||
//GUI
|
|
||||||
private static boolean exit_flag;
|
|
||||||
private static boolean pause_flag;
|
|
||||||
private static Checkbox autoModeCheckBox;
|
|
||||||
private static JFrame makkahFrame;
|
|
||||||
private static JTable streetTable;
|
|
||||||
private static JTable districtTable;
|
|
||||||
private static JLabel lblDate;
|
|
||||||
private static JLabel lblDestination;
|
|
||||||
private static JLabel lblNumOfBuses;
|
|
||||||
private static JLabel lblNumOfDonebuses;
|
|
||||||
private static JLabel lblMaximumTripValue;
|
|
||||||
private static JLabel lblMinimumTripValue;
|
|
||||||
private static JLabel lblBusesArrivedInTheLastHourValue;
|
|
||||||
private static JLabel lblAverageTripForLastHourValue;
|
|
||||||
private static JButton btnPause;
|
|
||||||
private static JLabel lblAverageTimeForTheTrip;
|
|
||||||
private static JLabel lblArrivedToArafatTime;
|
|
||||||
private static JLabel lblArrivedToHotelsTime;
|
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
//TODO: fix state errors
|
|
||||||
t.start();
|
t.start();
|
||||||
//Gen Camp
|
//Gen Camp
|
||||||
campPerDistrict[District.ALMANSOOR.ordinal()] = new ArrayList<>();
|
campPerDistrict[District.ALMANSOOR.ordinal()] = new ArrayList<>();
|
||||||
@ -66,8 +38,6 @@ public class MakkahCity {
|
|||||||
generateCamps(District.ALMANSOOR, (int)getRandom(1600, 1800));
|
generateCamps(District.ALMANSOOR, (int)getRandom(1600, 1800));
|
||||||
generateCamps(District.ALHIJRA, (int)getRandom(1400, 1600));
|
generateCamps(District.ALHIJRA, (int)getRandom(1400, 1600));
|
||||||
|
|
||||||
Collections.shuffle(listOfCampaigns);
|
|
||||||
|
|
||||||
fillBusesToList();
|
fillBusesToList();
|
||||||
|
|
||||||
makeStreets();
|
makeStreets();
|
||||||
@ -76,375 +46,22 @@ public class MakkahCity {
|
|||||||
|
|
||||||
makeRoutes();
|
makeRoutes();
|
||||||
|
|
||||||
//GUI
|
|
||||||
autoModeCheckBox = new Checkbox();
|
|
||||||
makkahFrame = new JFrame("Hajj Simulation");
|
|
||||||
|
|
||||||
//Street data and district for GUI table
|
|
||||||
|
|
||||||
//Street data
|
|
||||||
Object[][] streetData = new Object[stdStreet.length][6];
|
|
||||||
String[] streetColNames = {"Street Name", "Street Load %", "Total", "Buses",
|
|
||||||
"Local Vehicles","Avg. Time"};
|
|
||||||
|
|
||||||
for (int i = 0; i < stdStreet.length; i++) {
|
|
||||||
streetData[i][0] = stdStreet[i].getName().name();
|
|
||||||
streetData[i][1] = stdStreet[i].getPercentRemainingCapacity();
|
|
||||||
streetData[i][2] = stdStreet[i].getVehicles().size();
|
|
||||||
streetData[i][3] = stdStreet[i].getNumberOfBuses();
|
|
||||||
streetData[i][4] = stdStreet[i].getNumberOfLocalCars();
|
|
||||||
streetData[i][5] = avgTimeOnStreet(stdStreet[i]);
|
|
||||||
}
|
|
||||||
//District data
|
|
||||||
Object[][] districtData = new Object[campPerDistrict.length][7];
|
|
||||||
String[] districtColNames = {"District", "Campaigns", "Busses", "Arrival %",
|
|
||||||
"Avg. Time", "Best time to Arafat", "Best time to District"};
|
|
||||||
|
|
||||||
for (int i = 0; i < campPerDistrict.length; i++) {
|
|
||||||
districtData[i][0] = campPerDistrict[i].get(0).getHotelDistrict().name();
|
|
||||||
districtData[i][1] = campPerDistrict[i].size();
|
|
||||||
districtData[i][2] = busesInDistrict(District.values()[i]);
|
|
||||||
districtData[i][3] = getPercentArrival(District.values()[i]);
|
|
||||||
districtData[i][4] = getAvgTimeOfTrip(District.values()[i]);
|
|
||||||
districtData[i][5] = getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus());
|
|
||||||
districtData[i][6] = getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus());
|
|
||||||
}
|
|
||||||
|
|
||||||
//tables
|
|
||||||
|
|
||||||
//Street table
|
|
||||||
streetTable = new JTable(streetData,streetColNames);
|
|
||||||
streetTable.setEnabled(false);
|
|
||||||
DefaultTableModel model = new DefaultTableModel();
|
|
||||||
model.setColumnIdentifiers(streetColNames);
|
|
||||||
streetTable.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
streetTable.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
streetTable.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
streetTable.setBackground(new Color(17,17,17));
|
|
||||||
streetTable.setForeground(Color.white);
|
|
||||||
streetTable.setSelectionBackground(Color.RED);
|
|
||||||
streetTable.setGridColor(new Color(102, 102, 102));
|
|
||||||
streetTable.setSelectionForeground(Color.white);
|
|
||||||
streetTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
streetTable.setRowHeight(20);
|
|
||||||
streetTable.setAutoCreateRowSorter(true);
|
|
||||||
streetTable.getColumnModel().getColumn(0).setPreferredWidth(111);
|
|
||||||
streetTable.getColumnModel().getColumn(1).setPreferredWidth(46);
|
|
||||||
streetTable.getColumnModel().getColumn(2).setPreferredWidth(1);
|
|
||||||
streetTable.getColumnModel().getColumn(3).setPreferredWidth(0);
|
|
||||||
streetTable.getColumnModel().getColumn(4).setPreferredWidth(60);
|
|
||||||
streetTable.getColumnModel().getColumn(5).setPreferredWidth(0);
|
|
||||||
JScrollPane streetScroll = new JScrollPane(streetTable);
|
|
||||||
streetScroll.setBounds(22,100,809,269);
|
|
||||||
|
|
||||||
//District table
|
|
||||||
districtTable = new JTable(districtData,districtColNames);
|
|
||||||
districtTable.setEnabled(false);
|
|
||||||
districtTable.setForeground(new Color(255, 255, 255));
|
|
||||||
districtTable.getTableHeader().setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
districtTable.getTableHeader().setBackground(new Color(17,17,17));
|
|
||||||
districtTable.getTableHeader().setForeground(Color.WHITE);
|
|
||||||
districtTable.setBackground(new Color(17,17,17));
|
|
||||||
districtTable.setSelectionBackground(Color.RED);
|
|
||||||
model.setColumnIdentifiers(districtColNames);
|
|
||||||
districtTable.setSelectionForeground(Color.white);
|
|
||||||
districtTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
|
|
||||||
districtTable.setGridColor(new Color(102, 102, 102));
|
|
||||||
JScrollPane districtScroll = new JScrollPane(districtTable);
|
|
||||||
districtScroll.setEnabled(false);
|
|
||||||
districtTable.setAutoCreateRowSorter(true);
|
|
||||||
districtTable.setRowHeight(20);
|
|
||||||
districtTable.getColumnModel().getColumn(0).setPreferredWidth(43);
|
|
||||||
districtTable.getColumnModel().getColumn(1).setPreferredWidth(30);
|
|
||||||
districtTable.getColumnModel().getColumn(2).setPreferredWidth(0);
|
|
||||||
districtTable.getColumnModel().getColumn(3).setPreferredWidth(0);
|
|
||||||
districtTable.getColumnModel().getColumn(4).setPreferredWidth(0);
|
|
||||||
districtTable.getColumnModel().getColumn(5).setPreferredWidth(85);
|
|
||||||
districtTable.getColumnModel().getColumn(6).setPreferredWidth(93);
|
|
||||||
districtTable.revalidate();
|
|
||||||
districtScroll.setBounds(22,420,809,89);
|
|
||||||
|
|
||||||
//Buttons
|
|
||||||
JButton btnViewRoutes = new JButton("View Routes");
|
|
||||||
btnViewRoutes.setBounds(888, 33, 166, 29);
|
|
||||||
btnViewRoutes.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewRoutes.setBackground(new Color(9,9,9));
|
|
||||||
btnViewRoutes.setForeground(Color.white);
|
|
||||||
btnViewRoutes.addActionListener(e -> {
|
|
||||||
GUI_ViewRoute r = new GUI_ViewRoute(stdRoutes ,listOfCampaigns,currenttimeManager.getCurrentTime());
|
|
||||||
pause_flag = true;
|
|
||||||
btnPause.setText("Unpause");
|
|
||||||
});
|
|
||||||
JButton btnViewBuses = new JButton("View Buses");
|
|
||||||
btnViewBuses.setBounds(888, 73, 166, 29);
|
|
||||||
btnViewBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewBuses.setBackground(new Color(9,9,9));
|
|
||||||
btnViewBuses.setForeground(Color.white);
|
|
||||||
btnViewBuses.addActionListener(e -> {
|
|
||||||
GUI_ViewBuses t = new GUI_ViewBuses(listOfCampaigns , currenttimeManager.getCurrentTime());
|
|
||||||
pause_flag = true;
|
|
||||||
btnPause.setText("Unpause");
|
|
||||||
});
|
|
||||||
|
|
||||||
JButton btnViewReport = new JButton("View Report");
|
|
||||||
btnViewReport.setBounds(888, 153, 166, 29);
|
|
||||||
btnViewReport.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewReport.setBackground(new Color(9,9,9));
|
|
||||||
btnViewReport.setForeground(Color.white);
|
|
||||||
btnViewReport.addActionListener(e -> {
|
|
||||||
GUI_Report r = new GUI_Report(listOfCampaigns, stdRoutes, stdStreet, campPerDistrict, currenttimeManager.getCurrentTime());
|
|
||||||
pause_flag = true;
|
|
||||||
btnPause.setText("Unpause");
|
|
||||||
});
|
|
||||||
|
|
||||||
JButton btnViewStreet = new JButton("View Street");
|
|
||||||
btnViewStreet.setBounds(888, 113, 166, 29);
|
|
||||||
btnViewStreet.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnViewStreet.setBackground(new Color(9,9,9));
|
|
||||||
btnViewStreet.setForeground(Color.white);
|
|
||||||
btnViewStreet.addActionListener(e -> {
|
|
||||||
GUI_ViewStreet t = new GUI_ViewStreet(stdStreet,currenttimeManager.getCurrentTime());
|
|
||||||
pause_flag = true;
|
|
||||||
btnPause.setText("Unpause");
|
|
||||||
});
|
|
||||||
|
|
||||||
JButton btnExit = new JButton("Exit");
|
|
||||||
btnExit.setBackground(new Color(9,9,9));
|
|
||||||
btnExit.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnExit.setForeground(Color.white);
|
|
||||||
btnExit.setBounds(888, 623, 166, 29);
|
|
||||||
btnExit.addActionListener(actionEvent -> {
|
|
||||||
if (pause_flag || done_flag) System.exit(0);
|
|
||||||
else exit_flag = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
btnPause = new JButton("Pause");
|
|
||||||
btnPause.setBackground(new Color(9,9,9));
|
|
||||||
btnPause.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnPause.setForeground(Color.white);
|
|
||||||
btnPause.setBounds(888, 233, 166, 29);
|
|
||||||
btnPause.addActionListener(actionEvent -> {
|
|
||||||
if (!pause_flag) {
|
|
||||||
pause_flag = true;
|
|
||||||
btnPause.setText("Unpause");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pause_flag = false;
|
|
||||||
btnPause.setText("Pause");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
JButton btnBrowseHistory = new JButton("Browse History");
|
|
||||||
btnBrowseHistory.setBounds(888, 193, 166, 29);
|
|
||||||
btnBrowseHistory.setBackground(new Color(9,9,9));
|
|
||||||
btnBrowseHistory.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
btnBrowseHistory.setForeground(Color.white);
|
|
||||||
btnBrowseHistory.addActionListener(e -> {
|
|
||||||
GUI_History hist = new GUI_History(dataManeger.getStates());
|
|
||||||
pause_flag = true;
|
|
||||||
btnPause.setText("Unpause");
|
|
||||||
});
|
|
||||||
|
|
||||||
//Label
|
|
||||||
JLabel lblStreets = new JLabel("Streets");
|
|
||||||
lblStreets.setFont(new Font("Rockwell", Font.PLAIN, 24));
|
|
||||||
lblStreets.setForeground(new Color(255, 255, 255));
|
|
||||||
lblStreets.setBounds(22, 59, 208, 30);
|
|
||||||
|
|
||||||
JLabel lblDistrict = new JLabel("District");
|
|
||||||
lblDistrict.setFont(new Font("Rockwell", Font.PLAIN, 24));
|
|
||||||
lblDistrict.setForeground(new Color(255, 255, 255));
|
|
||||||
lblDistrict.setBounds(22, 380, 166, 29);
|
|
||||||
|
|
||||||
JLabel lblTime = new JLabel("Time:");
|
|
||||||
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblTime.setForeground(new Color(255, 255, 255));
|
|
||||||
lblTime.setBounds(22, 11, 72, 14);
|
|
||||||
|
|
||||||
JLabel lblStatus = new JLabel("Status:");
|
|
||||||
lblStatus.setForeground(new Color(255, 255, 255));
|
|
||||||
lblStatus.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblStatus.setBounds(343, 9, 72, 18);
|
|
||||||
|
|
||||||
lblDestination = new JLabel();
|
|
||||||
lblDestination.setForeground(new Color(255, 255, 255));
|
|
||||||
lblDestination.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDestination.setBounds(408, 9, 184, 18);
|
|
||||||
|
|
||||||
lblDate = new JLabel(currenttimeManager.getCurrentTime().toString());
|
|
||||||
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblDate.setForeground(Color.WHITE);
|
|
||||||
lblDate.setBounds(69, 8, 326, 21);
|
|
||||||
|
|
||||||
JLabel lblBuses = new JLabel("Buses: ");
|
|
||||||
lblBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBuses.setForeground(new Color(255, 255, 255));
|
|
||||||
lblBuses.setBackground(new Color(192, 192, 192));
|
|
||||||
lblBuses.setBounds(22, 532, 56, 14);
|
|
||||||
|
|
||||||
lblNumOfBuses = new JLabel();
|
|
||||||
lblNumOfBuses.setText("0");
|
|
||||||
lblNumOfBuses.setBackground(new Color(0, 0, 0));
|
|
||||||
lblNumOfBuses.setForeground(new Color(255, 255, 255));
|
|
||||||
lblNumOfBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblNumOfBuses.setBounds(69, 533, 90, 12);
|
|
||||||
|
|
||||||
JLabel lblBusesDone = new JLabel("Buses Done:");
|
|
||||||
lblBusesDone.setForeground(new Color(255, 255, 255));
|
|
||||||
lblBusesDone.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBusesDone.setBounds(143, 533, 101, 12);
|
|
||||||
|
|
||||||
lblNumOfDonebuses = new JLabel();
|
|
||||||
lblNumOfDonebuses.setText("0");
|
|
||||||
lblNumOfDonebuses.setForeground(new Color(255, 255, 255));
|
|
||||||
lblNumOfDonebuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblNumOfDonebuses.setBounds(234, 531, 80, 16);
|
|
||||||
|
|
||||||
JLabel lblMaximumTrip = new JLabel("Maximum Trip:");
|
|
||||||
lblMaximumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMaximumTrip.setForeground(new Color(255, 255, 255));
|
|
||||||
lblMaximumTrip.setBounds(22, 557, 112, 22);
|
|
||||||
|
|
||||||
lblMaximumTripValue = new JLabel();
|
|
||||||
lblMaximumTripValue.setText("-:--");
|
|
||||||
lblMaximumTripValue.setForeground(new Color(255, 255, 255));
|
|
||||||
lblMaximumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMaximumTripValue.setBounds(142, 559, 46, 18);
|
|
||||||
|
|
||||||
JLabel lblMinimumTrip = new JLabel("Minimum Trip:");
|
|
||||||
lblMinimumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMinimumTrip.setForeground(Color.WHITE);
|
|
||||||
lblMinimumTrip.setBounds(22, 587, 112, 18);
|
|
||||||
|
|
||||||
lblMinimumTripValue = new JLabel("-:--");
|
|
||||||
lblMinimumTripValue.setForeground(Color.WHITE);
|
|
||||||
lblMinimumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblMinimumTripValue.setBounds(143, 589, 90, 14);
|
|
||||||
|
|
||||||
JLabel lblBusesArrivedInTheLastHour = new JLabel("Buses Arrived In The Last Hour:");
|
|
||||||
lblBusesArrivedInTheLastHour.setForeground(Color.WHITE);
|
|
||||||
lblBusesArrivedInTheLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBusesArrivedInTheLastHour.setBounds(333, 532, 237, 14);
|
|
||||||
|
|
||||||
lblBusesArrivedInTheLastHourValue = new JLabel();
|
|
||||||
lblBusesArrivedInTheLastHourValue.setText("0");
|
|
||||||
lblBusesArrivedInTheLastHourValue.setForeground(Color.WHITE);
|
|
||||||
lblBusesArrivedInTheLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblBusesArrivedInTheLastHourValue.setBounds(566, 532, 90, 14);
|
|
||||||
|
|
||||||
JLabel lblAverageTripForLastHour = new JLabel("Average Trip For Last Hour:");
|
|
||||||
lblAverageTripForLastHour.setForeground(Color.WHITE);
|
|
||||||
lblAverageTripForLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAverageTripForLastHour.setBackground(Color.BLACK);
|
|
||||||
lblAverageTripForLastHour.setBounds(198, 559, 208, 18);
|
|
||||||
|
|
||||||
lblAverageTripForLastHourValue = new JLabel("(No Arrivals) In Last Hour");
|
|
||||||
lblAverageTripForLastHourValue.setForeground(Color.WHITE);
|
|
||||||
lblAverageTripForLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAverageTripForLastHourValue.setBounds(408, 557, 216, 18);
|
|
||||||
|
|
||||||
JLabel lblAvgTime = new JLabel("Average Time For The Trip:");
|
|
||||||
lblAvgTime.setForeground(Color.WHITE);
|
|
||||||
lblAvgTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAvgTime.setBounds(198, 582, 208, 29);
|
|
||||||
|
|
||||||
lblAverageTimeForTheTrip = new JLabel("-:--");
|
|
||||||
lblAverageTimeForTheTrip.setForeground(Color.WHITE);
|
|
||||||
lblAverageTimeForTheTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblAverageTimeForTheTrip.setBounds(408, 589, 101, 14);
|
|
||||||
|
|
||||||
JLabel lblArrivedToArafat = new JLabel("All Arrived To Arafat At:");
|
|
||||||
lblArrivedToArafat.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblArrivedToArafat.setForeground(Color.WHITE);
|
|
||||||
lblArrivedToArafat.setBounds(18, 613, 216, 14);
|
|
||||||
makkahFrame.getContentPane().add(lblArrivedToArafat);
|
|
||||||
|
|
||||||
JLabel lblArrivedToHotels = new JLabel("All Arrived To Hotels At:");
|
|
||||||
lblArrivedToHotels.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblArrivedToHotels.setForeground(Color.WHITE);
|
|
||||||
lblArrivedToHotels.setBounds(18, 638, 184, 14);
|
|
||||||
makkahFrame.getContentPane().add(lblArrivedToHotels);
|
|
||||||
|
|
||||||
lblArrivedToArafatTime = new JLabel("N/A");
|
|
||||||
lblArrivedToArafatTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblArrivedToArafatTime.setForeground(Color.WHITE);
|
|
||||||
lblArrivedToArafatTime.setBounds(208, 613, 358, 14);
|
|
||||||
makkahFrame.getContentPane().add(lblArrivedToArafatTime);
|
|
||||||
|
|
||||||
lblArrivedToHotelsTime = new JLabel("N/A");
|
|
||||||
lblArrivedToHotelsTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
|
|
||||||
lblArrivedToHotelsTime.setForeground(Color.WHITE);
|
|
||||||
lblArrivedToHotelsTime.setBounds(208, 638, 358, 14);
|
|
||||||
|
|
||||||
//Add Elements
|
|
||||||
makkahFrame.getContentPane().add(streetScroll);
|
|
||||||
makkahFrame.getContentPane().add(lblAverageTimeForTheTrip);
|
|
||||||
makkahFrame.getContentPane().add(lblAverageTripForLastHourValue);
|
|
||||||
makkahFrame.getContentPane().add(lblBusesArrivedInTheLastHourValue);
|
|
||||||
makkahFrame.getContentPane().add(lblStatus);
|
|
||||||
makkahFrame.getContentPane().add(lblDestination);
|
|
||||||
makkahFrame.getContentPane().add(lblBuses);
|
|
||||||
makkahFrame.getContentPane().add(lblNumOfBuses);
|
|
||||||
makkahFrame.getContentPane().add(lblBusesDone);
|
|
||||||
makkahFrame.getContentPane().add(lblNumOfDonebuses);
|
|
||||||
makkahFrame.getContentPane().add(btnExit);
|
|
||||||
makkahFrame.getContentPane().add(btnViewStreet);
|
|
||||||
makkahFrame.getContentPane().add(btnViewReport);
|
|
||||||
makkahFrame.getContentPane().add(btnViewBuses);
|
|
||||||
makkahFrame.getContentPane().add(btnViewRoutes);
|
|
||||||
makkahFrame.getContentPane().add(lblAverageTripForLastHour);
|
|
||||||
makkahFrame.getContentPane().add(lblAvgTime);
|
|
||||||
makkahFrame.getContentPane().add(districtScroll);
|
|
||||||
makkahFrame.getContentPane().add(lblDistrict);
|
|
||||||
makkahFrame.getContentPane().add(lblStreets);
|
|
||||||
makkahFrame.getContentPane().add(lblTime);
|
|
||||||
makkahFrame.getContentPane().add(lblDate);
|
|
||||||
makkahFrame.getContentPane().add(lblBusesArrivedInTheLastHour);
|
|
||||||
makkahFrame.getContentPane().add(lblMaximumTripValue);
|
|
||||||
makkahFrame.getContentPane().add(lblMinimumTripValue);
|
|
||||||
makkahFrame.getContentPane().add(lblMaximumTrip);
|
|
||||||
makkahFrame.getContentPane().add(lblMinimumTrip);
|
|
||||||
makkahFrame.getContentPane().add(btnBrowseHistory);
|
|
||||||
makkahFrame.getContentPane().add(btnPause);
|
|
||||||
|
|
||||||
//Frame Settings
|
|
||||||
makkahFrame.getContentPane().setBackground(new Color(50,50,50));
|
|
||||||
makkahFrame.getContentPane().setForeground(new Color(0, 0, 0));
|
|
||||||
makkahFrame.setBounds(100,100,1089,714);
|
|
||||||
makkahFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
makkahFrame.getContentPane().setLayout(null);
|
|
||||||
makkahFrame.getContentPane().add(lblArrivedToHotelsTime);
|
|
||||||
makkahFrame.setLocationRelativeTo(null);
|
|
||||||
makkahFrame.revalidate();
|
|
||||||
makkahFrame.setLocation(200,150);
|
|
||||||
makkahFrame.setAutoRequestFocus(false);
|
|
||||||
makkahFrame.setVisible(true);
|
|
||||||
|
|
||||||
//Set Routes for Campaigns
|
//Set Routes for Campaigns
|
||||||
|
setRoutesForCampaigns(Mashier.ARAFAT);
|
||||||
while(!firstDayTimeMan.isEnded()) {
|
while(!firstDayTimeMan.isEnded()) {
|
||||||
checkInput();
|
checkInput();
|
||||||
|
|
||||||
if (!isAllRoutSet) {
|
|
||||||
isAllRoutSet = true;
|
|
||||||
setRoutesForCampaigns(Mashier.ARAFAT);
|
|
||||||
}
|
|
||||||
//Start of Every hour
|
//Start of Every hour
|
||||||
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
||||||
System.out.println("\n\n" + getStreetsReport());
|
System.out.println("\n\n" + getStreetsReport());
|
||||||
updateStreetFrame();
|
|
||||||
saveState();
|
|
||||||
}
|
}
|
||||||
else System.out.print(".");
|
else System.out.print(".");
|
||||||
|
|
||||||
clearDoneCivilVehicles();
|
clearDoneCivilVehicles();
|
||||||
addCivilVehicleNoise();
|
addCivilVehicleNoise();
|
||||||
for (Vehicle vehicle : listOfVehicles) {
|
for (Vehicle vehicle : listOfVehicles) {
|
||||||
if (vehicle.getRoute() == null)
|
|
||||||
continue;
|
|
||||||
Route route = vehicle.getRoute();
|
Route route = vehicle.getRoute();
|
||||||
double currentLocation = vehicle.getCurrentLocation();
|
double currentLocation = vehicle.getCurrentLocation();
|
||||||
if (vehicle.getCurrentStreet() == null &&
|
if (vehicle.getCurrentStreet() == null &&
|
||||||
firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 2 == 0 &&
|
|
||||||
route.getStreets()[0].capcityPoint(0,1000) < 1) {
|
route.getStreets()[0].capcityPoint(0,1000) < 1) {
|
||||||
vehicle.setCurrentStreet(route.getStreets()[0]);
|
vehicle.setCurrentStreet(route.getStreets()[0]);
|
||||||
}
|
}
|
||||||
@ -465,16 +82,13 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isAllArrived() && allArrivedToArafatTime == null) allArrivedToArafatTime = (Date)currenttimeManager.getCurrentTime().clone();
|
if (isAllArrived()) allArrivedToArafatTime = (Date)currenttimeManager.getCurrentTime().clone();
|
||||||
firstDayTimeMan.step(Calendar.MINUTE, 1);
|
firstDayTimeMan.step(Calendar.MINUTE, 1);
|
||||||
lblDate.setText(currenttimeManager.getCurrentTime().toString());
|
|
||||||
//lblArrivedToArafatTime.setText(getDistTimeForLbl());
|
|
||||||
}
|
}
|
||||||
|
//TODO make report
|
||||||
currenttimeManager = lastDayTimeMan;
|
currenttimeManager = lastDayTimeMan;
|
||||||
System.out.println("\n***************FINSHIED ARAFAT DAY***************");
|
System.out.println("\n***************FINSHIED ARAFAT DAY***************");
|
||||||
//Collections.shuffle(listOfVehicles);
|
setRoutesForCampaigns(Mashier.MINA);
|
||||||
isAllRoutSet = false;
|
|
||||||
for (Vehicle vehicle : listOfVehicles) {
|
for (Vehicle vehicle : listOfVehicles) {
|
||||||
vehicle.setCurrentStreet(null);
|
vehicle.setCurrentStreet(null);
|
||||||
}
|
}
|
||||||
@ -483,28 +97,17 @@ public class MakkahCity {
|
|||||||
addCivilVehicleNoise();
|
addCivilVehicleNoise();
|
||||||
|
|
||||||
System.out.println("***************STARTING LAST DAY***************");
|
System.out.println("***************STARTING LAST DAY***************");
|
||||||
setRoutesForCampaigns(Mashier.MINA);
|
|
||||||
while(!lastDayTimeMan.isEnded()) {
|
while(!lastDayTimeMan.isEnded()) {
|
||||||
checkInput();
|
checkInput();
|
||||||
|
|
||||||
if (!isAllRoutSet) {
|
|
||||||
isAllRoutSet = true;
|
|
||||||
setRoutesForCampaigns(Mashier.MINA);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Start of Every hour
|
//Start of Every hour
|
||||||
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
||||||
System.out.println("\n\n" + getStreetsReport());
|
System.out.println("\n\n" + getStreetsReport());
|
||||||
updateStreetFrame();
|
|
||||||
saveState();
|
|
||||||
}
|
}
|
||||||
else System.out.print(".");
|
else System.out.print(".");
|
||||||
|
|
||||||
clearDoneCivilVehicles();
|
clearDoneCivilVehicles();
|
||||||
addCivilVehicleNoise();
|
addCivilVehicleNoise();
|
||||||
for (Vehicle vehicle : listOfVehicles) {
|
for (Vehicle vehicle : listOfVehicles) {
|
||||||
if (vehicle.getRoute() == null)
|
|
||||||
continue;
|
|
||||||
Route route = vehicle.getRoute();
|
Route route = vehicle.getRoute();
|
||||||
double currentLocation = vehicle.getCurrentLocation();
|
double currentLocation = vehicle.getCurrentLocation();
|
||||||
if (vehicle.getCurrentStreet() == null &&
|
if (vehicle.getCurrentStreet() == null &&
|
||||||
@ -528,29 +131,16 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isAllArrived() && allArrivedToHotelsTime == null) allArrivedToHotelsTime = (Date)currenttimeManager.getCurrentTime().clone();
|
if (isAllArrived()) allArrivedToHotelsTime = (Date)currenttimeManager.getCurrentTime().clone();
|
||||||
lastDayTimeMan.step(Calendar.MINUTE, 1);
|
lastDayTimeMan.step(Calendar.MINUTE, 1);
|
||||||
lblDate.setText(currenttimeManager.getCurrentTime().toString());
|
|
||||||
//lblArrivedToHotelsTime.setText(getDistTimeForLbl());
|
|
||||||
}
|
}
|
||||||
//When done show menu to analyze. Exit from menu too.
|
//When done show menu to analyze. Exit from menu too.
|
||||||
done_flag = true;
|
|
||||||
inputListener.pause();
|
inputListener.pause();
|
||||||
startMenu();
|
startMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkInput() {
|
private static void checkInput() {
|
||||||
String input = "";
|
String input = "";
|
||||||
if (exit_flag) System.exit(0);
|
|
||||||
if (pause_flag) {
|
|
||||||
while (pause_flag) {
|
|
||||||
try {
|
|
||||||
Thread.sleep(500);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (inputListener.hasNew()){
|
if (inputListener.hasNew()){
|
||||||
input = inputListener.getInput();
|
input = inputListener.getInput();
|
||||||
if (input.equals("m")){
|
if (input.equals("m")){
|
||||||
@ -563,6 +153,8 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void startMenu() {
|
private static void startMenu() {
|
||||||
|
//TODO: add used by (District) in street menu as option
|
||||||
|
//TODO: add capacity to street list output avg time too?
|
||||||
Scanner in = new Scanner(System.in);
|
Scanner in = new Scanner(System.in);
|
||||||
System.out.println("\n"+currenttimeManager.getCurrentTime()+"\n"+
|
System.out.println("\n"+currenttimeManager.getCurrentTime()+"\n"+
|
||||||
"---------------------------\n" +
|
"---------------------------\n" +
|
||||||
@ -571,9 +163,8 @@ public class MakkahCity {
|
|||||||
"[3] View Campaigns\n" +
|
"[3] View Campaigns\n" +
|
||||||
"[4] View Routes\n" +
|
"[4] View Routes\n" +
|
||||||
"[5] Print report\n" +
|
"[5] Print report\n" +
|
||||||
"[6] Browse History\n" +
|
"[6] Continue\n" +
|
||||||
"[7] Continue\n" +
|
"[7] Exit");
|
||||||
"[8] Exit");
|
|
||||||
String choice = in.next();
|
String choice = in.next();
|
||||||
//Split into methods?
|
//Split into methods?
|
||||||
if (choice.equals("1")){
|
if (choice.equals("1")){
|
||||||
@ -606,9 +197,8 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (choice.equals("5")) System.out.println(getStreetsReport());
|
if (choice.equals("5")) System.out.println(getStreetsReport());
|
||||||
if (choice.equals("6")) browseHistory();
|
if (choice.equals("6")) return;
|
||||||
if (choice.equals("7")) return;
|
if (choice.equals("7")) {
|
||||||
if (choice.equals("8")) {
|
|
||||||
inputListener.stop();
|
inputListener.stop();
|
||||||
t.interrupt();
|
t.interrupt();
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
@ -685,46 +275,6 @@ public class MakkahCity {
|
|||||||
System.out.println(route.toString());
|
System.out.println(route.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void browseHistory() {
|
|
||||||
Calendar dummyCal = new GregorianCalendar();
|
|
||||||
dummyCal.setTime(currenttimeManager.getCurrentTime());
|
|
||||||
//dummyCal.roll(Calendar.HOUR, -1);
|
|
||||||
dummyCal.set(Calendar.MINUTE, 0);//Go down to last hour.
|
|
||||||
Scanner in = new Scanner(System.in);
|
|
||||||
boolean selected = false;
|
|
||||||
while (!selected){
|
|
||||||
System.out.println(new HijriDate(dummyCal.getTimeInMillis()));
|
|
||||||
System.out.print("[1] Forward\n" +
|
|
||||||
"[2] Backward\n" +
|
|
||||||
"[3] Select\n" +
|
|
||||||
"[4] Return\n");
|
|
||||||
String choice = in.next();
|
|
||||||
if (choice.equals("1")) dummyCal.roll(Calendar.HOUR, 1);
|
|
||||||
if (choice.equals("2")) dummyCal.roll(Calendar.HOUR, -1);
|
|
||||||
if (choice.equals("3")) {
|
|
||||||
selected = true;
|
|
||||||
DataManeger dataManeger = new DataManeger();
|
|
||||||
if (dataManeger.stateAvailable(dummyCal.getTime())) {
|
|
||||||
State state = dataManeger.loadState(dummyCal.getTime());
|
|
||||||
System.out.print(dummyCal.getTime() + " (History)\n");
|
|
||||||
System.out.println("\n"+
|
|
||||||
"---------------------------\n" +
|
|
||||||
"[1] View Buses\n" +
|
|
||||||
"[2] View Streets\n" +
|
|
||||||
"[3] View Campaigns\n" +
|
|
||||||
"[4] View Routes\n");
|
|
||||||
choice = in.next();
|
|
||||||
if (choice.equals("1")){
|
|
||||||
System.out.print("0 - "+state.getListOfVehicles().size());
|
|
||||||
choice = in.next();
|
|
||||||
showVehicle(state.getListOfVehicles().get(Integer.parseInt(choice)));
|
|
||||||
}
|
|
||||||
} else System.out.print("Not saved");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void clearDoneCivilVehicles() {
|
private static void clearDoneCivilVehicles() {
|
||||||
//Clear civil cars from list
|
//Clear civil cars from list
|
||||||
for (int i = 0; i < listOfVehicles.size();){
|
for (int i = 0; i < listOfVehicles.size();){
|
||||||
@ -738,10 +288,7 @@ public class MakkahCity {
|
|||||||
|
|
||||||
private static void setRoutesForCampaigns(Mashier mashier) {
|
private static void setRoutesForCampaigns(Mashier mashier) {
|
||||||
for (Campaign camp : listOfCampaigns){
|
for (Campaign camp : listOfCampaigns){
|
||||||
if(camp.getVehicles().get(0).getCurrentStreet() == null) {
|
camp.setRoute(getShortestRoute(camp, mashier));
|
||||||
isAllRoutSet = false;
|
|
||||||
camp.setRoute(getBestRoute(camp, mashier));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -894,7 +441,7 @@ public class MakkahCity {
|
|||||||
private static void addCivilVehicleNoise() {
|
private static void addCivilVehicleNoise() {
|
||||||
|
|
||||||
for (Street street: stdStreet) {
|
for (Street street: stdStreet) {
|
||||||
if (street.getPercentRemainingCapacity() >= 80)
|
if (street.getPercentRemainingCapacity() >= 100)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int numOfSedan = (int)getRandom(10,15);
|
int numOfSedan = (int)getRandom(10,15);
|
||||||
@ -963,43 +510,7 @@ public class MakkahCity {
|
|||||||
* @param campaign
|
* @param campaign
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
private static Route getShortestRoute(Campaign campaign, Mashier mashier) {
|
||||||
private static Route getBestRoute(Campaign campaign , Mashier mashier) {
|
|
||||||
//ArrayList<Route> routes = (ArrayList<Route>) Arrays.asList(getRoutesToDistrict(campaign.getHotelDistrict()));
|
|
||||||
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
|
||||||
routes = sortRoutes(routes);
|
|
||||||
for (Route r : routes) {
|
|
||||||
if(r.getMashier() == Mashier.ARAFAT && r.getHotelArea() == District.ALHIJRA) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
if (r.getMashier() == mashier){
|
|
||||||
if (r.capcity() < 70) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
else if (r.getHotelArea() == District.ALAZIZIYA)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Route[] sortRoutes(Route[] routes) {
|
|
||||||
Route[] sortingRoute = new Route[routes.length];
|
|
||||||
double[] lengthes = new double[routes.length];
|
|
||||||
|
|
||||||
for (int i = 0; i < lengthes.length ; i++)
|
|
||||||
lengthes[i] = routes[i].getTotalLength();
|
|
||||||
|
|
||||||
Arrays.sort(lengthes);
|
|
||||||
for (int i = 0; i < lengthes.length ; i++) {
|
|
||||||
for (Route r : routes)
|
|
||||||
if (lengthes[i] == r.getTotalLength())
|
|
||||||
sortingRoute[i] = r;
|
|
||||||
}
|
|
||||||
return sortingRoute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Route getShortestRoute(Campaign campaign, Mashier mashier) {
|
|
||||||
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
||||||
Route route = null;
|
Route route = null;
|
||||||
double min = Double.MAX_VALUE;
|
double min = Double.MAX_VALUE;
|
||||||
@ -1065,7 +576,7 @@ public class MakkahCity {
|
|||||||
//Redundant loops slow down execution. find better sol.
|
//Redundant loops slow down execution. find better sol.
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
for (Campaign campaign : listOfCampaigns) {
|
||||||
numberOfBusses += campaign.getNumberOfBusses();
|
numberOfBusses += campaign.getNumberOfBusses();
|
||||||
}
|
} //TODO Add max min time.
|
||||||
String fFormat = "All arrived to %s at: %s";
|
String fFormat = "All arrived to %s at: %s";
|
||||||
boolean arr = isAllArrived();//since it has looping. use once.
|
boolean arr = isAllArrived();//since it has looping. use once.
|
||||||
if (arr && allArrivedToArafatTime != null)
|
if (arr && allArrivedToArafatTime != null)
|
||||||
@ -1090,7 +601,7 @@ public class MakkahCity {
|
|||||||
* Calculate average trip time for last 10 minutes
|
* Calculate average trip time for last 10 minutes
|
||||||
* @return "hh:mm"
|
* @return "hh:mm"
|
||||||
*/
|
*/
|
||||||
public static String avgTimeOfTrip() {
|
private static String avgTimeOfTrip() {
|
||||||
//TODO: does output diff value even after all have arrived.
|
//TODO: does output diff value even after all have arrived.
|
||||||
Calendar now = currenttimeManager.getCurrentCalendar();
|
Calendar now = currenttimeManager.getCurrentCalendar();
|
||||||
Calendar from = (GregorianCalendar)now.clone();
|
Calendar from = (GregorianCalendar)now.clone();
|
||||||
@ -1110,11 +621,11 @@ public class MakkahCity {
|
|||||||
sum = sum /counter;
|
sum = sum /counter;
|
||||||
int hours = sum / 60;
|
int hours = sum / 60;
|
||||||
int minutes = sum % 60;
|
int minutes = sum % 60;
|
||||||
if (hours == 0 && minutes == 0) return "(No Arrivals) In Last Hour";
|
if (hours == 0 && minutes == 0) return "(No arrivals) in last Hour";
|
||||||
return String.format("%2d:%02d", hours, minutes);
|
return String.format("%2d:%02d", hours, minutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getPercentArrival(District district) {
|
private static int getPercentArrival(District district) {
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
||||||
sum += campaign.getPercentArrived();
|
sum += campaign.getPercentArrived();
|
||||||
@ -1122,7 +633,7 @@ public class MakkahCity {
|
|||||||
return sum/campPerDistrict[district.ordinal()].size();
|
return sum/campPerDistrict[district.ordinal()].size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getAvgTimeOfTrip(District district){
|
private static String getAvgTimeOfTrip(District district){
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
int counter = 1;
|
int counter = 1;
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
||||||
@ -1141,7 +652,7 @@ public class MakkahCity {
|
|||||||
return String.format("%2d:%02d", hours,minutes);
|
return String.format("%2d:%02d", hours,minutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getNumberOfArrivedBusses() {
|
private static int getNumberOfArrivedBusses() {
|
||||||
int num = 0;
|
int num = 0;
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
for (Campaign campaign : listOfCampaigns) {
|
||||||
for (Vehicle vehicle : campaign.getVehicles()){
|
for (Vehicle vehicle : campaign.getVehicles()){
|
||||||
@ -1152,7 +663,7 @@ public class MakkahCity {
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getNumberOfArrivedBussesPerHour() {
|
private static int getNumberOfArrivedBussesPerHour() {
|
||||||
Calendar now = currenttimeManager.getCurrentCalendar();
|
Calendar now = currenttimeManager.getCurrentCalendar();
|
||||||
Calendar from = (GregorianCalendar)now.clone();
|
Calendar from = (GregorianCalendar)now.clone();
|
||||||
from.roll(Calendar.HOUR, -1);
|
from.roll(Calendar.HOUR, -1);
|
||||||
@ -1191,7 +702,7 @@ public class MakkahCity {
|
|||||||
report.append(String.format(" %-20s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus())));
|
report.append(String.format(" %-20s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus())));
|
||||||
report.append(String.format(" %-22s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus())));
|
report.append(String.format(" %-22s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus())));
|
||||||
//Calc values per dist here.
|
//Calc values per dist here.
|
||||||
//TODO: add arrived buses colum (NO NEED)
|
|
||||||
report.append("\n");
|
report.append("\n");
|
||||||
}
|
}
|
||||||
return report.toString();
|
return report.toString();
|
||||||
@ -1214,139 +725,11 @@ public class MakkahCity {
|
|||||||
return String.format("%02d:%02d", hours, minutes);
|
return String.format("%02d:%02d", hours, minutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int busesInDistrict(District district){
|
private static int busesInDistrict(District district){
|
||||||
int buses = 0;
|
int buses = 0;
|
||||||
for (Campaign campaign : campPerDistrict[district.ordinal()]){
|
for (Campaign campaign : campPerDistrict[district.ordinal()]){
|
||||||
buses += campaign.getNumberOfBusses();
|
buses += campaign.getNumberOfBusses();
|
||||||
}
|
}
|
||||||
return buses;
|
return buses;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void saveState(){
|
|
||||||
State s = new State(listOfCampaigns,
|
|
||||||
listOfVehicles,
|
|
||||||
campPerDistrict,
|
|
||||||
stdRoutes,
|
|
||||||
stdStreet,
|
|
||||||
allArrivedToArafatTime,
|
|
||||||
allArrivedToHotelsTime,
|
|
||||||
currenttimeManager.getCurrentTime());
|
|
||||||
dataManeger.saveState(s, currenttimeManager.getCurrentTime());
|
|
||||||
|
|
||||||
boolean result = dataManeger.saveState(s, currenttimeManager.getCurrentTime());
|
|
||||||
if (!result) System.out.println("Could not save state "+currenttimeManager.getCurrentTime().getTime());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateStreetFrame() {
|
|
||||||
Object[][] streetData = new Object[stdStreet.length][6];
|
|
||||||
for (int i = 0; i < stdStreet.length; i++) {
|
|
||||||
streetData[i][0] = stdStreet[i].getName().name();
|
|
||||||
streetData[i][1] = stdStreet[i].getPercentRemainingCapacity();
|
|
||||||
streetData[i][2] = stdStreet[i].getVehicles().size();
|
|
||||||
streetData[i][3] = stdStreet[i].getNumberOfBuses();
|
|
||||||
streetData[i][4] = stdStreet[i].getNumberOfLocalCars();
|
|
||||||
streetData[i][5] = avgTimeOnStreet(stdStreet[i]);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < streetData.length; i++) {
|
|
||||||
for (int j = 0; j < streetData[i].length; j++) {
|
|
||||||
streetTable.setValueAt(streetData[i][j], i, j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Object[][] districtData = new Object[campPerDistrict.length][7];
|
|
||||||
for (int i = 0; i < campPerDistrict.length; i++) {
|
|
||||||
districtData[i][0] = campPerDistrict[i].get(0).getHotelDistrict().name();
|
|
||||||
districtData[i][1] = campPerDistrict[i].size();
|
|
||||||
districtData[i][2] = busesInDistrict(District.values()[i]);
|
|
||||||
districtData[i][3] = getPercentArrival(District.values()[i]);
|
|
||||||
districtData[i][4] = getAvgTimeOfTrip(District.values()[i]);
|
|
||||||
districtData[i][5] = getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus());
|
|
||||||
districtData[i][6] = getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus());
|
|
||||||
}
|
|
||||||
for (int i = 0; i < districtData.length; i++) {
|
|
||||||
for (int j = 0; j < districtData[i].length; j++) {
|
|
||||||
districtTable.setValueAt(districtData[i][j], i, j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lblDate.setText(currenttimeManager.getCurrentTime().toString());
|
|
||||||
if (lblArrivedToArafatTime.getText().equalsIgnoreCase("N/A"))
|
|
||||||
if (allArrivedToArafatTime != null) {
|
|
||||||
lblArrivedToArafatTime.setText(allArrivedToArafatTime.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lblArrivedToHotelsTime.getText().equalsIgnoreCase("N/A"))
|
|
||||||
if (allArrivedToHotelsTime != null) {
|
|
||||||
lblArrivedToHotelsTime.setText(allArrivedToHotelsTime.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
String status = "";
|
|
||||||
if (currenttimeManager == firstDayTimeMan) {
|
|
||||||
status = "Heading to Arafat";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
status = "Heading to Hotels";
|
|
||||||
}
|
|
||||||
lblDestination.setText(status);
|
|
||||||
|
|
||||||
int numberOfBusses = 0;
|
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
|
||||||
numberOfBusses += campaign.getNumberOfBusses();
|
|
||||||
}
|
|
||||||
String bus = String.format("%d", numberOfBusses);
|
|
||||||
lblNumOfBuses.setText(bus);
|
|
||||||
|
|
||||||
String numOfdoneBuses = String.format("%d",getNumberOfArrivedBusses());
|
|
||||||
lblNumOfDonebuses.setText(numOfdoneBuses);
|
|
||||||
|
|
||||||
if (Vehicle.getMaxArrived() != null && Vehicle.getMinArrived() != null) {
|
|
||||||
lblMaximumTripValue.setText(Vehicle.getMaxArrived().getTripTime().toString());
|
|
||||||
lblMinimumTripValue.setText(Vehicle.getMinArrived().getTripTime().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
String NumberOfBussPerHour = String.format("%d", getNumberOfArrivedBussesPerHour());
|
|
||||||
lblBusesArrivedInTheLastHourValue.setText(NumberOfBussPerHour);
|
|
||||||
|
|
||||||
lblAverageTripForLastHourValue.setText(avgTimeOfTrip());
|
|
||||||
lblAverageTimeForTheTrip.setText(getAvgTripForAllDis());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getAvgTripForAllDis() {
|
|
||||||
int sum = 0;
|
|
||||||
int counter = 1;
|
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
|
||||||
for (Vehicle vehicle : campaign.getVehicles()) {
|
|
||||||
if (vehicle.isArrivedToDest()) {
|
|
||||||
long minutes = (vehicle.getTimeOfArrival().getTime() - vehicle.getTimeStartedMoving().getTime())/60000;
|
|
||||||
sum+= minutes;
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}//Make the following a method since it is the same other method
|
|
||||||
sum = sum /counter;
|
|
||||||
int hours = sum / 60;
|
|
||||||
int minutes = sum % 60;
|
|
||||||
if (hours == 0 && minutes == 0) return "-:--";
|
|
||||||
return String.format("%2d:%02d", hours,minutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getDistTimeForLbl() {
|
|
||||||
int numberOfBusses = 0;
|
|
||||||
int numberOfArrivedBuses = getNumberOfArrivedBusses();
|
|
||||||
|
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
|
||||||
numberOfBusses += campaign.getNumberOfBusses();
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean Done = isAllArrived();
|
|
||||||
if (Done && allArrivedToArafatTime != null) {
|
|
||||||
return String.format("%s", allArrivedToArafatTime);
|
|
||||||
}
|
|
||||||
if (Done && allArrivedToHotelsTime != null) {
|
|
||||||
return String.format("%s",allArrivedToHotelsTime);
|
|
||||||
}
|
|
||||||
return "N/A";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
import java.io.Serializable;
|
public class Route implements Travelable {
|
||||||
|
|
||||||
public class Route implements Travelable, Serializable {
|
|
||||||
|
|
||||||
private Street[] streets;
|
private Street[] streets;
|
||||||
private District hotelArea;
|
private District hotelArea;
|
||||||
@ -52,8 +50,6 @@ public class Route implements Travelable, Serializable {
|
|||||||
.append("\n")
|
.append("\n")
|
||||||
.append("Length: ").append(getTotalLength())
|
.append("Length: ").append(getTotalLength())
|
||||||
.append("\n")
|
.append("\n")
|
||||||
.append("Capacity: ").append(String.format("%.2f", capcity()))
|
|
||||||
.append("\n")
|
|
||||||
.append("Streets: ");
|
.append("Streets: ");
|
||||||
for (Street street : this.getStreets())
|
for (Street street : this.getStreets())
|
||||||
s.append(street.getName().name()).append(" ");
|
s.append(street.getName().name()).append(" ");
|
||||||
@ -69,15 +65,6 @@ public class Route implements Travelable, Serializable {
|
|||||||
return mashier;
|
return mashier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double capcity() {
|
|
||||||
double capcity = 0;
|
|
||||||
for (Street str : getStreets()) {
|
|
||||||
capcity += str.getPercentRemainingCapacity();
|
|
||||||
}
|
|
||||||
double c = capcity/(getStreets().length);
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setStreets(Street[] streets) {
|
private void setStreets(Street[] streets) {
|
||||||
if (streets != null) this.streets = streets;
|
if (streets != null) this.streets = streets;
|
||||||
else throwIllegal();
|
else throwIllegal();
|
||||||
|
@ -1,24 +1,33 @@
|
|||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class Street implements Travelable, Serializable {
|
public class Street implements Travelable {
|
||||||
|
|
||||||
private double length;
|
private double length;
|
||||||
private int numberOfLanes;
|
private int numberOfLanes;
|
||||||
private ArrayList<Vehicle> vehicles; //Current
|
private ArrayList<Vehicle> vehicles; //Current
|
||||||
|
private HashMap<Vehicle, ArrayList<Date>> vehiclesHistory;//History of vehicles
|
||||||
private StreetNames name;
|
private StreetNames name;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Street(double length, int numberOfLanes, StreetNames name) {
|
public Street(double length, int numberOfLanes, StreetNames name) {
|
||||||
vehicles = new ArrayList<>();
|
vehicles = new ArrayList<>();
|
||||||
|
vehiclesHistory = new HashMap<>();
|
||||||
setLength(length);
|
setLength(length);
|
||||||
setNumberOfLanes(numberOfLanes);
|
setNumberOfLanes(numberOfLanes);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Date[] getHistoryForVehicle(Vehicle vehicle){
|
||||||
|
if (vehiclesHistory.containsKey(vehicle)){
|
||||||
|
Date[] hist = new Date[vehiclesHistory.get(vehicle).size()];
|
||||||
|
return vehiclesHistory.get(vehicle).toArray(hist);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void setLength(double length) {
|
private void setLength(double length) {
|
||||||
if (length >= 0) this.length = length;
|
if (length >= 0) this.length = length;
|
||||||
else throw new IllegalArgumentException("Can not make a negative length street");
|
else throw new IllegalArgumentException("Can not make a negative length street");
|
||||||
@ -87,6 +96,14 @@ public class Street implements Travelable, Serializable {
|
|||||||
|
|
||||||
public void addVehicle(Vehicle vehicle) {
|
public void addVehicle(Vehicle vehicle) {
|
||||||
vehicles.add(vehicle);
|
vehicles.add(vehicle);
|
||||||
|
addHistoryEntry(vehicle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addHistoryEntry(Vehicle vehicle) {
|
||||||
|
if (!vehiclesHistory.containsKey(vehicle)) {
|
||||||
|
vehiclesHistory.put(vehicle, new ArrayList<>());
|
||||||
|
}
|
||||||
|
vehiclesHistory.get(vehicle).add(MakkahCity.getTimeMan().getCurrentTime());//Add time
|
||||||
}
|
}
|
||||||
|
|
||||||
public double capcityPoint(double min, double max) {
|
public double capcityPoint(double min, double max) {
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import java.io.Serializable;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public abstract class Vehicle implements Serializable {
|
public abstract class Vehicle {
|
||||||
|
|
||||||
private double vehicleSize;
|
private double vehicleSize;
|
||||||
private Route route;
|
private Route route;
|
||||||
|
Loading…
Reference in New Issue
Block a user