Compare commits

..

30 Commits

Author SHA1 Message Date
e3e7bf5ccd Package script:
tar jar and run.sh
2021-01-11 02:34:41 +03:00
b386665e66 Simple run script for MacOS/Linux 2021-01-11 02:16:07 +03:00
5e1ff6451c Exit Button improved:
Exit button behaviour was just setting flags.
    This caused the program to set the exit flag when
    it is paused and wont exit until the unpause. Some other
    Funky stuff when the sim ends are fixed.
2021-01-05 17:11:43 +03:00
5be16de49f
Prevents OutOfMem (Heap) On my potato laptop. 2021-01-01 00:47:36 +03:00
f4bc812f23 After Sub fixes 2020-12-18 21:38:23 +03:00
f137b07c1e Min/Max for history 2020-12-18 14:57:06 +03:00
c07dc8a87c Fixes 2020-12-18 14:01:52 +03:00
Asaad Dadoush
f30a64a5b5 GUI edit report btn 2020-12-18 07:40:04 +03:00
Asaad Dadoush
dc12b51801 customize GUI 2020-12-18 07:23:06 +03:00
IMXHERO
1745db8700
Merge pull request #30 from AsaadDadoush/master
Add Action for Report btn
2020-12-17 23:25:29 +03:00
Asaad Dadoush
8085b5b951 Add Action for Report btn 2020-12-17 23:06:16 +03:00
EngOsamah
b9c0de4470
GUI_History (#29) 2020-12-17 21:20:32 +03:00
Asaad Dadoush
61f3fd63bd lbl arrived time for araft/hotles 2020-12-17 19:09:15 +03:00
d915e04832 Meeting fixes and new TODO 2020-12-17 14:27:11 +03:00
IMXHERO
67b313aabf
Merge pull request #28 from EngOsamah/master
d
2020-12-17 02:01:52 +03:00
EngOsamah
7e50caf26a a few changes 2020-12-17 01:13:14 +03:00
EngOsamah
1db0ce7ca7 Add toString to GUI_ViewBuses 2020-12-17 01:11:45 +03:00
EngOsamah
67c81d22d6 GUI_ViewRoute 2020-12-16 23:51:17 +03:00
HeshamTB
b3847bad78
Hist view size (#27) 2020-12-16 17:56:09 +03:00
HeshamTB
9cbb063af0
Merge pull request #26 from HeshamTB/browse-hist
Browse hist
2020-12-16 17:44:53 +03:00
a795117895 Hist view with states 2020-12-16 17:42:26 +03:00
9cf847ad46 DataManeger working save load 2020-12-16 16:51:45 +03:00
ab3acdec9b DataManeger:
- DataManeger is static global var in Makkah.
    - Save states in data/ dir.
    - Clear all bin files with constructor.
2020-12-16 16:26:40 +03:00
9a610b65e6 Imports block compile and eclipse project files 2020-12-16 15:58:46 +03:00
9280a5b4b3
WIP: Rework DataMan constructors.
Method to get all saved times.
    Not working.
2020-12-14 06:28:18 +03:00
270e89ee5b
Main view updates every Hour instead of min 2020-12-14 04:40:45 +03:00
HeshamTB
5143ae2891
Pause button and flag check in Checkinput() (#23) 2020-12-14 04:29:56 +03:00
EngOsamah
1d509a124f
GUI_ViewStreet done (#25) 2020-12-14 04:15:12 +03:00
EngOsamah
a695ead32d
Start GUI_ViewStreet class (#24)
Co-authored-by: HeshamTB <38921037+HeshamTB@users.noreply.github.com>
2020-12-11 16:40:25 +03:00
Asaad Dadoush
556dc27d9c edit buses table 2020-12-11 08:18:11 +03:00
15 changed files with 1657 additions and 326 deletions

6
.classpath Normal file
View File

@ -0,0 +1,6 @@
<?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>

View File

@ -2,9 +2,6 @@
<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>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

17
.project Normal file
View File

@ -0,0 +1,17 @@
<?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 Executable file
View File

@ -0,0 +1,14 @@
#!/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 Executable file
View File

@ -0,0 +1,9 @@
#!/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

View File

@ -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("\nID: %s, Campaign ID: %s\n",this.getUID() , getCampaign().getUID())); s.append(String.format("ID: %s, Campaign ID: %s\n",this.getUID() , getCampaign().getUID()));
s.append(super.toString()); s.append(super.toString());
return s.toString(); return s.toString();
} }

View File

@ -1,28 +1,20 @@
import java.io.*; import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
public class DataManeger { public class DataManeger {
private Path workingDir; private File workingDir;
// public DataManeger(Path path) {
// this.seperator = File.separatorChar;
// this.workingDir = path;
// }
public DataManeger(State state, Date time){
Path dir = Paths.get("");
}
public DataManeger(){ public DataManeger(){
this(null, null); workingDir = new File("./data/");
workingDir.mkdir();
clearData();
} }
public boolean stateAvailable(Date time) { public boolean stateAvailable(Date time) {
File f = new File(String.format("0x%016X.bin", time.getTime())); File f = new File(String.format("./data/%s.bin", time.getTime()));
return f.exists(); return f.exists();
} }
@ -31,7 +23,7 @@ public class DataManeger {
if (stateAvailable(time)){ if (stateAvailable(time)){
try { try {
ObjectInputStream objectInputStream = new ObjectInputStream( ObjectInputStream objectInputStream = new ObjectInputStream(
new FileInputStream(String.format("0x%016X.bin", time.getTime()))); new FileInputStream(String.format("./data/%s.bin", time.getTime())));
state = (State)objectInputStream.readObject(); state = (State)objectInputStream.readObject();
objectInputStream.close(); objectInputStream.close();
} catch (IOException | ClassNotFoundException e) { } catch (IOException | ClassNotFoundException e) {
@ -43,7 +35,7 @@ public class DataManeger {
public boolean saveState(State state, Date time){ public boolean saveState(State state, Date time){
try { try {
FileOutputStream fs = new FileOutputStream(String.format("0x%016X.bin", time.getTime())); FileOutputStream fs = new FileOutputStream(String.format("./data/%s.bin", time.getTime()));
BufferedOutputStream bfs = new BufferedOutputStream(fs); BufferedOutputStream bfs = new BufferedOutputStream(fs);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(bfs); ObjectOutputStream objectOutputStream = new ObjectOutputStream(bfs);
objectOutputStream.writeObject(state); objectOutputStream.writeObject(state);
@ -54,6 +46,52 @@ public class DataManeger {
} }
return true; 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 { class State implements Serializable {
@ -62,15 +100,27 @@ class State implements Serializable {
private ArrayList<Campaign> listOfCampaigns; private ArrayList<Campaign> listOfCampaigns;
private ArrayList<Vehicle> listOfVehicles; private ArrayList<Vehicle> listOfVehicles;
private ArrayList<Campaign>[] campPerDistrict;
private Route[] stdRoutes; private Route[] stdRoutes;
private Street[] stdStreet; private Street[] stdStreet;
private Date allArrivedToArafatTime; private Date allArrivedToArafatTime;
private Date allArrivedToHotelsTime; private Date allArrivedToHotelsTime;
private Date stateTime;
private String maxTrip;
private String minTrip;
public State(ArrayList<Campaign> listOfCampaigns, ArrayList<Vehicle> listOfVehicles, Route[] stdRoutes, Street[] stdStreet, Date allArrivedToArafatTime, Date allArrivedToHotelsTime) { 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. //Make clones since values may change if this is running on a thread.
this.listOfCampaigns = (ArrayList<Campaign>) listOfCampaigns.clone(); this.listOfCampaigns = (ArrayList<Campaign>) listOfCampaigns.clone();
this.listOfVehicles = (ArrayList<Vehicle>) listOfVehicles.clone(); this.listOfVehicles = (ArrayList<Vehicle>) listOfVehicles.clone();
this.campPerDistrict = (ArrayList<Campaign>[])campPerDistrict.clone();
this.stdRoutes = stdRoutes.clone(); this.stdRoutes = stdRoutes.clone();
this.stdStreet = stdStreet.clone(); this.stdStreet = stdStreet.clone();
if (allArrivedToArafatTime != null) { if (allArrivedToArafatTime != null) {
@ -79,6 +129,15 @@ class State implements Serializable {
if (allArrivedToHotelsTime != null) { if (allArrivedToHotelsTime != null) {
this.allArrivedToHotelsTime = (Date) allArrivedToHotelsTime.clone(); 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() { public ArrayList<Campaign> getListOfCampaigns() {
@ -89,6 +148,10 @@ class State implements Serializable {
return listOfVehicles; return listOfVehicles;
} }
public ArrayList<Campaign>[] getCampPerDistrict() {
return campPerDistrict;
}
public Route[] getStdRoutes() { public Route[] getStdRoutes() {
return stdRoutes; return stdRoutes;
} }
@ -104,4 +167,16 @@ class State implements Serializable {
public Date getAllArrivedToHotelsTime() { public Date getAllArrivedToHotelsTime() {
return allArrivedToHotelsTime; return allArrivedToHotelsTime;
} }
public Date getStateTime() {
return stateTime;
}
public String getMaxTrip() {
return maxTrip;
}
public String getMinTrip() {
return minTrip;
}
} }

View File

@ -4,11 +4,22 @@ import javax.swing.JLabel;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.Font; 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 { public class EventControll {
private JFrame frame; private JFrame frame;
private JLabel lblNewLabel; //private JTextField textField;
private JTextField textField_2;
private JTextField textField_3;
private JTextField textField_4;
public static void main(String[] args) { public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() { EventQueue.invokeLater(new Runnable() {
public void run() { public void run() {
@ -28,19 +39,18 @@ public class EventControll {
private void initialize() { private void initialize() {
frame = new JFrame(); frame = new JFrame();
frame.setBounds(100, 100, 450, 300); frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(); for (int i = 0; i<10 ; i++) {
frame.getContentPane().add(panel, BorderLayout.CENTER); JTextField textField = new JTextField();
int x =(int)(((double)i/9.0)*255);
lblNewLabel = new JLabel(); textField.setBackground(new Color(255,x,0));
lblNewLabel.setFont(new Font("Rockwell", Font.PLAIN, 16)); frame.getContentPane().add(textField);
panel.add(lblNewLabel); textField.setColumns(10);
frame.setVisible(true); }
} }
public void setData(Object A) { public void setData(Object A) {
lblNewLabel.setText(A.toString()); //lblNewLabel.setText(A.toString());
} }
} }

View File

@ -1,50 +1,512 @@
import java.awt.Color; import java.awt.Color;
import java.awt.EventQueue; import java.awt.Font;
import java.util.*;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel; 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 { public class GUI_History {
private static JFrame frame; private List<State> states;
private static JLabel Time; 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) {
* Launch the application. this.states = states;
*/ makeFrame();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI_History window = new GUI_History();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} }
/** private void makeFrame() {
* Create the application. setData(states.get(0));
*/
public GUI_History() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame("History"); frame = new JFrame("History");
frame.getContentPane().setBackground(new Color(70, 70, 70)); 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().setForeground(new Color(0, 0, 0));
frame.getContentPane().setLayout(null); frame.getContentPane().setLayout(null);
frame.setLocationRelativeTo(null);
frame.revalidate(); frame.revalidate();
frame.setLocation(200,150);
frame.setAutoRequestFocus(false); frame.setAutoRequestFocus(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 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);
}
} }

237
src/GUI_Report.java Normal file
View File

@ -0,0 +1,237 @@
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);
}
}

View File

@ -7,162 +7,39 @@ import java.util.Calendar;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JButton; import javax.swing.JButton;
import java.awt.Color; import java.awt.Color;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.JTextField;
import javax.swing.DropMode;
import javax.swing.JTextPane;
public class GUI_ViewBuses { public class GUI_ViewBuses {
private static JFrame frame; private JFrame frame;
private static ArrayList<Vehicle> vehicles = new ArrayList<>(); private ArrayList<Vehicle> vehicles = new ArrayList<>();
private static ArrayList<Vehicle> vehiclesAlazizya = new ArrayList<>(); private ArrayList<Vehicle> vehiclesAlazizya = new ArrayList<>();
private static ArrayList<Vehicle> vehiclesAlhijra = new ArrayList<>(); private ArrayList<Vehicle> vehiclesAlhijra = new ArrayList<>();
private static ArrayList<Vehicle> vehiclesAlmansoor = new ArrayList<>(); private ArrayList<Vehicle> vehiclesAlmansoor = new ArrayList<>();
private static PDate currenttimeManager; private Date currenttimeManager;
private static JTable table; private JTable table;
private static Object[][] busData; private Object[][] busData;
private static String[] busColNames = {"ID", "Street", "location","Progress", "trip time", "Arrive Time"}; private String[] busColNames = {"ID", "Street", "location","Progress", "trip time", "Arrive Time"};
private static JButton Alazizya; private JButton Alazizya;
private static JButton Alhijra; private JButton Alhijra;
private static JButton Almansoor; private JButton Almansoor;
private static JLabel lblTime; private JLabel lblTime;
private static JLabel lblDate; private JLabel lblDate;
JLabel lblStatus; private JLabel lblStatus;
private JLabel lblDestination; private JLabel lblDestination;
private JLabel lblDistrict; private JLabel lblDistrict;
private JLabel lblDistrictValue; private JLabel lblDistrictValue;
private JTextPane textPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI_ViewBuses window = new GUI_ViewBuses();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GUI_ViewBuses() {
//makeFrame();
}
private void makeFrame() {
frame = new JFrame("Buses");
busData = new Object[vehicles.size()][6];
for (int i = 0; i < vehicles.size(); i++) { public GUI_ViewBuses(ArrayList<Campaign> campaign , Date currenttimeManager) {
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();
busData[i][3] = vehicles.get(i).getProgress();
busData[i][4] = vehicles.get(i).getTripTime();
if (vehicles.get(i).isArrivedToDest())
busData[i][5] = vehicles.get(i).getTimeOfArrival();//Formula of time
else busData[i][5] = "NOT Arrived";
}
table = new JTable(busData,busColNames);
table.setColumnSelectionAllowed(true);
table.setCellSelectionEnabled(true);
DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(busColNames);
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.setBounds(20, 24, 754, 236);
frame.getContentPane().setBackground(new Color(70, 70, 70));
frame.getContentPane().setForeground(new Color(0, 0, 0));
frame.setBounds(100,100,814,454);
frame.getContentPane().setLayout(null);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(scrollPane);
Alazizya = new JButton("Alazizya");
Alazizya.setBounds(30, 271, 99, 23);
Alazizya.addActionListener(e -> {
updateVehicles(vehiclesAlazizya);
});
frame.getContentPane().add(Alazizya);
Alhijra = new JButton("Alhijra");
Alhijra.setBounds(30, 317, 99, 23);
Alhijra.addActionListener(e -> {
updateVehicles(vehiclesAlhijra);
});
frame.getContentPane().add(Alhijra);
Almansoor = new JButton("Almansoor");
Almansoor.setBounds(30, 366, 99, 23);
Almansoor.addActionListener(e -> {
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.getCurrentTime().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);
if (currenttimeManager.getCurrentCalendar().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.setText("0");
lblDistrictValue.setForeground(Color.WHITE);
lblDistrictValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblDistrictValue.setBackground(Color.BLACK);
lblDistrictValue.setBounds(247, 371, 90, 12);
frame.getContentPane().add(lblDistrictValue);
frame.setVisible(true);
}
public void setData(ArrayList<Campaign> campaign , PDate currenttimeManager) {
for (Campaign camp : campaign) { for (Campaign camp : campaign) {
switch (camp.getHotelDistrict()) { switch (camp.getHotelDistrict()) {
case ALAZIZIYA: case ALAZIZIYA:
@ -182,6 +59,135 @@ public class GUI_ViewBuses {
makeFrame(); 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() { public void updateTable() {
busData = new Object[vehicles.size()][6]; busData = new Object[vehicles.size()][6];
for (int i = 0; i < vehicles.size(); i++) { for (int i = 0; i < vehicles.size(); i++) {
@ -190,19 +196,29 @@ public class GUI_ViewBuses {
busData[i][1] = vehicles.get(i).getCurrentStreet().getName(); busData[i][1] = vehicles.get(i).getCurrentStreet().getName();
else busData[i][1] = "Not Moving"; else busData[i][1] = "Not Moving";
busData[i][2] = vehicles.get(i).getCurrentLocation(); busData[i][2] = vehicles.get(i).getCurrentLocation();
if (vehicles.get(i).getProgress() != null)
busData[i][3] = vehicles.get(i).getProgress(); busData[i][3] = vehicles.get(i).getProgress();
else busData[i][3] = "%0";
busData[i][4] = vehicles.get(i).getTripTime(); busData[i][4] = vehicles.get(i).getTripTime();
if (vehicles.get(i).isArrivedToDest()) if (vehicles.get(i).isArrivedToDest())
busData[i][5] = vehicles.get(i).getTimeOfArrival().toString();//Formula of time busData[i][5] = getShortTime(vehicles.get(i).getTimeOfArrival());
else busData[i][5] = "NOT Arrived"; else busData[i][5] = "NOT Arrived";
} }
table.setModel(new DefaultTableModel(busData ,busColNames)); table.setModel(new DefaultTableModel(busData ,busColNames));
} }
public void updateVehicles(ArrayList<Vehicle> vehiclesDistrict) { public void updateVehicles(ArrayList<Vehicle> vehiclesDistrict) {
vehicles.clear(); vehicles.clear();
vehicles.addAll(vehiclesDistrict); vehicles.addAll(vehiclesDistrict);
lblDistrictValue.setText(((Bus)vehiclesDistrict.get(0)).getCampaign().getHotelDistrict().name()); lblDistrictValue.setText(((Bus)vehiclesDistrict.get(0)).getCampaign().getHotelDistrict().name());
lblDate.setText(currenttimeManager.toString());
updateTable(); 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));
}
} }

127
src/GUI_ViewRoute.java Normal file
View File

@ -0,0 +1,127 @@
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);
}
}

272
src/GUI_ViewStreet.java Normal file
View File

@ -0,0 +1,272 @@
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;
}
}

View File

@ -31,6 +31,8 @@ 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 boolean isAllRoutSet;
private static final DataManeger dataManeger = new DataManeger();
private static volatile boolean done_flag;
//GUI //GUI
private static boolean exit_flag; private static boolean exit_flag;
private static boolean pause_flag; private static boolean pause_flag;
@ -46,10 +48,15 @@ public class MakkahCity {
private static JLabel lblMinimumTripValue; private static JLabel lblMinimumTripValue;
private static JLabel lblBusesArrivedInTheLastHourValue; private static JLabel lblBusesArrivedInTheLastHourValue;
private static JLabel lblAverageTripForLastHourValue; 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<>();
@ -69,9 +76,6 @@ public class MakkahCity {
makeRoutes(); makeRoutes();
// Vehicle car = traceCar();
//TODO Arrival Time for Each Day
//GUI //GUI
autoModeCheckBox = new Checkbox(); autoModeCheckBox = new Checkbox();
makkahFrame = new JFrame("Hajj Simulation"); makkahFrame = new JFrame("Hajj Simulation");
@ -81,8 +85,7 @@ public class MakkahCity {
//Street data //Street data
Object[][] streetData = new Object[stdStreet.length][6]; Object[][] streetData = new Object[stdStreet.length][6];
String[] streetColNames = {"Street Name", "Street Load %", "Total", "Buses", String[] streetColNames = {"Street Name", "Street Load %", "Total", "Buses",
"Local Vehicles", "Local Vehicles","Avg. Time"};
"Avg. Time"};
for (int i = 0; i < stdStreet.length; i++) { for (int i = 0; i < stdStreet.length; i++) {
streetData[i][0] = stdStreet[i].getName().name(); streetData[i][0] = stdStreet[i].getName().name();
@ -105,10 +108,8 @@ public class MakkahCity {
districtData[i][4] = getAvgTimeOfTrip(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][5] = getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus());
districtData[i][6] = getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus()); districtData[i][6] = getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus());
} }
//tables //tables
//Street table //Street table
@ -125,10 +126,16 @@ public class MakkahCity {
streetTable.setGridColor(new Color(102, 102, 102)); streetTable.setGridColor(new Color(102, 102, 102));
streetTable.setSelectionForeground(Color.white); streetTable.setSelectionForeground(Color.white);
streetTable.setFont(new Font("Rockwell", Font.PLAIN, 18)); streetTable.setFont(new Font("Rockwell", Font.PLAIN, 18));
streetTable.setRowHeight(25); streetTable.setRowHeight(20);
streetTable.setAutoCreateRowSorter(true); 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); JScrollPane streetScroll = new JScrollPane(streetTable);
streetScroll.setBounds(50,100,1216,329); streetScroll.setBounds(22,100,809,269);
//District table //District table
districtTable = new JTable(districtData,districtColNames); districtTable = new JTable(districtData,districtColNames);
@ -146,54 +153,76 @@ public class MakkahCity {
JScrollPane districtScroll = new JScrollPane(districtTable); JScrollPane districtScroll = new JScrollPane(districtTable);
districtScroll.setEnabled(false); districtScroll.setEnabled(false);
districtTable.setAutoCreateRowSorter(true); districtTable.setAutoCreateRowSorter(true);
districtTable.setRowHeight(25); 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(); districtTable.revalidate();
districtScroll.setBounds(50,478,1216,105); districtScroll.setBounds(22,420,809,89);
//Buttons //Buttons
JButton btnViewRoutes = new JButton("View Routes"); JButton btnViewRoutes = new JButton("View Routes");
btnViewRoutes.setBounds(1307, 33, 166, 29); btnViewRoutes.setBounds(888, 33, 166, 29);
btnViewRoutes.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnViewRoutes.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnViewRoutes.setBackground(new Color(9,9,9)); btnViewRoutes.setBackground(new Color(9,9,9));
btnViewRoutes.setForeground(Color.white); btnViewRoutes.setForeground(Color.white);
btnViewRoutes.addActionListener(e -> { btnViewRoutes.addActionListener(e -> {
EventControll t = new EventControll(); GUI_ViewRoute r = new GUI_ViewRoute(stdRoutes ,listOfCampaigns,currenttimeManager.getCurrentTime());
t.setData(stdRoutes[0]); pause_flag = true;
btnPause.setText("Unpause");
}); });
JButton btnViewBuses = new JButton("View Buses"); JButton btnViewBuses = new JButton("View Buses");
btnViewBuses.setBounds(1307, 76, 166, 29); btnViewBuses.setBounds(888, 73, 166, 29);
btnViewBuses.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnViewBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnViewBuses.setBackground(new Color(9,9,9)); btnViewBuses.setBackground(new Color(9,9,9));
btnViewBuses.setForeground(Color.white); btnViewBuses.setForeground(Color.white);
btnViewBuses.addActionListener(e -> { btnViewBuses.addActionListener(e -> {
GUI_ViewBuses t = new GUI_ViewBuses(); GUI_ViewBuses t = new GUI_ViewBuses(listOfCampaigns , currenttimeManager.getCurrentTime());
t.setData(listOfCampaigns , currenttimeManager); pause_flag = true;
btnPause.setText("Unpause");
}); });
JButton btnViewCampaigns = new JButton("View Campaigns"); JButton btnViewReport = new JButton("View Report");
btnViewCampaigns.setBounds(1307, 119, 166, 29); btnViewReport.setBounds(888, 153, 166, 29);
btnViewCampaigns.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnViewReport.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnViewCampaigns.setBackground(new Color(9,9,9)); btnViewReport.setBackground(new Color(9,9,9));
btnViewCampaigns.setForeground(Color.white); 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"); JButton btnViewStreet = new JButton("View Street");
btnViewStreet.setBounds(1307, 159, 166, 29); btnViewStreet.setBounds(888, 113, 166, 29);
btnViewStreet.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnViewStreet.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnViewStreet.setBackground(new Color(9,9,9)); btnViewStreet.setBackground(new Color(9,9,9));
btnViewStreet.setForeground(Color.white); 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"); JButton btnExit = new JButton("Exit");
btnExit.setBackground(new Color(9,9,9)); btnExit.setBackground(new Color(9,9,9));
btnExit.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnExit.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnExit.setForeground(Color.white); btnExit.setForeground(Color.white);
btnExit.setBounds(1307, 623, 166, 29); btnExit.setBounds(888, 623, 166, 29);
btnExit.addActionListener(actionEvent -> exit_flag = true); btnExit.addActionListener(actionEvent -> {
if (pause_flag || done_flag) System.exit(0);
else exit_flag = true;
});
JButton btnPause = new JButton("Pause"); btnPause = new JButton("Pause");
btnPause.setBackground(new Color(9,9,9)); btnPause.setBackground(new Color(9,9,9));
btnPause.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnPause.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnPause.setForeground(Color.white); btnPause.setForeground(Color.white);
btnPause.setBounds(1307, 240, 166, 29); btnPause.setBounds(888, 233, 166, 29);
btnPause.addActionListener(actionEvent -> { btnPause.addActionListener(actionEvent -> {
if (!pause_flag) { if (!pause_flag) {
pause_flag = true; pause_flag = true;
@ -206,118 +235,146 @@ public class MakkahCity {
}); });
JButton btnBrowseHistory = new JButton("Browse History"); JButton btnBrowseHistory = new JButton("Browse History");
btnBrowseHistory.setBounds(1307, 199, 166, 29); btnBrowseHistory.setBounds(888, 193, 166, 29);
btnBrowseHistory.setBackground(new Color(9,9,9)); btnBrowseHistory.setBackground(new Color(9,9,9));
btnBrowseHistory.setFont(new Font("Rockwell", Font.PLAIN, 16)); btnBrowseHistory.setFont(new Font("Rockwell", Font.PLAIN, 16));
btnBrowseHistory.setForeground(Color.white); btnBrowseHistory.setForeground(Color.white);
btnBrowseHistory.addActionListener(e -> {
GUI_History hist = new GUI_History(dataManeger.getStates());
pause_flag = true;
btnPause.setText("Unpause");
});
//Label //Label
JLabel lblStreets = new JLabel("Streets History"); JLabel lblStreets = new JLabel("Streets");
lblStreets.setFont(new Font("Rockwell", Font.PLAIN, 24)); lblStreets.setFont(new Font("Rockwell", Font.PLAIN, 24));
lblStreets.setForeground(new Color(255, 255, 255)); lblStreets.setForeground(new Color(255, 255, 255));
lblStreets.setBounds(49, 59, 208, 30); lblStreets.setBounds(22, 59, 208, 30);
JLabel lblDistrict = new JLabel("District History"); JLabel lblDistrict = new JLabel("District");
lblDistrict.setFont(new Font("Rockwell", Font.PLAIN, 24)); lblDistrict.setFont(new Font("Rockwell", Font.PLAIN, 24));
lblDistrict.setForeground(new Color(255, 255, 255)); lblDistrict.setForeground(new Color(255, 255, 255));
lblDistrict.setBounds(49, 438, 166, 29); lblDistrict.setBounds(22, 380, 166, 29);
JLabel lblTime = new JLabel("Time:"); JLabel lblTime = new JLabel("Time:");
lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblTime.setForeground(new Color(255, 255, 255)); lblTime.setForeground(new Color(255, 255, 255));
lblTime.setBounds(50, 11, 72, 14); lblTime.setBounds(22, 11, 72, 14);
JLabel lblStatus = new JLabel("Status:"); JLabel lblStatus = new JLabel("Status:");
lblStatus.setForeground(new Color(255, 255, 255)); lblStatus.setForeground(new Color(255, 255, 255));
lblStatus.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblStatus.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblStatus.setBounds(423, 9, 72, 18); lblStatus.setBounds(343, 9, 72, 18);
lblDestination = new JLabel(); lblDestination = new JLabel();
lblDestination.setForeground(new Color(255, 255, 255)); lblDestination.setForeground(new Color(255, 255, 255));
lblDestination.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblDestination.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblDestination.setBounds(477, 9, 184, 18); lblDestination.setBounds(408, 9, 184, 18);
lblDate = new JLabel(currenttimeManager.getCurrentTime().toString()); lblDate = new JLabel(currenttimeManager.getCurrentTime().toString());
lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblDate.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblDate.setForeground(Color.WHITE); lblDate.setForeground(Color.WHITE);
lblDate.setBounds(100, 8, 326, 21); lblDate.setBounds(69, 8, 326, 21);
JLabel lblBuses = new JLabel("Buses: "); JLabel lblBuses = new JLabel("Buses: ");
lblBuses.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblBuses.setForeground(new Color(255, 255, 255)); lblBuses.setForeground(new Color(255, 255, 255));
lblBuses.setBackground(new Color(192, 192, 192)); lblBuses.setBackground(new Color(192, 192, 192));
lblBuses.setBounds(49, 605, 56, 14); lblBuses.setBounds(22, 532, 56, 14);
lblNumOfBuses = new JLabel(); lblNumOfBuses = new JLabel();
lblNumOfBuses.setText("0"); lblNumOfBuses.setText("0");
lblNumOfBuses.setBackground(new Color(0, 0, 0)); lblNumOfBuses.setBackground(new Color(0, 0, 0));
lblNumOfBuses.setForeground(new Color(255, 255, 255)); lblNumOfBuses.setForeground(new Color(255, 255, 255));
lblNumOfBuses.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblNumOfBuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblNumOfBuses.setBounds(100, 606, 90, 12); lblNumOfBuses.setBounds(69, 533, 90, 12);
JLabel lblBusesDone = new JLabel("Buses Done:"); JLabel lblBusesDone = new JLabel("Buses Done:");
lblBusesDone.setForeground(new Color(255, 255, 255)); lblBusesDone.setForeground(new Color(255, 255, 255));
lblBusesDone.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblBusesDone.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblBusesDone.setBounds(199, 606, 101, 12); lblBusesDone.setBounds(143, 533, 101, 12);
lblNumOfDonebuses = new JLabel(); lblNumOfDonebuses = new JLabel();
lblNumOfDonebuses.setText("0"); lblNumOfDonebuses.setText("0");
lblNumOfDonebuses.setForeground(new Color(255, 255, 255)); lblNumOfDonebuses.setForeground(new Color(255, 255, 255));
lblNumOfDonebuses.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblNumOfDonebuses.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblNumOfDonebuses.setBounds(293, 604, 80, 16); lblNumOfDonebuses.setBounds(234, 531, 80, 16);
JLabel lblMaximumTrip = new JLabel("Maximum Trip:"); JLabel lblMaximumTrip = new JLabel("Maximum Trip:");
lblMaximumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblMaximumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblMaximumTrip.setForeground(new Color(255, 255, 255)); lblMaximumTrip.setForeground(new Color(255, 255, 255));
lblMaximumTrip.setBounds(49, 666, 112, 22); lblMaximumTrip.setBounds(22, 557, 112, 22);
lblMaximumTripValue = new JLabel(); lblMaximumTripValue = new JLabel();
lblMaximumTripValue.setText("-:--"); lblMaximumTripValue.setText("-:--");
lblMaximumTripValue.setForeground(new Color(255, 255, 255)); lblMaximumTripValue.setForeground(new Color(255, 255, 255));
lblMaximumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblMaximumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblMaximumTripValue.setBounds(169, 668, 46, 18); lblMaximumTripValue.setBounds(142, 559, 46, 18);
JLabel lblMinimumTrip = new JLabel("Minimum Trip:"); JLabel lblMinimumTrip = new JLabel("Minimum Trip:");
lblMinimumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblMinimumTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblMinimumTrip.setForeground(Color.WHITE); lblMinimumTrip.setForeground(Color.WHITE);
lblMinimumTrip.setBounds(49, 699, 112, 18); lblMinimumTrip.setBounds(22, 587, 112, 18);
lblMinimumTripValue = new JLabel("-:--"); lblMinimumTripValue = new JLabel("-:--");
lblMinimumTripValue.setForeground(Color.WHITE); lblMinimumTripValue.setForeground(Color.WHITE);
lblMinimumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblMinimumTripValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblMinimumTripValue.setBounds(167, 701, 90, 14); lblMinimumTripValue.setBounds(143, 589, 90, 14);
JLabel lblBusesArrivedInTheLastHour = new JLabel("Buses Arrived In The Last Hour:"); JLabel lblBusesArrivedInTheLastHour = new JLabel("Buses Arrived In The Last Hour:");
lblBusesArrivedInTheLastHour.setForeground(Color.WHITE); lblBusesArrivedInTheLastHour.setForeground(Color.WHITE);
lblBusesArrivedInTheLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblBusesArrivedInTheLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblBusesArrivedInTheLastHour.setBounds(395, 605, 237, 14); lblBusesArrivedInTheLastHour.setBounds(333, 532, 237, 14);
lblBusesArrivedInTheLastHourValue = new JLabel(); lblBusesArrivedInTheLastHourValue = new JLabel();
lblBusesArrivedInTheLastHourValue.setText("0"); lblBusesArrivedInTheLastHourValue.setText("0");
lblBusesArrivedInTheLastHourValue.setForeground(Color.WHITE); lblBusesArrivedInTheLastHourValue.setForeground(Color.WHITE);
lblBusesArrivedInTheLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblBusesArrivedInTheLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblBusesArrivedInTheLastHourValue.setBounds(628, 605, 90, 14); lblBusesArrivedInTheLastHourValue.setBounds(566, 532, 90, 14);
JLabel lblAverageTripForLastHour = new JLabel("Average Trip For Last Hour:"); JLabel lblAverageTripForLastHour = new JLabel("Average Trip For Last Hour:");
lblAverageTripForLastHour.setForeground(Color.WHITE); lblAverageTripForLastHour.setForeground(Color.WHITE);
lblAverageTripForLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblAverageTripForLastHour.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblAverageTripForLastHour.setBackground(Color.BLACK); lblAverageTripForLastHour.setBackground(Color.BLACK);
lblAverageTripForLastHour.setBounds(287, 668, 208, 18); lblAverageTripForLastHour.setBounds(198, 559, 208, 18);
lblAverageTripForLastHourValue = new JLabel("(No Arrivals) In Last Hour"); lblAverageTripForLastHourValue = new JLabel("(No Arrivals) In Last Hour");
lblAverageTripForLastHourValue.setForeground(Color.WHITE); lblAverageTripForLastHourValue.setForeground(Color.WHITE);
lblAverageTripForLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblAverageTripForLastHourValue.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblAverageTripForLastHourValue.setBounds(502, 668, 216, 18); lblAverageTripForLastHourValue.setBounds(408, 557, 216, 18);
JLabel lblAvgTime = new JLabel("Average Time For The Trip:"); JLabel lblAvgTime = new JLabel("Average Time For The Trip:");
lblAvgTime.setForeground(Color.WHITE); lblAvgTime.setForeground(Color.WHITE);
lblAvgTime.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblAvgTime.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblAvgTime.setBounds(287, 694, 208, 29); lblAvgTime.setBounds(198, 582, 208, 29);
JLabel lblAverageTimeForTheTrip = new JLabel("-:--"); lblAverageTimeForTheTrip = new JLabel("-:--");
lblAverageTimeForTheTrip.setForeground(Color.WHITE); lblAverageTimeForTheTrip.setForeground(Color.WHITE);
lblAverageTimeForTheTrip.setFont(new Font("Rockwell", Font.PLAIN, 16)); lblAverageTimeForTheTrip.setFont(new Font("Rockwell", Font.PLAIN, 16));
lblAverageTimeForTheTrip.setBounds(512, 701, 101, 14); 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 //Add Elements
makkahFrame.getContentPane().add(streetScroll); makkahFrame.getContentPane().add(streetScroll);
@ -332,7 +389,7 @@ public class MakkahCity {
makkahFrame.getContentPane().add(lblNumOfDonebuses); makkahFrame.getContentPane().add(lblNumOfDonebuses);
makkahFrame.getContentPane().add(btnExit); makkahFrame.getContentPane().add(btnExit);
makkahFrame.getContentPane().add(btnViewStreet); makkahFrame.getContentPane().add(btnViewStreet);
makkahFrame.getContentPane().add(btnViewCampaigns); makkahFrame.getContentPane().add(btnViewReport);
makkahFrame.getContentPane().add(btnViewBuses); makkahFrame.getContentPane().add(btnViewBuses);
makkahFrame.getContentPane().add(btnViewRoutes); makkahFrame.getContentPane().add(btnViewRoutes);
makkahFrame.getContentPane().add(lblAverageTripForLastHour); makkahFrame.getContentPane().add(lblAverageTripForLastHour);
@ -351,32 +408,34 @@ public class MakkahCity {
makkahFrame.getContentPane().add(btnPause); makkahFrame.getContentPane().add(btnPause);
//Frame Settings //Frame Settings
makkahFrame.getContentPane().setBackground(new Color(70, 70, 70)); makkahFrame.getContentPane().setBackground(new Color(50,50,50));
makkahFrame.getContentPane().setForeground(new Color(0, 0, 0)); makkahFrame.getContentPane().setForeground(new Color(0, 0, 0));
makkahFrame.setBounds(100,100,1519,777); makkahFrame.setBounds(100,100,1089,714);
makkahFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); makkahFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
makkahFrame.getContentPane().setLayout(null); makkahFrame.getContentPane().setLayout(null);
makkahFrame.getContentPane().add(lblArrivedToHotelsTime);
makkahFrame.setLocationRelativeTo(null); makkahFrame.setLocationRelativeTo(null);
makkahFrame.revalidate(); makkahFrame.revalidate();
makkahFrame.setLocation(200,150); makkahFrame.setLocation(200,150);
makkahFrame.setAutoRequestFocus(false); makkahFrame.setAutoRequestFocus(false);
makkahFrame.setVisible(true); makkahFrame.setVisible(true);
//Set Routes for Campaigns //Set Routes for Campaigns
while(!firstDayTimeMan.isEnded()) { while(!firstDayTimeMan.isEnded()) {
checkInput(); checkInput();
//Start of Every hour
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
System.out.println("\n\n" + getStreetsReport());
saveState();
}
else System.out.print(".");
if (!isAllRoutSet) { if (!isAllRoutSet) {
isAllRoutSet = true; isAllRoutSet = true;
setRoutesForCampaigns(Mashier.ARAFAT); setRoutesForCampaigns(Mashier.ARAFAT);
} }
//Start of Every hour
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
System.out.println("\n\n" + getStreetsReport());
updateStreetFrame();
saveState();
}
else System.out.print(".");
clearDoneCivilVehicles(); clearDoneCivilVehicles();
addCivilVehicleNoise(); addCivilVehicleNoise();
for (Vehicle vehicle : listOfVehicles) { for (Vehicle vehicle : listOfVehicles) {
@ -407,9 +466,9 @@ public class MakkahCity {
} }
} }
if (isAllArrived() && allArrivedToArafatTime == null) allArrivedToArafatTime = (Date)currenttimeManager.getCurrentTime().clone(); if (isAllArrived() && allArrivedToArafatTime == null) allArrivedToArafatTime = (Date)currenttimeManager.getCurrentTime().clone();
updateStreetFrame();
firstDayTimeMan.step(Calendar.MINUTE, 1); firstDayTimeMan.step(Calendar.MINUTE, 1);
// System.out.println(car); lblDate.setText(currenttimeManager.getCurrentTime().toString());
//lblArrivedToArafatTime.setText(getDistTimeForLbl());
} }
currenttimeManager = lastDayTimeMan; currenttimeManager = lastDayTimeMan;
@ -427,17 +486,20 @@ public class MakkahCity {
setRoutesForCampaigns(Mashier.MINA); setRoutesForCampaigns(Mashier.MINA);
while(!lastDayTimeMan.isEnded()) { while(!lastDayTimeMan.isEnded()) {
checkInput(); checkInput();
//Start of Every hour
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
System.out.println("\n\n" + getStreetsReport());
}
else System.out.print(".");
if (!isAllRoutSet) { if (!isAllRoutSet) {
isAllRoutSet = true; isAllRoutSet = true;
setRoutesForCampaigns(Mashier.MINA); setRoutesForCampaigns(Mashier.MINA);
} }
//Start of Every hour
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
System.out.println("\n\n" + getStreetsReport());
updateStreetFrame();
saveState();
}
else System.out.print(".");
clearDoneCivilVehicles(); clearDoneCivilVehicles();
addCivilVehicleNoise(); addCivilVehicleNoise();
for (Vehicle vehicle : listOfVehicles) { for (Vehicle vehicle : listOfVehicles) {
@ -467,25 +529,16 @@ public class MakkahCity {
} }
} }
if (isAllArrived() && allArrivedToHotelsTime == null) allArrivedToHotelsTime = (Date)currenttimeManager.getCurrentTime().clone(); if (isAllArrived() && allArrivedToHotelsTime == null) allArrivedToHotelsTime = (Date)currenttimeManager.getCurrentTime().clone();
updateStreetFrame();
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 Vehicle traceCar() {
for(int x = 20000; x < listOfVehicles.size(); x++) {
if(listOfVehicles.get(x) instanceof Bus)
if(((Bus)listOfVehicles.get(x)).getCampaign().getHotelDistrict() == District.ALAZIZIYA) {
return listOfVehicles.get(x);
}
}
return null;
}
private static void checkInput() { private static void checkInput() {
String input = ""; String input = "";
if (exit_flag) System.exit(0); if (exit_flag) System.exit(0);
@ -946,7 +999,7 @@ public class MakkahCity {
return sortingRoute; return sortingRoute;
} }
private static Route getShortestRoute(Campaign campaign, Mashier mashier) { 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;
@ -1037,7 +1090,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"
*/ */
private static String avgTimeOfTrip() { public 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();
@ -1061,7 +1114,7 @@ public class MakkahCity {
return String.format("%2d:%02d", hours, minutes); return String.format("%2d:%02d", hours, minutes);
} }
private static int getPercentArrival(District district) { public 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();
@ -1069,7 +1122,7 @@ public class MakkahCity {
return sum/campPerDistrict[district.ordinal()].size(); return sum/campPerDistrict[district.ordinal()].size();
} }
private static String getAvgTimeOfTrip(District district){ public 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()]) {
@ -1088,7 +1141,7 @@ public class MakkahCity {
return String.format("%2d:%02d", hours,minutes); return String.format("%2d:%02d", hours,minutes);
} }
private static int getNumberOfArrivedBusses() { public 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()){
@ -1099,7 +1152,7 @@ public class MakkahCity {
return num; return num;
} }
private static int getNumberOfArrivedBussesPerHour() { public 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);
@ -1161,7 +1214,7 @@ public class MakkahCity {
return String.format("%02d:%02d", hours, minutes); return String.format("%02d:%02d", hours, minutes);
} }
private static int busesInDistrict(District district){ public 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();
@ -1172,22 +1225,18 @@ public class MakkahCity {
private static void saveState(){ private static void saveState(){
State s = new State(listOfCampaigns, State s = new State(listOfCampaigns,
listOfVehicles, listOfVehicles,
campPerDistrict,
stdRoutes, stdRoutes,
stdStreet, stdStreet,
allArrivedToArafatTime, allArrivedToArafatTime,
allArrivedToHotelsTime); allArrivedToHotelsTime,
DataManeger dataManeger = new DataManeger(); currenttimeManager.getCurrentTime());
dataManeger.saveState(s, currenttimeManager.getCurrentTime()); dataManeger.saveState(s, currenttimeManager.getCurrentTime());
boolean result = dataManeger.saveState(s, currenttimeManager.getCurrentTime()); boolean result = dataManeger.saveState(s, currenttimeManager.getCurrentTime());
if (!result) System.out.println("Could not save state "+currenttimeManager.getCurrentTime().getTime()); if (!result) System.out.println("Could not save state "+currenttimeManager.getCurrentTime().getTime());
} }
private static State loadState(Date time){
DataManeger dataManeger = new DataManeger();
return dataManeger.loadState(time);
}
private static void updateStreetFrame() { private static void updateStreetFrame() {
Object[][] streetData = new Object[stdStreet.length][6]; Object[][] streetData = new Object[stdStreet.length][6];
for (int i = 0; i < stdStreet.length; i++) { for (int i = 0; i < stdStreet.length; i++) {
@ -1219,6 +1268,15 @@ public class MakkahCity {
} }
} }
lblDate.setText(currenttimeManager.getCurrentTime().toString()); 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 = ""; String status = "";
if (currenttimeManager == firstDayTimeMan) { if (currenttimeManager == firstDayTimeMan) {
@ -1248,16 +1306,47 @@ public class MakkahCity {
lblBusesArrivedInTheLastHourValue.setText(NumberOfBussPerHour); lblBusesArrivedInTheLastHourValue.setText(NumberOfBussPerHour);
lblAverageTripForLastHourValue.setText(avgTimeOfTrip()); lblAverageTripForLastHourValue.setText(avgTimeOfTrip());
lblAverageTimeForTheTrip.setText(getAvgTripForAllDis());
} }
//TODO Avg for All the Dist public static String getAvgTripForAllDis() {
public static void getAvgTripForAllDis() { int sum = 0;
for (int i = 0; i < campPerDistrict.length; i++) { int counter = 1;
getAvgTimeOfTrip(District.values()[i]); for (Campaign campaign : listOfCampaigns) {
for (Vehicle vehicle : campaign.getVehicles()) {
if (vehicle.isArrivedToDest()) {
long minutes = (vehicle.getTimeOfArrival().getTime() - vehicle.getTimeStartedMoving().getTime())/60000;
sum+= minutes;
counter++;
} }
//lblAverageTripForLastHourValue.setText();
} }
}//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";
}
} }