Project 4 SeaPort
Project3 SeaPort_00/.classpath
Project3 SeaPort_00/.project
Project3 SeaPort_00 org.eclipse.jdt.core.javabuilder spartan.tipper org.eclipse.jdt.core.javanature il.org.spartan.nature
Project3 SeaPort_00/aSP00.txt
// File: aSP00.txt // Data file for SeaPort projects // Date: Sat Feb 24 10:29:09 EST 2018 // parameters: 3 4 2 2 4 3 // ports, docks, pships, cships, jobs, persons // port name index parent(null) // port <string> <int> <int> port Bucharest 10002 0 port Ningde 10001 0 port Nosy_Be 10000 0 // dock name index parent(port) // dock <string> <int> <int> dock Pier_5 20005 10001 30003 dock Pier_4 20004 10001 30002 dock Pier_1 20001 10000 30001 dock Pier_6 20006 10001 40002 dock Pier_8 20008 10002 30004 dock Pier_2 20002 10000 40000 dock Pier_0 20000 10000 30000 dock Pier_3 20003 10000 40001 dock Pier_9 20009 10002 30005 dock Pier_7 20007 10001 40003 dock Pier_11 20011 10002 40005 dock Pier_10 20010 10002 40004 // pship name index parent(dock/port) weight length width draft numPassengers numRooms numOccupied // pship <string> <int> <int> <double> <double> <double> <double> <int> <int> <int> pship Brut 30002 20004 209.84 341.03 44.01 17.13 1065 971 532 pship Arbitrarily 30003 20005 240.01 331.69 31.01 25.00 3964 1033 1033 pship Townwear 30000 20000 123.58 303.10 108.03 37.92 3345 842 842 pship Enureses 30001 20001 51.14 144.24 113.13 16.32 1709 746 746 pship Piqued 30004 20008 98.05 183.71 78.34 40.81 1357 839 678 pship Indispensible 30005 20009 69.81 463.21 42.89 19.60 2071 934 934 // cship name index parent(dock/port) weight length width draft cargoWeight cargoVolume cargoValue // cship <string> <int> <int> <double> <double> <double> <double> <double> <double> <double> cship Blacks 40004 20010 136.21 251.96 85.29 24.70 63.90 126.17 40.45 cship Adeptest 40000 20002 199.38 339.21 37.39 29.50 156.72 116.15 425.63 cship Terrestrial 40003 20007 213.81 366.21 48.50 24.80 181.66 111.75 986.86 cship Noter 40001 20003 100.96 248.79 83.13 38.00 60.50 170.32 444.66 cship Boggler 40002 20006 142.18 408.93 67.18 28.54 56.24 145.37 176.88 cship Outworks 40005 20011 119.89 168.24 121.50 16.61 60.00 109.11 552.31 // person name index parent skill // person <string> <int> <int> <string> person Rick 50003 10000 clerk person Edith 50006 10001 painter person Clay 50004 10000 engineer person John 50001 10000 crew person Katie 50011 10001 carpenter person Doris 50015 10002 craneOperator person Bradley 50008 10001 mate person Edmund 50013 10002 painter person Marc 50009 10001 mate person Alice 50000 10000 stevedore person Brenda 50005 10000 painter person Alison 50010 10001 electrician person Pauline 50002 10000 janitor person Rudolph 50014 10002 cleaner person Theodore 50012 10002 carpenter person Tanya 50016 10002 mechanic person Josephine 50007 10001 clerk // job name index parent duration [skill]+ (one or more, matches skill in person, may repeat) // job <string> <int> <int> <double> [<string>]+ job Job_13_22_13 60014 40004 117.15 cleaner job Job_10_57_54 60006 40001 71.95 carpenter job Job_12_45_66 60005 40001 80.63 driver job Job_35_68_13 60004 40001 78.37 captain driver job Job_95_22_31 60008 30003 21.28 stevedore cleaner inspector engineer job Job_82_27_56 60015 40004 49.85 captain driver job Job_45_10_69 60000 30000 33.19 craneOperator mate job Job_97_78_38 60012 30004 72.67 mechanic inspector engineer crew job Job_81_12_90 60017 40005 117.53 janitor inspector job Job_24_93_12 60016 40005 113.47 mate electrician job Job_15_68_65 60007 30002 115.04 craneOperator electrician job Job_85_52_31 60013 30004 54.90 captain engineer job Job_41_72_36 60010 40002 108.85 captain carpenter job Job_18_52_90 60002 40000 95.14 stevedore job Job_47_53_19 60003 40000 78.90 captain driver captain job Job_50_84_14 60011 40003 52.28 engineer stevedore job Job_99_79_46 60001 30000 29.95 crew janitor captain job Job_15_31_31 60009 40002 32.36 craneOperator job Job_58_59_68 60018 40005 116.79 stevedore
Project3 SeaPort_00/aSP01.txt
// File: aSP01.txt // Data file for SeaPort projects // Date: Sun Feb 25 13:12:27 EST 2018 // parameters: 5 3 3 3 5 4 // ports, docks, pships, cships, jobs, persons // port name index parent(null) // port <string> <int> <int> port Kwajalein 10000 0 port El_Progreso 10004 0 port Ehoala 10003 0 port St._George's 10002 0 port Hua_Sai 10001 0 // dock name index parent(port) // dock <string> <int> <int> dock Pier_15 20015 10002 40006 dock Pier_9 20009 10001 40003 dock Pier_3 20003 10000 40000 dock Pier_21 20021 10003 40009 dock Pier_23 20023 10003 40011 dock Pier_14 20014 10002 30008 dock Pier_28 20028 10004 40013 dock Pier_24 20024 10004 30012 dock Pier_17 20017 10002 40008 dock Pier_6 20006 10001 30003 dock Pier_8 20008 10001 30005 dock Pier_11 20011 10001 40005 dock Pier_29 20029 10004 40014 dock Pier_10 20010 10001 40004 dock Pier_12 20012 10002 30006 dock Pier_25 20025 10004 30013 dock Pier_1 20001 10000 30001 dock Pier_22 20022 10003 40010 dock Pier_2 20002 10000 30002 dock Pier_13 20013 10002 30007 dock Pier_0 20000 10000 30000 dock Pier_18 20018 10003 30009 dock Pier_27 20027 10004 40012 dock Pier_26 20026 10004 30014 dock Pier_5 20005 10000 40002 dock Pier_7 20007 10001 30004 dock Pier_19 20019 10003 30010 dock Pier_20 20020 10003 30011 dock Pier_4 20004 10000 40001 dock Pier_16 20016 10002 40007 // pship name index parent(dock/port) weight length width draft numPassengers numRooms numOccupied // pship <string> <int> <int> <double> <double> <double> <double> <int> <int> <int> pship Intended 30008 20014 181.21 325.80 41.80 19.43 680 823 340 pship Gazeboes 30010 20019 218.71 427.06 124.21 26.79 1318 575 575 pship Integration 30013 20025 224.36 226.17 90.66 26.93 1485 767 742 pship Jesuitical 30004 20007 116.80 315.50 65.30 29.40 212 748 106 pship Sponged 30006 20012 77.00 237.51 30.28 25.58 1419 602 602 pship Deliquesced 30014 20026 109.61 493.87 76.67 37.59 1053 314 314 pship Chaplet 30009 20018 75.09 429.31 124.79 20.97 803 378 378 pship Naturalizes 30000 20000 109.25 298.19 112.89 37.70 588 570 294 pship Unpurified 30012 20024 191.29 305.90 121.84 32.28 866 545 433 pship Pinpricks 30003 20006 201.92 266.69 87.05 40.33 135 149 67 pship Carryout 30007 20013 79.84 185.61 96.45 27.12 2893 968 968 pship Nark 30001 20001 223.87 188.14 59.52 17.90 47 872 23 pship Possessory 30005 20008 57.39 107.19 84.25 37.51 1781 656 656 pship Sharp 30011 20020 127.74 292.03 77.39 16.85 879 1001 439 pship Acidifying 30002 20002 98.53 306.19 90.99 16.20 3157 906 906 // cship name index parent(dock/port) weight length width draft cargoWeight cargoVolume cargoValue // cship <string> <int> <int> <double> <double> <double> <double> <double> <double> <double> cship Russifies 40012 20027 67.65 494.38 53.93 36.08 78.57 175.99 261.07 cship Burette 40001 20004 50.16 254.22 80.15 44.81 137.11 192.21 373.27 cship Routings 40014 20029 93.37 355.22 59.45 39.52 216.35 158.23 181.04 cship Overplays 40003 20009 80.62 195.49 84.04 37.54 213.20 162.54 22.33 cship Expensed 40006 20015 121.40 348.66 118.35 43.15 37.15 173.93 209.85 cship Officious 40011 20023 157.81 370.43 96.11 34.15 61.22 172.70 638.50 cship Propagandizing 40005 20011 193.60 386.97 112.25 18.11 212.36 113.65 321.25 cship Jostled 40009 20021 176.49 409.70 53.05 43.73 26.95 147.15 272.49 cship Guttersnipe 40004 20010 124.20 192.54 62.96 24.74 82.95 191.44 857.48 cship Csp 40008 20017 181.91 126.09 32.79 18.88 187.96 143.89 448.65 cship Nonstaining 40000 20003 94.37 329.76 85.06 19.55 200.56 138.48 162.77 cship Tanks 40007 20016 66.98 124.58 59.59 25.06 123.61 178.64 373.22 cship Munchers 40002 20005 152.30 182.37 128.29 32.65 91.71 192.67 549.89 cship Cameramen 40013 20028 239.94 236.39 70.84 37.79 155.96 102.90 262.11 cship Limousine 40010 20022 64.18 172.21 109.13 30.56 39.79 179.45 520.63 // person name index parent skill // person <string> <int> <int> <string> person Victor 50014 10002 inspector person Claire 50013 10002 crew person Gary 50008 10001 cleaner person Leah 50019 10002 engineer person Rodney 50011 10001 stevedore person Joan 50010 10001 captain person Pat 50001 10000 engineer person Mae 50028 10004 cleaner person Patty 50026 10004 craneOperator person Frank 50029 10004 clerk person Shelley 50002 10000 craneOperator person Jose 50023 10003 engineer person Margarita 50027 10004 inspector person Peter 50000 10000 janitor person Byron 50022 10003 driver person Lindsay 50021 10003 painter person Ernestine 50016 10002 driver person Tracy 50025 10003 painter person Jennifer 50018 10002 carpenter person Norma 50005 10000 janitor person Alex 50003 10000 craneOperator person Marlon 50020 10003 crew person Marguerite 50030 10004 electrician person Mike 50007 10000 mate person Archie 50009 10001 electrician person Raquel 50015 10002 engineer person Cary 50017 10002 cleaner person Lydia 50012 10001 engineer person Shelley 50024 10003 driver person Doreen 50004 10000 stevedore person Pearl 50006 10000 clerk // job name index parent duration [skill]+ (one or more, matches skill in person, may repeat) // job <string> <int> <int> <double> [<string>]+ job Job_54_58_96 60035 40010 32.79 job Job_96_94_91 60040 30013 110.64 electrician job Job_11_12_56 60001 30001 88.88 job Job_76_79_34 60029 30010 99.78 clerk job Job_33_96_82 60005 40001 58.73 job Job_99_24_63 60025 30009 87.37 clerk job Job_57_78_56 60019 30008 51.26 cleaner job Job_61_64_88 60008 30004 108.66 job Job_95_45_52 60030 40009 86.49 carpenter job Job_48_66_31 60002 30001 112.39 mechanic crew job Job_64_21_22 60024 40008 65.55 craneOperator craneOperator job Job_66_83_95 60018 30008 110.35 mechanic driver job Job_36_85_73 60027 30009 109.24 painter captain clerk engineer job Job_80_77_36 60045 40014 42.75 mechanic captain job Job_69_35_48 60028 30010 41.88 painter cleaner job Job_99_10_98 60021 40006 30.79 captain mechanic captain clerk job Job_11_89_18 60023 40007 66.36 crew job Job_39_67_93 60016 40005 98.09 janitor job Job_82_13_68 60032 40009 48.86 janitor carpenter inspector job Job_69_99_93 60041 30014 113.69 crew job Job_78_74_13 60010 40003 98.36 mate job Job_22_90_21 60020 30008 68.73 captain stevedore job Job_62_46_98 60042 40012 82.31 electrician driver craneOperator job Job_77_59_19 60037 40011 39.20 cleaner clerk job Job_13_97_27 60004 40000 114.62 stevedore job Job_69_31_75 60007 30003 31.61 mate engineer job Job_37_84_29 60034 40010 51.14 job Job_44_63_41 60003 30002 24.08 electrician mate job Job_49_38_44 60013 40005 44.00 electrician job Job_67_73_13 60043 40013 116.10 cleaner driver job Job_12_39_26 60033 40010 63.27 craneOperator captain job Job_89_80_87 60044 40014 80.18 crew job Job_61_64_38 60015 40005 117.31 engineer mate job Job_62_42_21 60046 40014 108.66 carpenter electrician job Job_30_51_85 60009 30004 20.35 job Job_39_63_51 60017 30007 34.46 cleaner clerk craneOperator engineer job Job_42_66_54 60039 30013 20.43 job Job_36_65_47 60026 30009 53.03 mechanic job Job_11_85_61 60022 40007 119.11 driver captain janitor job Job_92_46_49 60036 40011 84.79 cleaner engineer job Job_53_76_46 60038 40011 99.01 driver mechanic electrician job Job_66_37_35 60012 40004 38.48 clerk inspector job Job_58_44_91 60000 30001 62.27 craneOperator cleaner job Job_52_54_80 60014 40005 113.86 job Job_84_86_22 60006 40001 27.52 job Job_57_11_72 60011 40004 43.65 crew engineer job Job_96_31_42 60031 40009 63.64
Project3 SeaPort_00/aSP02(NoJobs).txt
// File: aSPaa.txt // Data file for SeaPort projects // Date: Sat Jan 20 17:25:16 EDT 2018 // parameters: 1 1 5 5 1 5 // ports, docks, pships, cships, jobs, persons // port name index parent(null) // port <string> <int> <int> job Job_42_76_12 60383 30096 86.64 driver job Job_31_88_75 60012 30096 79.36 driver job Job_17_97_19 60115 30096 26.01 crew job Job_20_52_87 60031 30096 30.06 cleaner driver job Job_46_25_36 60150 30096 28.75 craneOperator clerk stevedore job Job_98_35_92 60365 30096 60.36 job Job_35_50_36 60061 30096 63.81 painter painter stevedore job Job_55_80_12 60106 30096 96.92 mate painter job Job_44_60_40 60169 30096 89.29 cleaner engineer driver job Job_61_17_44 60372 30096 108.03 driver job Job_71_70_59 60242 30096 69.57 captain job Job_92_95_20 60110 30096 107.63 crew driver job Job_45_42_95 60297 30096 114.12 job Job_26_73_65 60098 30096 45.50 job Job_42_76_12 60383 30096 86.64 // person name index parent skill // person <string> <int> <int> <string> person Sara 50000 10000 electrician person Duane 50002 10000 inspector person Betsy 50004 10000 cleaner person Archie 50003 10000 captain person Thomas 50001 10000 clerk
Project3 SeaPort_00/bin/CargoShip.class
public synchronized class CargoShip extends Ship { double cargoValue; double cargoVolume; double cargoWeight; public void CargoShip(java.util.Scanner); }
Project3 SeaPort_00/bin/Dock.class
public synchronized class Dock extends Thing { private Ship ship; public void Dock(java.util.Scanner); public void setShip(Ship); public void leaveDock(); private void newShip(); public Ship getShip(); public String toString(); public void checkDock(); boolean newPersonnel(java.util.ArrayList); public java.util.ArrayList requestWorkers(java.util.ArrayList, Job); public void releaseWorkers(java.util.ArrayList); }
Project3 SeaPort_00/bin/Job$1.class
synchronized class Job$1 implements java.awt.event.ActionListener { void Job$1(Job); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/Job$2.class
synchronized class Job$2 implements java.awt.event.ActionListener { void Job$2(Job); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/Job$Status.class
final synchronized enum Job$Status { public static final Job$Status RUNNING; public static final Job$Status SUSPENDED; public static final Job$Status WAITING; public static final Job$Status DONE; static void <clinit>(); private void Job$Status(String, int); public static Job$Status[] values(); public static Job$Status valueOf(String); }
Project3 SeaPort_00/bin/Job.class
public synchronized class Job extends Thing implements Runnable { long duration; java.util.ArrayList requirements; javax.swing.JPanel jobPanel; javax.swing.JProgressBar progressBar; boolean goFlag; boolean noKillFlag; javax.swing.JButton jbGo; javax.swing.JButton jbKill; Job$Status status; Job toRemove; Ship parentShip; public void Job(java.util.Scanner); public void setParentThing(java.util.HashMap); private void setVisElements(); private void setLayout(javax.swing.GroupLayout); public javax.swing.JPanel getContainerPanel(); private void setActionListeners(); public void toggleGoFlag(); public void setKillFlag(); void showStatus(Job$Status); public void run(); private void waitFor(long); public String toString(); }
Project3 SeaPort_00/bin/PassengerShip.class
public synchronized class PassengerShip extends Ship { public void PassengerShip(java.util.Scanner); }
Project3 SeaPort_00/bin/Person.class
public synchronized class Person extends Thing { String skill; boolean isAvailable; public void Person(java.util.Scanner); public String getSkill(); public String toString(); public synchronized Person hire(); public synchronized void release(); public boolean hasSkill(String); }
Project3 SeaPort_00/bin/PortTime.class
public synchronized class PortTime { int time; public void PortTime(); public void setTime(int); }
Project3 SeaPort_00/bin/SeaPort$1.class
synchronized class SeaPort$1 implements java.util.Comparator { void SeaPort$1(SeaPort); public int compare(Ship, Ship); }
Project3 SeaPort_00/bin/SeaPort$2.class
synchronized class SeaPort$2 implements java.util.Comparator { void SeaPort$2(SeaPort); public int compare(Ship, Ship); }
Project3 SeaPort_00/bin/SeaPort$3.class
synchronized class SeaPort$3 implements java.util.Comparator { void SeaPort$3(SeaPort); public int compare(Ship, Ship); }
Project3 SeaPort_00/bin/SeaPort$4.class
synchronized class SeaPort$4 implements java.util.Comparator { void SeaPort$4(SeaPort); public int compare(Ship, Ship); }
Project3 SeaPort_00/bin/SeaPort.class
public synchronized class SeaPort extends Thing { java.util.ArrayList docks; java.util.ArrayList que; java.util.ArrayList ships; java.util.ArrayList persons; java.util.ArrayList requestList; javax.swing.JPanel containerPanel; javax.swing.JLabel resourceLabel; javax.swing.JLabel requestLabel; javax.swing.JProgressBar resourceProgress; public Object person; public void SeaPort(java.util.Scanner); public void addDock(Dock); public void addShip(Ship); public void addToQue(Ship); public void addPerson(Person); public void sortByWeight(); public void sortByLength(); public void sortByWidth(); public void sortByDraft(); public void sortAllListsByName(); public Ship getShipFromQue(); public String toString(); public synchronized void checkDocks(); public boolean newPersonnel(java.util.ArrayList); public java.util.ArrayList requestWorkers(java.util.ArrayList, Job); public void releaseWorkers(java.util.ArrayList); private void broadcastUpdateOnResourcePool(); private int getAvailableResources(); private void setVisualElements(); private void setLayout(javax.swing.GroupLayout); public java.awt.Component getContainerPanel(); }
Project3 SeaPort_00/bin/SeaPortProgram$JDisplay$1.class
synchronized class SeaPortProgram$JDisplay$1 implements java.awt.event.ActionListener { void SeaPortProgram$JDisplay$1(SeaPortProgram$JDisplay); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/SeaPortProgram$JDisplay$2.class
synchronized class SeaPortProgram$JDisplay$2 implements java.awt.event.ActionListener { void SeaPortProgram$JDisplay$2(SeaPortProgram$JDisplay); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/SeaPortProgram$JDisplay$3.class
synchronized class SeaPortProgram$JDisplay$3 implements java.awt.event.ActionListener { void SeaPortProgram$JDisplay$3(SeaPortProgram$JDisplay); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/SeaPortProgram$JDisplay$4.class
synchronized class SeaPortProgram$JDisplay$4 implements java.awt.event.ActionListener { void SeaPortProgram$JDisplay$4(SeaPortProgram$JDisplay); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/SeaPortProgram$JDisplay$5.class
synchronized class SeaPortProgram$JDisplay$5 implements java.awt.event.ActionListener { void SeaPortProgram$JDisplay$5(SeaPortProgram$JDisplay); public void actionPerformed(java.awt.event.ActionEvent); }
Project3 SeaPort_00/bin/SeaPortProgram$JDisplay.class
synchronized class SeaPortProgram$JDisplay extends javax.swing.JFrame { String str; javax.swing.JTextArea jta; javax.swing.JComboBox sortBox; javax.swing.JComboBox jcb; javax.swing.JTextField jtf; javax.swing.JButton loadDBoutton; javax.swing.JButton inOrderNameButton; javax.swing.JScrollPane jSP1; javax.swing.JTree tree; javax.swing.JScrollPane jSP2; public void SeaPortProgram$JDisplay(String); public void addComponentsToPane(java.awt.Container); private void addActionListeners(); private String search(String); private String sortShipsInQue(int); private void setLayoutForDisplay(java.awt.Container); private void initComponentsAndSetFeatures(); private void initTree(); private void createNodes(javax.swing.tree.DefaultMutableTreeNode); private javax.swing.tree.DefaultMutableTreeNode createThingNode(Thing); private void createAndShowGUI(); }
Project3 SeaPort_00/bin/SeaPortProgram.class
public synchronized class SeaPortProgram { static World world; public void SeaPortProgram(); public static void main(String[]); private static String selectSimulationFile(); }
Project3 SeaPort_00/bin/Ship.class
public synchronized class Ship extends Thing { double draft; double weight; double length; double width; java.util.ArrayList jobs; final Object lock; boolean jobInProcess; public void Ship(java.util.Scanner); public String toString(); public boolean isDocked(); public boolean doJob(); public void removeJob(Job); boolean newPersonnel(java.util.ArrayList); public java.util.ArrayList requestWorkers(java.util.ArrayList, Job); public void releaseWorkers(java.util.ArrayList); }
Project3 SeaPort_00/bin/Thing.class
public synchronized class Thing implements Comparable { int index; int parent; String name; Thing parentThing; public void Thing(); public void Thing(java.util.Scanner); public void setParentThing(java.util.HashMap); public int compareTo(Thing); public int getIndex(); public String getName(); public int getParent(); public synchronized String toString(); }
Project3 SeaPort_00/bin/World.class
public synchronized class World extends Thing { java.util.HashMap ports; PortTime time; static boolean init; public void World(); public void readFile(java.util.Scanner); private void extracted(); private void addJob(java.util.Scanner, java.util.HashMap); private void addPerson(java.util.Scanner); private void addCargoShip(java.util.Scanner, java.util.HashMap, java.util.HashMap); private void addPassengerShip(java.util.Scanner, java.util.HashMap, java.util.HashMap); private void addDock(java.util.Scanner, java.util.HashMap); private void addPort(java.util.Scanner); private void assignShip(Ship, java.util.HashMap); public String toString(); public String sortByName(); public String sortByWeight(); public String sortByLength(); public String sortByWidth(); public String sortByDraft(); private Dock getDockByIndex(int); private Ship getShipByIndex(int); private Person getPersonByIndex(int); public String searchIndex(String); public String searchName(String); public String searchSkill(String); public static void setInit(); public static boolean getInit(); public String search(String, String); }
Project3 SeaPort_00/src/CargoShip.java
Project3 SeaPort_00/src/CargoShip.java
/**
*
* CargoShip.java
* extends methods from Ship.java class and handle data for all cargo ships
*/
import
java
.
util
.
Scanner
;
public
class
CargoShip
extends
Ship
{
double
cargoValue
;
double
cargoVolume
;
double
cargoWeight
;
public
CargoShip
(
Scanner
sc
)
{
super
(
sc
);
if
(
sc
.
hasNextDouble
())
{
cargoValue
=
sc
.
nextDouble
();
}
if
(
sc
.
hasNextDouble
())
{
cargoVolume
=
sc
.
nextDouble
();
}
if
(
sc
.
hasNextDouble
())
{
cargoWeight
=
sc
.
nextDouble
();
}
}
}
Project3 SeaPort_00/src/Dock.java
Project3 SeaPort_00/src/Dock.java
/**
*
* Dock.java
* Extends properties for use from class Thing.java
* Handles stationary ships
*/
import
java
.
util
.
ArrayList
;
import
java
.
util
.
Scanner
;
public
class
Dock
extends
Thing
{
private
Ship
ship
;
public
Dock
(
Scanner
sc
)
{
super
(
sc
);
}
public
void
setShip
(
Ship
ship
)
{
synchronized
(
this
)
{
this
.
ship
=
ship
;
if
(
ship
!=
null
)
{
this
.
ship
.
parentThing
=
this
;
}
}
}
public
void
leaveDock
()
{
setShip
(
null
);
checkDock
();
}
private
void
newShip
()
{
Ship
ship
=
((
SeaPort
)
parentThing
).
getShipFromQue
();
if
(
ship
!=
null
)
{
setShip
(
ship
);
}
}
public
Ship
getShip
()
{
return
ship
;
}
public
String
toString
()
{
if
(
ship
!=
null
)
{
return
"\n Dock: "
+
super
.
toString
()
+
"\n "
+
ship
;
}
else
{
return
"\n Dock: "
+
super
.
toString
();
}
}
public
void
checkDock
()
{
if
(
ship
==
null
||
ship
.
jobs
.
isEmpty
())
{
newShip
();
}
}
boolean
newPersonnel
(
ArrayList
<
String
>
requirements
)
{
return
((
SeaPort
)
parentThing
).
newPersonnel
(
requirements
);
}
public
ArrayList
<
Person
>
requestWorkers
(
ArrayList
<
String
>
requirements
,
Job
job
)
{
return
((
SeaPort
)
parentThing
).
requestWorkers
(
requirements
,
job
);
}
public
void
releaseWorkers
(
ArrayList
<
Person
>
workers
)
{
((
SeaPort
)
parentThing
).
releaseWorkers
(
workers
);
}
}
Project3 SeaPort_00/src/Job.java
Project3 SeaPort_00/src/Job.java
/**
*
* Job.java
* This class extend methods from Thing.java and holds job requirements
*/
import
javax
.
swing
.
*
;
import
java
.
awt
.
*
;
import
java
.
awt
.
event
.
ActionEvent
;
import
java
.
awt
.
event
.
ActionListener
;
import
java
.
util
.
ArrayList
;
import
java
.
util
.
HashMap
;
import
java
.
util
.
Scanner
;
public
class
Job
extends
Thing
implements
Runnable
{
long
duration
;
/** Should be some of the skills of the persons. */
ArrayList
<
String
>
requirements
=
new
ArrayList
<>
();
JPanel
jobPanel
;
JProgressBar
progressBar
=
new
JProgressBar
();
boolean
goFlag
=
true
,
noKillFlag
=
true
;
JButton
jbGo
=
new
JButton
(
"Stop"
);
JButton
jbKill
=
new
JButton
(
"Cancel"
);
Status
status
=
Status
.
WAITING
;
Job
toRemove
;
Ship
parentShip
;
enum
Status
{
RUNNING
,
SUSPENDED
,
WAITING
,
DONE
}
public
Job
(
Scanner
sc
)
{
super
(
sc
);
duration
=
(
long
)
sc
.
nextDouble
();
while
(
sc
.
hasNext
())
{
String
requirement
=
sc
.
next
();
if
(
requirement
!=
null
&&
requirement
.
length
()
>
0
)
{
requirements
.
add
(
requirement
);
}
}
}
public
void
setParentThing
(
@
SuppressWarnings
(
"rawtypes"
)
HashMap
parentThing
)
{
if
(
parentThing
.
get
(
getParent
())
!=
null
)
{
this
.
parentThing
=
(
Thing
)
parentThing
.
get
(
getParent
());
parentShip
=
(
Ship
)
this
.
parentThing
;
setVisElements
();
toRemove
=
this
;
new
Thread
(
this
).
start
();
}
}
private
void
setVisElements
()
{
jobPanel
=
new
JPanel
();
progressBar
=
new
JProgressBar
();
progressBar
.
setStringPainted
(
true
);
jbGo
.
setMinimumSize
(
new
Dimension
(
125
,
30
));
jbGo
.
setMaximumSize
(
new
Dimension
(
125
,
30
));
GroupLayout
groupLayout
=
new
GroupLayout
(
jobPanel
);
jobPanel
.
setLayout
(
groupLayout
);
setLayout
(
groupLayout
);
setActionListeners
();
}
private
void
setLayout
(
GroupLayout
groupLayout
)
{
groupLayout
.
setAutoCreateGaps
(
true
);
groupLayout
.
setAutoCreateContainerGaps
(
true
);
JLabel
jLabel
=
new
JLabel
(
parentShip
.
getName
(),
SwingConstants
.
CENTER
);
jLabel
.
setMinimumSize
(
new
Dimension
(
155
,
30
));
jLabel
.
setMaximumSize
(
new
Dimension
(
155
,
30
));
groupLayout
.
setHorizontalGroup
(
groupLayout
.
createSequentialGroup
()
.
addComponent
(
progressBar
)
.
addComponent
(
jLabel
)
.
addComponent
(
jbGo
)
.
addComponent
(
jbKill
));
groupLayout
.
setVerticalGroup
(
groupLayout
.
createParallelGroup
(
GroupLayout
.
Alignment
.
LEADING
)
.
addComponent
(
progressBar
)
.
addComponent
(
jLabel
)
.
addComponent
(
jbGo
)
.
addComponent
(
jbKill
));
}
public
JPanel
getContainerPanel
()
{
return
jobPanel
;
}
private
void
setActionListeners
()
{
jbGo
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
toggleGoFlag
();
}
});
jbKill
.
addActionListener
(
new
ActionListener
()
{
public
void
actionPerformed
(
ActionEvent
e
)
{
setKillFlag
();
}
});
}
public
void
toggleGoFlag
()
{
goFlag
=
!
goFlag
;
}
public
void
setKillFlag
()
{
noKillFlag
=
false
;
jbKill
.
setBackground
(
Color
.
red
);
}
void
showStatus
(
Status
st
)
{
status
=
st
;
switch
(
status
)
{
case
RUNNING
:
jbGo
.
setBackground
(
Color
.
green
);
jbGo
.
setText
(
"Running"
);
break
;
case
SUSPENDED
:
jbGo
.
setBackground
(
Color
.
yellow
);
jbGo
.
setText
(
"Suspended"
);
break
;
case
WAITING
:
jbGo
.
setBackground
(
Color
.
orange
);
jbGo
.
setText
(
"Waiting turn"
);
break
;
case
DONE
:
jbGo
.
setBackground
(
Color
.
red
);
jbGo
.
setText
(
"Done"
);
break
;
}
}
public
void
run
()
{
while
(
!
World
.
getInit
())
{
waitFor
(
200
);
}
while
(
!
parentShip
.
isDocked
())
{
waitFor
(
100
);
}
while
(
!
parentShip
.
doJob
())
{
waitFor
(
100
);
}
ArrayList
<
Person
>
workers
=
null
;
if
(
requirements
.
isEmpty
()
||
parentShip
.
newPersonnel
(
requirements
))
{
if
(
!
requirements
.
isEmpty
())
{
do
{
waitFor
(
100
);
workers
=
parentShip
.
requestWorkers
(
requirements
,
toRemove
);
}
while
(
workers
==
null
||
workers
.
size
()
!=
requirements
.
size
());
}
long
time
=
System
.
currentTimeMillis
();
long
startTime
=
time
;
long
stopTime
=
time
+
1000
*
duration
;
double
duration
=
stopTime
-
time
;
while
(
time
<
stopTime
&&
noKillFlag
)
{
waitFor
(
100
);
if
(
goFlag
)
{
showStatus
(
Status
.
RUNNING
);
time
+=
100
;
progressBar
.
setValue
((
int
)
(((
time
-
startTime
)
/
duration
)
*
100
));
}
else
{
showStatus
(
Status
.
SUSPENDED
);
}
}
progressBar
.
setValue
(
100
);
showStatus
(
Status
.
DONE
);
}
else
{
showStatus
(
Status
.
SUSPENDED
);
}
if
(
workers
!=
null
&&
!
workers
.
isEmpty
())
{