Project 4 SeaPort

profilek.darrell_55
Project3SeaPort_00.rar

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 ())   {
            parentShip . releaseWorkers ( workers );
         }

        parentShip . removeJob ( toRemove );
     }

     private   void  waitFor ( long  l )   {
         try   {
             Thread . sleep ( l );
         }  
         catch   ( InterruptedException  e )   {
         }
     }

     public   String  toString ()   {
         return   String . format ( "j:%7d:%15s:%5d" ,  getIndex (),  getName (),  duration );
     }
}

Project3 SeaPort_00/src/PassengerShip.java

Project3 SeaPort_00/src/PassengerShip.java

/**
 * 
 * PassengerShip.java
 * Handles passengers processing on a ship
*/

import  java . util . Scanner ;

public   class   PassengerShip   extends   Ship   {
    
     public   PassengerShip ( Scanner  sc )   {
         super ( sc );

         if   ( sc . hasNextInt ())   {
            sc . nextInt ();
         }

         if   ( sc . hasNextInt ())   {
            sc . nextInt ();
         }

         if   ( sc . hasNextInt ())   {
            sc . nextInt ();
         }
     }
}

Project3 SeaPort_00/src/Person.java

Project3 SeaPort_00/src/Person.java

/**
 * 
 * Person.java
 * This class extends methods from Thing.java class 
 *  Describes the Person skill
*/

import  java . util . Scanner ;

public   class   Person   extends   Thing   {
     String  skill ;

     boolean  isAvailable  =   true ;

     public   Person ( Scanner  sc )   {
         super ( sc );

         if   ( sc . hasNext ())   {
            skill  =  sc . next ();
         }
     }

     public   String  getSkill ()   {
         return  skill ;
     }

     public   String  toString ()   {
         return   " Person: "   +   super . toString ()   +   " "   +  skill ;
     }

     public   synchronized   Person  hire ()   {
         if   ( isAvailable )   {
            isAvailable  =   false ;

             return   this ;
         }

         return   null ;
     }

     public   synchronized   void  release ()   {
         if   ( ! isAvailable )   {
            isAvailable  =   true ;
         }
     }

     public   boolean  hasSkill ( String  requirement )   {
         return  requirement . toLowerCase (). matches ( skill . toLowerCase ());
     }
}

Project3 SeaPort_00/src/PortTime.java

Project3 SeaPort_00/src/PortTime.java

/**
 * 
 * PortTime.java
 * Holds the port time for ships
*/

public   class   PortTime   {
     int  time ;

     public   PortTime ()   {
         this . time  =   0 ;
     }

     public   void  setTime ( int  time ){
         this . time  =  time ;
     }
}

Project3 SeaPort_00/src/SeaPort.java

Project3 SeaPort_00/src/SeaPort.java

/**
 * 
 * SeaPort.java
 * This class extends properties from Thing.java class and describe actions and structure
*/

import  javax . swing . * ;
import  java . awt . * ;
import  java . util . ArrayList ;
import  java . util . Collections ;
import  java . util . Comparator ;
import  java . util . Scanner ;

public   class   SeaPort   extends   Thing   {
     ArrayList < Dock >  docks  =   new   ArrayList <> ();

     /** The list of ships waiting to dock. */
     ArrayList < Ship >  que  =   new   ArrayList <> ();

     /** A list of all the ships at this port. */
     ArrayList < Ship >  ships  =   new   ArrayList <> ();

     /** People with skills at this port. */
     ArrayList < Person >  persons  =   new   ArrayList <> ();

     ArrayList < Job >  requestList  =   new   ArrayList <> ();

     JPanel  containerPanel  =   new   JPanel ();

     JLabel  resourceLabel  =   new   JLabel ( "" ,   SwingConstants . LEFT );

     JLabel  requestLabel  =   new   JLabel ( "" ,   SwingConstants . LEFT );

     JProgressBar  resourceProgress ;

     public   Object  person ;

     public   SeaPort ( Scanner  sc )   {
         super ( sc );
     }

     public   void  addDock ( Dock  dock )   {
        docks . add ( dock );
     }

     public   void  addShip ( Ship  ship )   {
        ships . add ( ship );
     }

     public   void  addToQue ( Ship  ship )   {
        que . add ( ship );
     }

     public   void  addPerson ( Person  person )   {
        persons . add ( person );
     }

     public   void  sortByWeight ()   {
         Collections . sort ( que ,   new   Comparator < Ship > ()   {

            @ Override

             public   int  compare ( Ship  o1 ,   Ship  o2 )   {
                 return  o1 . weight  <  o2 . weight  ?   - 1   :   ( o1 . weight  ==  o2 . weight  ?   0   :   1 );
             }

         });
     }

     public   void  sortByLength ()   {
         Collections . sort ( que ,   new   Comparator < Ship > ()   {

            @ Override

             public   int  compare ( Ship  o1 ,   Ship  o2 )   {
                 return  o1 . length  <  o2 . length  ?   - 1   :   ( o1 . length  ==  o2 . length  ?   0   :   1 );
             }

         });
     }

     public   void  sortByWidth ()   {
         Collections . sort ( que ,   new   Comparator < Ship > ()   {

            @ Override

             public   int  compare ( Ship  o1 ,   Ship  o2 )   {
                 return  o1 . width  <  o2 . width  ?   - 1   :   ( o1 . width  ==  o2 . width  ?   0   :   1 );
             }

         });
     }

     public   void  sortByDraft ()   {
         Collections . sort ( que ,   new   Comparator < Ship > ()   {

            @ Override

             public   int  compare ( Ship  o1 ,   Ship  o2 )   {
                 return  o1 . draft  <  o2 . draft  ?   - 1   :   ( o1 . draft  ==  o2 . draft  ?   0   :   1 );
             }

         });
     }

     public   void  sortAllListsByName ()   {
         Collections . sort ( ships );

         Collections . sort ( docks );

         Collections . sort ( persons );

         Collections . sort ( que );

         for   ( Ship  ship  :  ships )   {
             Collections . sort ( ship . jobs );
         }

         for   ( Ship  ship  :  que )   {
             Collections . sort ( ship . jobs );
         }
     }

     public   Ship  getShipFromQue ()   {
         synchronized   ( this )   {
             if   ( ! que . isEmpty ())   {
                 Ship  ship  =  que . get ( que . size ()   -   1 );

                que . remove ( ship );

                 return  ship ;
             }
         }

         return   null ;
     }

     public   String  toString ()   {
         String  st  =   "\n\nSeaPort: "   +   super . toString ();

         for   ( Dock  md  :  docks )   {
            st  +=   "\n"   +  md ;
         }

        st  +=   "\n\n --- List of all ships in que:" ;

         for   ( Ship  ms  :  que )   {
            st  +=   "\n   > "   +  ms ;
         }

        st  +=   "\n\n --- List of all ships:" ;

         for   ( Ship  ms  :  ships )   {
            st  +=   "\n   > "   +  ms ;
         }

        st  +=   "\n\n --- List of all persons:" ;

         for   ( Person  mp  :  persons )   {
            st  +=   "\n   > "   +  mp ;
         }

         return  st ;
     }

     public   synchronized   void  checkDocks ()   {
         for   ( Dock  dock  :  docks )   {
            dock . checkDock ();
         }
     }

     public   boolean  newPersonnel ( ArrayList < String >  requirements )   {
         ArrayList < Person >  personnelChecker  =   new   ArrayList <> ();

         for   ( String  requirement  :  requirements )   {
             for   ( Person  person  :  persons )   {
                 if   ( person . hasSkill ( requirement )   &&   ! personnelChecker . contains ( person ))   {
                    personnelChecker . add ( person );
                 }

                 if   ( personnelChecker . size ()   ==  requirements . size ())   {
                     return   true ;
                 }
             }
         }

         return   false ;
     }

     public   ArrayList < Person >  requestWorkers ( ArrayList < String >  requirements ,   Job  job )   {
         ArrayList < Person >  requiredWorkers  =   new   ArrayList <> ();

         for   ( String  requirement  :  requirements )   {
             for   ( Person  person  :  persons )   {
                 if   ( person . hasSkill ( requirement ))   {
                     synchronized   ( this )   {
                        requiredWorkers . add ( person . hire ());
                     }
                 }

                 if   ( requiredWorkers . size ()   ==  requirements . size ())   {
                    broadcastUpdateOnResourcePool ();

                     if   ( requestList . contains ( job ))   {
                        requestList . remove ( job );
                     }

                     return  requiredWorkers ;
                 }
             }
         }

         if   ( ! requestList . contains ( job ))   {
                        requestList . add ( job );
         }

         if   ( ! requiredWorkers . isEmpty ())   {
            releaseWorkers ( requiredWorkers );
         }

         return   null ;
     }

     public   void  releaseWorkers ( ArrayList < Person >  workers )   {
         for   ( Person  worker  :  workers )   {
             if   ( worker  !=   null )   {
                 synchronized   ( this )   {
                    worker . release ();
                 }
             }
         }

        broadcastUpdateOnResourcePool ();
     }

     private   void  broadcastUpdateOnResourcePool ()   {
         int  availableResources  =  getAvailableResources ();

        resourceLabel . setText ( "Resources: "   +  availableResources );

        requestLabel . setText ( "Requests: "   +  requestList . size ());

         if   ( resourceProgress  !=   null )   {
            resourceProgress . setValue ( availableResources );

             if   ( availableResources  <   Math . round ( persons . size ()   *   0.2 ))   {
                resourceProgress . setForeground ( Color . red );
             }   else   if   ( availableResources  <   Math . round ( persons . size ()   *   0.6 ))   {
                resourceProgress . setForeground ( Color . yellow );
             }   else   {
                resourceProgress . setForeground ( Color . blue );
             }
         }
     }

     private   int  getAvailableResources ()   {
         int  numOfAvailablePerson  =   0 ;

         for   ( Person  person  :  persons )   {
             if   ( person . isAvailable )   {
                numOfAvailablePerson ++ ;
             }
         }

         return  numOfAvailablePerson ;
     }

     private   void  setVisualElements ()   {
        containerPanel  =   new   JPanel ();

        requestLabel . setMaximumSize ( new   Dimension ( 100 ,   25 ));

        requestLabel . setMaximumSize ( new   Dimension ( 100 ,   25 ));

        resourceLabel . setMinimumSize ( new   Dimension ( 100 ,   25 ));

        resourceLabel . setMinimumSize ( new   Dimension ( 100 ,   25 ));

         GroupLayout  groupLayout  =   new   GroupLayout ( containerPanel );

        containerPanel . setLayout ( groupLayout );

        setLayout ( groupLayout );
     }

     private   void  setLayout ( GroupLayout  groupLayout )   {
        groupLayout . setAutoCreateGaps ( true );

        groupLayout . setAutoCreateContainerGaps ( true );

         JLabel  portLabel  =   new   JLabel ( "Port: "   +  getName (),   SwingConstants . LEFT );

        portLabel . setMaximumSize ( new   Dimension ( 120 ,   20 ));

        portLabel . setMinimumSize ( new   Dimension ( 120 ,   20 ));

        resourceProgress  =   new   JProgressBar ( 0 ,  persons . size ());

        broadcastUpdateOnResourcePool ();

        groupLayout . setHorizontalGroup ( groupLayout . createSequentialGroup ()

                 . addComponent ( portLabel )

                 . addComponent ( resourceProgress )

                 . addComponent ( resourceLabel )

                 . addComponent ( requestLabel )

                 );

        groupLayout . setVerticalGroup ( groupLayout . createParallelGroup ( GroupLayout . Alignment . LEADING )

                 . addComponent ( portLabel )

                 . addComponent ( resourceProgress )

                 . addComponent ( resourceLabel )

                 . addComponent ( requestLabel )

                 );
     }

     public   Component  getContainerPanel ()   {
        setVisualElements ();

         return  containerPanel ;
     }
}

Project3 SeaPort_00/src/SeaPortProgram.java

Project3 SeaPort_00/src/SeaPortProgram.java

/**
 * 
 * SeaPortProgram.java 
 * Handles GUI and User Input. Simulate different features of Sea Ports.
*/

import  javax . swing . * ;
import  javax . swing . tree . DefaultMutableTreeNode ;
import  java . awt . * ;
import  java . awt . event . ActionEvent ;
import  java . awt . event . ActionListener ;
import  java . io . File ;
import  java . io . FileNotFoundException ;
import  java . util . Scanner ;
import  javax . swing . JButton ;
import  javax . swing . JSplitPane ;

public   class   SeaPortProgram   {
     static   World  world ;

     public   static   void  main ( String []  args )   {
         Scanner  scanner ;

        world  =   new   World ();

         try   {
            scanner  =   new   Scanner ( new   File ( selectSimulationFile ()));

            world . readFile ( scanner );

            scanner  =   null ;

             System . gc ();

             new   JDisplay ( world . toString ());
         }   catch   ( FileNotFoundException  e )   {
            e . printStackTrace ();
         }
     }

     private   static   String  selectSimulationFile ()   {
         String  file  =   null ;

         JFileChooser  jFileChooser  =   new   JFileChooser ( "." );
        jFileChooser . setDialogTitle ( "Please select a data file" );
        jFileChooser . setFileSelectionMode ( JFileChooser . FILES_ONLY );

         if   ( jFileChooser . showOpenDialog ( null )   ==   JFileChooser . APPROVE_OPTION )   {
            file  =  jFileChooser . getSelectedFile (). toString ();
         }   else   {
             System . exit ( 0 );
         }

         return  file ;
     }

    @ SuppressWarnings ( "serial" )

     private   static   class   JDisplay   extends   JFrame   {
         String  str ;
         JTextArea  jta ;
         JComboBox <?>  sortBox ;
         JComboBox <?>  jcb ;
         JTextField  jtf ;
         JButton  loadDBoutton ;
         JButton  inOrderNameButton ;
         JScrollPane  jSP1 ;
         JTree  tree ;
         JScrollPane  jSP2 ;

         public   JDisplay ( String  str )   {
             this . str  =  str ;

            createAndShowGUI ();
         }

         public   void  addComponentsToPane ( Container  contentPane )   {
            initComponentsAndSetFeatures ();

            addActionListeners ();
            setLayoutForDisplay ( contentPane );
         }

         private   void  addActionListeners ()   {
            sortBox . addActionListener ( new   ActionListener ()   {

                @ Override

                 public   void  actionPerformed ( ActionEvent  e )   {
                     int  index  =  sortBox . getSelectedIndex ();

                     String  sorted  =  sortShipsInQue ( index );

                     if   ( index  !=   0   &&   ! sorted . matches ( str ))   {
                        jta . setText ( sorted );

                        loadDBoutton . setEnabled ( true );
                     }
                 }

             });

            jcb . addActionListener ( new   ActionListener ()   {

                @ Override

                 public   void  actionPerformed ( ActionEvent  e )   {
                    jtf . setEditable ( jcb . getSelectedIndex ()   !=   0 );
                 }

             });

            jtf . addActionListener ( new   ActionListener ()   {

                @ Override

                 public   void  actionPerformed ( ActionEvent  e )   {
                     //Remove all redundant spaces

                     String  searchStr  =  jtf . getText (). replaceAll ( "[\\s\\t]+$" ,   "" ). replaceAll ( "^[\\s\\t]+" ,   "" );

                    searchStr  =  searchStr . replaceAll ( "(\\s+){2,}" ,   "" );

                     String  result  =  search ( searchStr );

                     if   ( result  !=   null   &&  result . length ()   >   0 )   {
                        jta . setText ( result );
                     }   else   {
                        jta . setText ( "No result found!" );
                     }

                    loadDBoutton . setEnabled ( result  ==   null   ||   ! str . matches ( result ));
                 }

             });

            loadDBoutton . addActionListener ( new   ActionListener ()   {

                @ Override

                 public   void  actionPerformed ( ActionEvent  e )   {
                    jta . setText ( str );

                    loadDBoutton . setEnabled ( false );
                 }

             });

            inOrderNameButton . addActionListener ( new   ActionListener ()   {

                @ Override

                 public   void  actionPerformed ( ActionEvent  e )   {
                    jta . setText ( world . sortByName ());

                    loadDBoutton . setEnabled ( true );
                 }

             });
         }

         private   String  search ( String  searchStr )   {
             switch   ( jcb . getSelectedIndex ())   {

             case   1 :
                 return  world . searchIndex ( searchStr );
             case   2 :
                 return  world . searchName ( searchStr );
             case   3 :
                 return  world . searchSkill ( searchStr );
             default :

                 return   "" ;

             }
         }

         private   String  sortShipsInQue ( int  index )   {
             switch   ( index )   {

             case   1 :
                 return  world . sortByWeight ();
             case   2 :
                 return  world . sortByLength ();
             case   3 :
                 return  world . sortByWidth ();
             case   4 :
                 return  world . sortByDraft ();

             default :

                 return   "" ;

             }
         }

         private   void  setLayoutForDisplay ( Container  contentPane )   {
                         // Create a left-right split pane           
             JSplitPane  jSplitPane  =   new   JSplitPane ( JSplitPane . HORIZONTAL_SPLIT ,  jSP2 ,  jSP1 );

             JPanel  containerForResources  =   new   JPanel ();
             JPanel  containerForJobs  =   new   JPanel ();
                        containerForResources . setLayout ( new   BoxLayout ( containerForResources ,   BoxLayout . PAGE_AXIS ));
            containerForJobs . setLayout ( new   BoxLayout ( containerForJobs ,   BoxLayout . PAGE_AXIS ));
                         boolean  hasJob  =   true ;
             boolean  hasResource  =   true ;

             for   ( SeaPort  seaPort  :  world . ports . values ())   {
                containerForResources . add ( seaPort . getContainerPanel ());

                 if   ( ! hasResource )   {
                    hasResource  =   ! seaPort . persons . isEmpty ();
                 }

                     for   ( Ship  ship  :  seaPort . ships )   {
                         for   ( Job  job  :  ship . jobs )   {
                            containerForJobs . add ( job . getContainerPanel ());

                            hasJob  =   true ;
                         }
                     }
             }

             JScrollPane  sPaneForJobsContainer  =   new   JScrollPane ( new   JLabel ( "No jobs!" . toUpperCase (),   SwingConstants . CENTER ));
                         if   ( hasJob )   {
                            sPaneForJobsContainer  =   new   JScrollPane ( containerForJobs );
                         }

             JScrollPane  sPaneForResourcesContainer  =   new   JScrollPane ( new   JLabel ( "No resources!" . toUpperCase (),   SwingConstants . CENTER ));

             if   ( hasResource )   {
                sPaneForResourcesContainer  =   new   JScrollPane ( containerForResources );
             }

            sPaneForJobsContainer . setMaximumSize ( new   Dimension ( 5600 ,   800 ));

            sPaneForResourcesContainer . setMaximumSize ( new   Dimension ( 5600 ,   200 ));

             GroupLayout  layout  =   new   GroupLayout ( contentPane );

            contentPane . setLayout ( layout );

            layout . setAutoCreateGaps ( true );

            layout . setAutoCreateContainerGaps ( true );

            layout . setHorizontalGroup ( layout . createSequentialGroup ()

                     . addGroup ( layout . createParallelGroup ( GroupLayout . Alignment . LEADING )

                             . addGroup ( layout . createSequentialGroup ()

                                     . addComponent ( jcb )

                                     . addComponent ( jtf ))

                             . addComponent ( sortBox )

                             . addComponent ( jSplitPane )

                             . addGroup ( layout . createSequentialGroup ()

                                     . addComponent ( loadDBoutton )

                                     . addComponent ( inOrderNameButton ))

                             . addComponent ( sPaneForResourcesContainer ))

                     . addComponent ( sPaneForJobsContainer ));

            layout . setVerticalGroup ( layout . createParallelGroup ( GroupLayout . Alignment . LEADING )

                     . addGroup ( layout . createSequentialGroup ()

                             . addGroup ( layout . createParallelGroup ( GroupLayout . Alignment . BASELINE )

                                     . addComponent ( jcb )

                                     . addComponent ( jtf ))

                             . addComponent ( sortBox )

                             . addComponent ( jSplitPane )

                             . addGroup ( layout . createParallelGroup ( GroupLayout . Alignment . LEADING )

                                     . addComponent ( loadDBoutton )

                                     . addComponent ( inOrderNameButton ))

                             . addComponent ( sPaneForResourcesContainer ))

                     . addComponent ( sPaneForJobsContainer ));
         }

        @ SuppressWarnings ({   "unchecked" ,   "rawtypes"   })
         private   void  initComponentsAndSetFeatures ()   {
             String []  sortOptions  =   { "Sort ships in que" ,   "weight" ,   "length" ,   "width" ,   "draft" };

             String []  searchOptions  =   { "Search" ,   "index" ,   "name" ,   "skill" };

            jta  =   new   JTextArea ( str ,   15 ,   30 );

            sortBox  =   new   JComboBox ( sortOptions );

            jcb  =   new   JComboBox ( searchOptions );

            jtf  =   new   JTextField ();

            loadDBoutton  =   new   JButton ( "Reload Data" );

            inOrderNameButton  =   new   JButton ( "Sort" );

            jtf . setPreferredSize ( new   Dimension ( 110 ,   15 ));

            jtf . setEditable ( false );

            sortBox . setSelectedIndex ( 0 );

            sortBox . setMaximumSize ( new   Dimension ( 5650 ,   20 ));

            jcb . setSelectedIndex ( 0 );

            jta . setFont ( new   Font ( "Monospaced" ,   0 ,   12 ));

            jta . setEditable ( false );

            jta . setLineWrap ( true );

            jSP1  =   new   JScrollPane ( jta ,   JScrollPane . VERTICAL_SCROLLBAR_AS_NEEDED ,   JScrollPane . HORIZONTAL_SCROLLBAR_AS_NEEDED );

            loadDBoutton . setEnabled ( false );

            initTree ();
         }

         private   void  initTree ()   {
             DefaultMutableTreeNode  top  =   new   DefaultMutableTreeNode ( "World" );

            createNodes ( top );

            tree  =   new   JTree ( top );

            jSP2  =   new   JScrollPane ( tree );
         }

         private   void  createNodes ( DefaultMutableTreeNode  top )   {
             DefaultMutableTreeNode  portNode ;

             for   ( SeaPort  seaPort  :  world . ports . values ())   {
                portNode  =  createThingNode ( seaPort );

                 DefaultMutableTreeNode  node  =   new   DefaultMutableTreeNode ( "Docks" );

                 for   ( Dock  dock  :  seaPort . docks )   {
                     DefaultMutableTreeNode  dockNode  =  createThingNode ( dock );

                     if   ( dock . getShip ()   !=   null )   {
                         DefaultMutableTreeNode  shipNode  =  createThingNode ( dock . getShip ());

                         for   ( Job  job  :  dock . getShip (). jobs )   {
                            shipNode . add ( createThingNode ( job ));
                         }

                        dockNode . add ( shipNode );
                     }

                    node . add ( dockNode );

                    portNode . add ( node );
                 }

                node  =   new   DefaultMutableTreeNode ( "Ships in Que" );

                 for   ( Ship  ship  :  seaPort . que )   {
                     DefaultMutableTreeNode  shipNode  =  createThingNode ( ship );

                     for   ( Job  job  :  ship . jobs )   {
                        shipNode . add ( createThingNode ( job ));
                     }

                    node . add ( shipNode );
                 }

                portNode . add ( node );

                node  =   new   DefaultMutableTreeNode ( "All Ships" );

                 for   ( Ship  ship  :  seaPort . ships )   {
                     DefaultMutableTreeNode  shipNode  =  createThingNode ( ship );

                     for   ( Job  job  :  ship . jobs )   {
                        shipNode . add ( createThingNode ( job ));
                     }

                    node . add ( shipNode );
                 }

                portNode . add ( node );

                node  =   new   DefaultMutableTreeNode ( "People" );

                 for   ( Person  person  :  seaPort . persons )   {
                    node . add ( createThingNode ( person ));
                 }

                portNode . add ( node );

                top . add ( portNode );
             }
         }

         private   DefaultMutableTreeNode  createThingNode ( Thing  thing )   {
             return   new   DefaultMutableTreeNode ( thing . getIndex ()   +   " "   +  thing . getName ());
         }

         private   void  createAndShowGUI ()   {
             JFrame  frame  =   new   JFrame ( "Sea Port Simulation" );

            frame . setDefaultCloseOperation ( JFrame . EXIT_ON_CLOSE );

             //Set up the content pane and add swing components to it

            addComponentsToPane ( frame . getContentPane ());

            frame . setPreferredSize ( new   Dimension ( 1300 ,   800 ));

            frame . pack ();

            frame . setVisible ( true );

             World . setInit ();   // world is set!
         }
     }
}

Project3 SeaPort_00/src/Ship.java

Project3 SeaPort_00/src/Ship.java

/**
 * 
 * Ship.java
 * extends methods from Thing.java class and handles ship actions
*/

import  java . util . ArrayList ;
import  java . util . Scanner ;

public   class   Ship   extends   Thing   {
     double  draft ,  weight ,  length ,  width ;

     ArrayList < Job >  jobs  =   new   ArrayList <> ();

      final   Object  lock  =   new   Object ();
      boolean  jobInProcess ;

     public   Ship ( Scanner  sc )   {
         super ( sc );

         if   ( sc . hasNextDouble ())   {
            weight  =  sc . nextDouble ();
         }

         if   ( sc . hasNextDouble ())   {
            length  =  sc . nextDouble ();
         }

         if   ( sc . hasNextDouble ())   {
            width  =  sc . nextDouble ();
         }

         if   ( sc . hasNextDouble ())   {
            draft  =  sc . nextDouble ();
         }

         new   PortTime ();
     }

     public   String  toString ()   {
         String  st  =   this   instanceof   PassengerShip   ?   "Passenger "   :   "Cargo " ;

        st  +=   "Ship: "   +   super . toString ();

         if   ( jobs . isEmpty ())   {
             return  st ;
         }

         for   ( Job  mj  :  jobs )   {
            st  +=   "\n       - "   +  mj ;
         }

         return  st ;
     }

     public   boolean  isDocked ()   {
         if   ( parentThing  instanceof   SeaPort )   {
             (( SeaPort )  parentThing ). checkDocks ();
         }   else   {
             (( Dock )  parentThing ). checkDock ();
         }

         return  parentThing  instanceof   Dock   &&   (( Dock ) parentThing ). getShip ()   ==   this ;
     }

     public   boolean  doJob ()   {
         boolean  doingJob  =   false ;

         synchronized   ( lock )   {
             if   ( ! jobInProcess )   {
                jobInProcess  =   true ;

                doingJob  =   true ;
             }
         }

         return  doingJob ;
     }

     public   void  removeJob ( Job  job )   {
         synchronized   ( lock )   {
            jobInProcess  =   false ;
         }

         if   ( ! jobs . isEmpty ()   &&  jobs . contains ( job ))   {
            jobs . remove ( job );
         }

         if   ( jobs . isEmpty ())   {
             (( Dock )  parentThing ). leaveDock ();
         }
     }

     boolean  newPersonnel ( ArrayList < String >  requirements )   {
         return   (( Dock )  parentThing ). newPersonnel ( requirements );
     }

     public   ArrayList < Person >  requestWorkers ( ArrayList < String >  requirements ,   Job  job )   {
         return   (( Dock )  parentThing ). requestWorkers ( requirements ,  job );
     }

     public   void  releaseWorkers ( ArrayList < Person >  workers )   {
         (( Dock )  parentThing ). releaseWorkers ( workers );
     }
}

Project3 SeaPort_00/src/Thing.java

Project3 SeaPort_00/src/Thing.java

/**
 * 
 * Thing.java
 * Helps make comparisons between objects
 *  Central object class for all items in the seaport system
*/

import  java . util . HashMap ;
import  java . util . Scanner ;

public   class   Thing   implements   Comparable < Thing >   {
         int  index ;
     int  parent ;
     String  name ;

     Thing  parentThing ;

     public   Thing (){}

     public   Thing ( Scanner  sc )   {
         this . name  =  sc . next ();
         this . index  =  sc . nextInt ();
         this . parent  =  sc . nextInt ();
     }

     public   void  setParentThing ( HashMap <? ,   ?>  parentHashMap ){
         if ( parentHashMap . get ( parent )   !=   null )   {
            parentThing  =   ( Thing )  parentHashMap . get ( parent );
         }
     }

    @ Override

     public   int  compareTo ( Thing  o )   {
         return  name . compareTo ( o . getName ());
     }

     public   int  getIndex ()   {
         return  index ;
     }

     public   String  getName ()   {
         return  name ;
     }

     public   int  getParent ()   {
         return  parent ;
     }

     public   synchronized   String  toString ()   {
         return  name  +   " "   +  index ;
     }
}

Project3 SeaPort_00/src/World.java

Project3 SeaPort_00/src/World.java

/**
 * 
 * World.java
 * This class covers the entire program at the top of the tree
*/

import  java . util . * ;
import  java . util . ArrayList ;
import  java . util . HashMap ;
import  java . util . Scanner ;

public   class   World   extends   Thing   {
     HashMap < Integer ,   SeaPort >  ports ;
     PortTime  time ;

     static   boolean  init ;

     public   World ()   {
        ports  =   new   HashMap <> ();
     }

    @ SuppressWarnings ( "resource" )
     public   void  readFile ( Scanner  sc )   {
         HashMap < Integer ,   Dock >  dockHashMap  =   new   HashMap <> ();
         HashMap < Integer ,   Ship >  shipHashMap  =   new   HashMap <> ();

         while   ( sc . hasNextLine ())   {
             String  line  =  sc . nextLine ();
            line  =  line . replaceAll ( "^\\s+" ,   "" );

             if   ( line . length ()   >   0   &&  line . charAt ( 0 )   !=   '/' )   {
                 Scanner  objectScanner  =   new   Scanner ( line );

                 if   ( ! objectScanner . hasNext ())   {
                    extracted ();
                     return ;
                 }

                 String  keyword  =  objectScanner . next (). toLowerCase ();

                 if   ( keyword . matches ( "port" ))   {
                    addPort ( objectScanner );
                 }   else   if   ( keyword . matches ( "dock" ))   {
                    addDock ( objectScanner ,  dockHashMap );
                 }   else   if   ( keyword . matches ( "pship" ))   {
                    addPassengerShip ( objectScanner ,  dockHashMap ,  shipHashMap );
                 }   else   if   ( keyword . matches ( "cship" ))   {
                    addCargoShip ( objectScanner ,  dockHashMap ,  shipHashMap );
                 }   else   if   ( keyword . matches ( "person" ))   {
                    addPerson ( objectScanner );
                 }   else   if   ( keyword . matches ( "job" ))   {
                    addJob ( objectScanner ,  shipHashMap );
                 }
             }
         }
     }

     private   void  extracted ()   {
         return ;
     }

     private   void  addJob ( Scanner  objectScanner ,   HashMap < Integer ,   Ship >  shipHashMap )   {
         Job  job  =   new   Job ( objectScanner );

         if   ( shipHashMap . get ( job . getParent ())   !=   null )   {
            job . setParentThing ( shipHashMap );

            shipHashMap . get ( job . getParent ()). jobs . add ( job );
         }
     }

     private   void  addPerson ( Scanner  objectScanner )   {
         Person  person  =   new   Person ( objectScanner );

         // Add person to port

        ports . get ( person . getParent ()). addPerson ( person );
     }

     private   void  addCargoShip ( Scanner  objectScanner ,   HashMap < Integer ,   Dock >  dockHashMap ,   HashMap < Integer ,   Ship >  shipHashMap )   {
         CargoShip  cargoShip  =   new   CargoShip ( objectScanner );

        shipHashMap . put ( cargoShip . getIndex (),  cargoShip );

        assignShip ( cargoShip ,  dockHashMap );
     }

     private   void  addPassengerShip ( Scanner  objectScanner ,   HashMap < Integer ,   Dock >  dockHashMap ,   HashMap < Integer ,   Ship >  shipHashMap )   {
         PassengerShip  passengerShip  =   new   PassengerShip ( objectScanner );

        shipHashMap . put ( passengerShip . getIndex (),  passengerShip );

        assignShip ( passengerShip ,  dockHashMap );
     }

     private   void  addDock ( Scanner  objectScanner ,   HashMap < Integer ,   Dock >  dockHashMap )   {
         Dock  dock  =   new   Dock ( objectScanner );

        dock . setParentThing ( ports );

        dockHashMap . put ( dock . getIndex (),  dock );

         // Add dock to port
        ports . get ( dock . getParent ()). addDock ( dock );
     }

     private   void  addPort ( Scanner  sc )   {
         SeaPort  seaPort  =   new   SeaPort ( sc );

        ports . put ( seaPort . getIndex (),  seaPort );
     }

     private   void  assignShip ( Ship  ship ,   HashMap < Integer ,   Dock >  dockHashMap )   {
         Dock  md  =  dockHashMap . get ( ship . getParent ());

         if   ( md  ==   null )   {
            ship . setParentThing ( ports );

            ports . get ( ship . getParent ()). addShip ( ship );

            ports . get ( ship . getParent ()). addToQue ( ship );

            extracted ();
             return ;
         }

         if   ( md . getShip ()   !=   null )   {
            ports . get ( ship . getParent ()). addToQue ( ship );
         }   else   {
            md . setShip ( ship );
         }

        ports . get ( md . getParent ()). addShip ( ship );
     }
         public   String  toString ()   {
         String  st  =   "The world: " ;

         for   ( SeaPort  sp  :  ports . values ())   {
            st  +=  sp . toString ();
         }

         return  st ;
     }

     public   String  sortByName ()   {
         List < SeaPort >  comparisonList  =   new   ArrayList <> ();

         String  str  =   "" ;

         for   ( SeaPort  seaPort  :  ports . values ())   {
            seaPort . sortAllListsByName ();

            comparisonList . add ( seaPort );
         }

         Collections . sort ( comparisonList );

         for   ( SeaPort  seaPort  :  comparisonList )   {
            str  +=   "Port: " ;

            str  +=  seaPort . getName ()   +   "\n Ships:\n    " ;

             for   ( Ship  ship  :  seaPort . ships )   {
                str  +=  ship . getName ()   +   "\n    " ;

                str  +=   " Jobs:\n        " ;

                 for   ( Job  job  :  ship . jobs )   {
                    str  +=  job . getName ()   +   "\n        " ;
                 }

                str  +=   "\n    " ;
             }

            str  +=   "\n Docks:\n    " ;

             for   ( Dock  dock  :  seaPort . docks )   {
                str  +=  dock . getName ()   +   "\n    " ;
             }

            str  +=   "\n People:\n    " ;

             for   ( Person  person  :  seaPort . persons )   {
                str  +=  person . getName ()   +   "\n    " ;
             }
         }

         return  str ;
     }

     public   String  sortByWeight ()   {
         String  str  =   "" ;
             for   ( SeaPort  seaPort  :  ports . values ())   {
            seaPort . sortByWeight ();

            str  +=   "Port: " ;

            str  +=  seaPort . getName ()   +   "\n Ships:\n    " ;

             for   ( Ship  ship  :  seaPort . que )   {
                str  +=  ship . getName ()   +   ": "   +  ship . weight  +   "\n    " ;
             }

            str  +=   "\n" ;
         }

         return  str ;
     }

     public   String  sortByLength ()   {
         String  str  =   "" ;

         for   ( SeaPort  seaPort  :  ports . values ())   {
            seaPort . sortByLength ();

            str  +=   "Port: " ;

            str  +=  seaPort . getName ()   +   "\n Ships:\n    " ;

             for   ( Ship  ship  :  seaPort . que )   {
                str  +=  ship . getName ()   +   ": "   +  ship . length  +   "\n    " ;
                 }

            str  +=   "\n" ;
         }

         return  str ;
     }

     public   String  sortByWidth ()   {
         String  str  =   "" ;

         for   ( SeaPort  seaPort  :  ports . values ())   {
            seaPort . sortByWidth ();

            str  +=   "Port: " ;

            str  +=  seaPort . getName ()   +   "\n Ships:\n    " ;

             for   ( Ship  ship  :  seaPort . que )   {
                str  +=  ship . getName ()   +   ": "   +  ship . width  +   "\n    " ;
             }

            str  +=   "\n" ;
         }

         return  str ;
     }

     public   String  sortByDraft ()   {
         String  str  =   "" ;

         for   ( SeaPort  seaPort  :  ports . values ())   {
            seaPort . sortByDraft ();

            str  +=   "Port: " ;

            str  +=  seaPort . getName ()   +   "\n Ships:\n    " ;

             for   ( Ship  ship  :  seaPort . que )   {
                str  +=  ship . getName ()   +   ": "   +  ship . draft  +   "\n    " ;
             }

            str  +=   "\n" ;
         }

         return  str ;
     }

     private   Dock  getDockByIndex ( int  index )   {
         for   ( SeaPort  msp  :  ports . values ())   {
             for   ( Dock  md  :  msp . docks )   {
                 if   ( md . getIndex ()   ==  index )   {
                     return  md ;
                 }
             }
         }

         return   null ;
     }

     private   Ship  getShipByIndex ( int  index )   {
         for   ( SeaPort  msp  :  ports . values ())   {
             for   ( Ship  ms  :  msp . ships )   {
                 if   ( ms . getIndex ()   ==  index )   {
                     return  ms ;
                 }
             }
         }

         return   null ;
     }

     private   Person  getPersonByIndex ( int  index )   {
         for   ( SeaPort  port  :  ports . values ())   {
             for   ( Person  person  :  port . persons )   {
                 if   ( person . getIndex ()   ==  index )   {
                     return  person ;
                 }
             }
         }

         return   null ;
     }

     public   String  searchIndex ( String  search )   {
         int  index ;

         try   {
            index  =   Integer . parseInt ( search );
         }   catch   ( NumberFormatException  e )   {
             return   "Try again, not a number!" ;
         }

         String  result  =   "" ;

        result  +=   ( getDockByIndex ( index )   !=   null )   ?  getDockByIndex ( index ). toString ()   :   "" ;

        result  +=   ( getShipByIndex ( index )   !=   null )   ?  getShipByIndex ( index ). toString ()   :   "" ;

        result  +=   ( getPersonByIndex ( index )   !=   null )   ?  getPersonByIndex ( index ). toString ()   :   "" ;

        result  +=   ( ports . get ( index )   !=   null )   ?  ports . get ( index ). toString ()   :   "" ;

         return  result ;
     }

     public   String  searchName ( String  search )   {
         String  result  =   "" ;

         for   ( SeaPort  port  :  ports . values ())   {
             for   ( Dock  dock  :  port . docks )   {
                 if   ( dock . getName (). toLowerCase (). matches ( search . toLowerCase ()))   {
                    result  +=  dock . toString ();
                 }
             }

             for   ( Ship  ship  :  port . ships )   {
                 if   ( ship . getName (). toLowerCase (). matches ( search . toLowerCase ()))   {
                    result  +=  ship . toString ();
                 }
             }

             for   ( Person  person  :  port . persons )   {
                 if   ( person . getName (). toLowerCase (). matches ( search . toLowerCase ()))   {
                    result  +=  person . toString ();
                 }
             }

             if   ( port . getName (). toLowerCase (). matches ( search . toLowerCase ()))   {
                result  +=  port . toString ();
             }
         }

         return  result ;
     }

     public   String  searchSkill ( String  search )   {
         String  result  =   "" ;

         for   ( SeaPort  port  :  ports . values ())   {
             for   ( Person  person  :  port . persons )   {
                 if   ( person . getSkill (). toLowerCase (). matches ( search . toLowerCase ()))   {
                    result  +=  person . toString ();
                 }
             }
         }

         return  result ;
     }

     public   static   void  setInit (){
        init  =   true ;
     }

     public   static   boolean  getInit (){
         return  init ;
     }

     public   String  search ( String  type ,   String  target )   {
         return   null ;
     }
}

Project3 SeaPort_00/UML_P3.ucls