From c867c2cec1ac1466e4b2e309e314336793e22a5d Mon Sep 17 00:00:00 2001 From: Amanjot Singh Date: Wed, 29 Jan 2020 15:58:54 -0500 Subject: [PATCH] Initial commit --- .classpath | 6 + .idea/.gitignore | 2 + .idea/artifacts/CST8284_19F_Assignment4.xml | 10 + .../artifacts/CST8284_19F_Assignment4_jar.xml | 8 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/uiDesigner.xml | 124 +++ .idea/vcs.xml | 6 + .project | 17 + .settings/org.eclipse.jdt.core.prefs | 11 + CST8284_19F_Assignment4.iml | 11 + CurrentAppointments.apts | Bin 0 -> 7038 bytes bin/META-INF/MANIFEST.MF | 3 + bin/cst8284/asgmt4/employee/Dentist.class | Bin 0 -> 708 bytes bin/cst8284/asgmt4/employee/Employee.class | Bin 0 -> 1029 bytes bin/cst8284/asgmt4/scheduler/Activity.class | Bin 0 -> 1307 bytes .../asgmt4/scheduler/Appointment.class | Bin 0 -> 2895 bytes .../scheduler/AppointmentDialog$1.class | Bin 0 -> 792 bytes .../scheduler/AppointmentDialog$2.class | Bin 0 -> 789 bytes .../scheduler/AppointmentDialog$3.class | Bin 0 -> 786 bytes .../asgmt4/scheduler/AppointmentDialog.class | Bin 0 -> 7029 bytes .../BadAppointmentDataException.class | Bin 0 -> 918 bytes bin/cst8284/asgmt4/scheduler/Scheduler.class | Bin 0 -> 10568 bytes .../asgmt4/scheduler/SchedulerLauncher.class | Bin 0 -> 1308 bytes .../asgmt4/scheduler/SchedulerViewer.class | Bin 0 -> 5676 bytes .../scheduler/SortAppointmentByCalendar.class | Bin 0 -> 1058 bytes .../asgmt4/scheduler/TelephoneNumber.class | Bin 0 -> 2579 bytes doc/allclasses-frame.html | 29 + doc/allclasses-noframe.html | 29 + doc/constant-values.html | 229 ++++++ doc/cst8284/asgmt4/employee/Dentist.html | 341 ++++++++ doc/cst8284/asgmt4/employee/Employee.html | 431 ++++++++++ .../asgmt4/employee/class-use/Dentist.html | 124 +++ .../asgmt4/employee/class-use/Employee.html | 235 ++++++ .../asgmt4/employee/package-frame.html | 21 + .../asgmt4/employee/package-summary.html | 151 ++++ doc/cst8284/asgmt4/employee/package-tree.html | 141 ++++ doc/cst8284/asgmt4/employee/package-use.html | 180 ++++ doc/cst8284/asgmt4/scheduler/Activity.html | 459 +++++++++++ doc/cst8284/asgmt4/scheduler/Appointment.html | 652 +++++++++++++++ .../asgmt4/scheduler/AppointmentDialog.html | 513 ++++++++++++ .../BadAppointmentDataException.html | 416 ++++++++++ doc/cst8284/asgmt4/scheduler/Scheduler.html | 774 ++++++++++++++++++ .../asgmt4/scheduler/SchedulerLauncher.html | 286 +++++++ .../asgmt4/scheduler/SchedulerViewer.html | 389 +++++++++ .../scheduler/SortAppointmentByCalendar.html | 309 +++++++ .../asgmt4/scheduler/TelephoneNumber.html | 513 ++++++++++++ .../asgmt4/scheduler/class-use/Activity.html | 220 +++++ .../scheduler/class-use/Appointment.html | 251 ++++++ .../class-use/AppointmentDialog.html | 124 +++ .../BadAppointmentDataException.html | 124 +++ .../asgmt4/scheduler/class-use/Scheduler.html | 124 +++ .../class-use/SchedulerLauncher.html | 124 +++ .../scheduler/class-use/SchedulerViewer.html | 124 +++ .../class-use/SortAppointmentByCalendar.html | 124 +++ .../scheduler/class-use/TelephoneNumber.html | 220 +++++ .../asgmt4/scheduler/package-frame.html | 31 + .../asgmt4/scheduler/package-summary.html | 204 +++++ .../asgmt4/scheduler/package-tree.html | 157 ++++ doc/cst8284/asgmt4/scheduler/package-use.html | 171 ++++ doc/deprecated-list.html | 124 +++ doc/help-doc.html | 229 ++++++ doc/index-files/index-1.html | 172 ++++ doc/index-files/index-10.html | 129 +++ doc/index-files/index-11.html | 136 +++ doc/index-files/index-12.html | 142 ++++ doc/index-files/index-13.html | 250 ++++++ doc/index-files/index-14.html | 160 ++++ doc/index-files/index-2.html | 142 ++++ doc/index-files/index-3.html | 146 ++++ doc/index-files/index-4.html | 171 ++++ doc/index-files/index-5.html | 143 ++++ doc/index-files/index-6.html | 141 ++++ doc/index-files/index-7.html | 177 ++++ doc/index-files/index-8.html | 150 ++++ doc/index-files/index-9.html | 140 ++++ doc/index.html | 75 ++ doc/overview-frame.html | 22 + doc/overview-summary.html | 139 ++++ doc/overview-tree.html | 163 ++++ doc/package-list | 2 + doc/script.js | 30 + doc/serialized-form.html | 251 ++++++ doc/stylesheet.css | 574 +++++++++++++ .../CST8284_19F_Assignment4.jar | Bin 0 -> 48238 bytes .../CST8284_19F_Assignment4.jar | Bin 0 -> 48238 bytes .../META-INF/MANIFEST.MF | 3 + .../cst8284/asgmt4/employee/Dentist.class | Bin 0 -> 708 bytes .../cst8284/asgmt4/employee/Employee.class | Bin 0 -> 1021 bytes .../cst8284/asgmt4/scheduler/Activity.class | Bin 0 -> 1219 bytes .../asgmt4/scheduler/Appointment.class | Bin 0 -> 2895 bytes .../scheduler/AppointmentDialog$1.class | Bin 0 -> 825 bytes .../scheduler/AppointmentDialog$2.class | Bin 0 -> 822 bytes .../scheduler/AppointmentDialog$3.class | Bin 0 -> 819 bytes .../asgmt4/scheduler/AppointmentDialog.class | Bin 0 -> 7081 bytes .../BadAppointmentDataException.class | Bin 0 -> 918 bytes .../cst8284/asgmt4/scheduler/Scheduler.class | Bin 0 -> 10639 bytes .../asgmt4/scheduler/SchedulerLauncher.class | Bin 0 -> 1302 bytes .../asgmt4/scheduler/SchedulerViewer.class | Bin 0 -> 5740 bytes .../scheduler/SortAppointmentByCalendar.class | Bin 0 -> 1068 bytes .../asgmt4/scheduler/TelephoneNumber.class | Bin 0 -> 2536 bytes src/META-INF/MANIFEST.MF | 3 + src/cst8284/asgmt4/employee/Dentist.java | 50 ++ src/cst8284/asgmt4/employee/Employee.java | 65 ++ src/cst8284/asgmt4/scheduler/Activity.java | 89 ++ src/cst8284/asgmt4/scheduler/Appointment.java | 166 ++++ .../asgmt4/scheduler/AppointmentDialog.java | 185 +++++ .../BadAppointmentDataException.java | 65 ++ src/cst8284/asgmt4/scheduler/Scheduler.java | 436 ++++++++++ .../asgmt4/scheduler/SchedulerLauncher.java | 33 + .../asgmt4/scheduler/SchedulerViewer.java | 103 +++ .../scheduler/SortAppointmentByCalendar.java | 44 + .../asgmt4/scheduler/TelephoneNumber.java | 142 ++++ 113 files changed, 13624 insertions(+) create mode 100644 .classpath create mode 100644 .idea/.gitignore create mode 100644 .idea/artifacts/CST8284_19F_Assignment4.xml create mode 100644 .idea/artifacts/CST8284_19F_Assignment4_jar.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 CST8284_19F_Assignment4.iml create mode 100644 CurrentAppointments.apts create mode 100644 bin/META-INF/MANIFEST.MF create mode 100644 bin/cst8284/asgmt4/employee/Dentist.class create mode 100644 bin/cst8284/asgmt4/employee/Employee.class create mode 100644 bin/cst8284/asgmt4/scheduler/Activity.class create mode 100644 bin/cst8284/asgmt4/scheduler/Appointment.class create mode 100644 bin/cst8284/asgmt4/scheduler/AppointmentDialog$1.class create mode 100644 bin/cst8284/asgmt4/scheduler/AppointmentDialog$2.class create mode 100644 bin/cst8284/asgmt4/scheduler/AppointmentDialog$3.class create mode 100644 bin/cst8284/asgmt4/scheduler/AppointmentDialog.class create mode 100644 bin/cst8284/asgmt4/scheduler/BadAppointmentDataException.class create mode 100644 bin/cst8284/asgmt4/scheduler/Scheduler.class create mode 100644 bin/cst8284/asgmt4/scheduler/SchedulerLauncher.class create mode 100644 bin/cst8284/asgmt4/scheduler/SchedulerViewer.class create mode 100644 bin/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.class create mode 100644 bin/cst8284/asgmt4/scheduler/TelephoneNumber.class create mode 100644 doc/allclasses-frame.html create mode 100644 doc/allclasses-noframe.html create mode 100644 doc/constant-values.html create mode 100644 doc/cst8284/asgmt4/employee/Dentist.html create mode 100644 doc/cst8284/asgmt4/employee/Employee.html create mode 100644 doc/cst8284/asgmt4/employee/class-use/Dentist.html create mode 100644 doc/cst8284/asgmt4/employee/class-use/Employee.html create mode 100644 doc/cst8284/asgmt4/employee/package-frame.html create mode 100644 doc/cst8284/asgmt4/employee/package-summary.html create mode 100644 doc/cst8284/asgmt4/employee/package-tree.html create mode 100644 doc/cst8284/asgmt4/employee/package-use.html create mode 100644 doc/cst8284/asgmt4/scheduler/Activity.html create mode 100644 doc/cst8284/asgmt4/scheduler/Appointment.html create mode 100644 doc/cst8284/asgmt4/scheduler/AppointmentDialog.html create mode 100644 doc/cst8284/asgmt4/scheduler/BadAppointmentDataException.html create mode 100644 doc/cst8284/asgmt4/scheduler/Scheduler.html create mode 100644 doc/cst8284/asgmt4/scheduler/SchedulerLauncher.html create mode 100644 doc/cst8284/asgmt4/scheduler/SchedulerViewer.html create mode 100644 doc/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.html create mode 100644 doc/cst8284/asgmt4/scheduler/TelephoneNumber.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/Activity.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/Appointment.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/AppointmentDialog.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/BadAppointmentDataException.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/Scheduler.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/SchedulerLauncher.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/SchedulerViewer.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/SortAppointmentByCalendar.html create mode 100644 doc/cst8284/asgmt4/scheduler/class-use/TelephoneNumber.html create mode 100644 doc/cst8284/asgmt4/scheduler/package-frame.html create mode 100644 doc/cst8284/asgmt4/scheduler/package-summary.html create mode 100644 doc/cst8284/asgmt4/scheduler/package-tree.html create mode 100644 doc/cst8284/asgmt4/scheduler/package-use.html create mode 100644 doc/deprecated-list.html create mode 100644 doc/help-doc.html create mode 100644 doc/index-files/index-1.html create mode 100644 doc/index-files/index-10.html create mode 100644 doc/index-files/index-11.html create mode 100644 doc/index-files/index-12.html create mode 100644 doc/index-files/index-13.html create mode 100644 doc/index-files/index-14.html create mode 100644 doc/index-files/index-2.html create mode 100644 doc/index-files/index-3.html create mode 100644 doc/index-files/index-4.html create mode 100644 doc/index-files/index-5.html create mode 100644 doc/index-files/index-6.html create mode 100644 doc/index-files/index-7.html create mode 100644 doc/index-files/index-8.html create mode 100644 doc/index-files/index-9.html create mode 100644 doc/index.html create mode 100644 doc/overview-frame.html create mode 100644 doc/overview-summary.html create mode 100644 doc/overview-tree.html create mode 100644 doc/package-list create mode 100644 doc/script.js create mode 100644 doc/serialized-form.html create mode 100644 doc/stylesheet.css create mode 100644 out/artifacts/CST8284_19F_Assignment4/CST8284_19F_Assignment4.jar create mode 100644 out/artifacts/CST8284_19F_Assignment4_jar/CST8284_19F_Assignment4.jar create mode 100644 out/production/CST8284_19F_Assignment4/META-INF/MANIFEST.MF create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/employee/Dentist.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/employee/Employee.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Activity.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Appointment.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$1.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$2.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$3.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/BadAppointmentDataException.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Scheduler.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/SchedulerLauncher.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/SchedulerViewer.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.class create mode 100644 out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/TelephoneNumber.class create mode 100644 src/META-INF/MANIFEST.MF create mode 100644 src/cst8284/asgmt4/employee/Dentist.java create mode 100644 src/cst8284/asgmt4/employee/Employee.java create mode 100644 src/cst8284/asgmt4/scheduler/Activity.java create mode 100644 src/cst8284/asgmt4/scheduler/Appointment.java create mode 100644 src/cst8284/asgmt4/scheduler/AppointmentDialog.java create mode 100644 src/cst8284/asgmt4/scheduler/BadAppointmentDataException.java create mode 100644 src/cst8284/asgmt4/scheduler/Scheduler.java create mode 100644 src/cst8284/asgmt4/scheduler/SchedulerLauncher.java create mode 100644 src/cst8284/asgmt4/scheduler/SchedulerViewer.java create mode 100644 src/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.java create mode 100644 src/cst8284/asgmt4/scheduler/TelephoneNumber.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..51a8bba --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/artifacts/CST8284_19F_Assignment4.xml b/.idea/artifacts/CST8284_19F_Assignment4.xml new file mode 100644 index 0000000..5af5b36 --- /dev/null +++ b/.idea/artifacts/CST8284_19F_Assignment4.xml @@ -0,0 +1,10 @@ + + + $PROJECT_DIR$/out/artifacts/CST8284_19F_Assignment4 + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/CST8284_19F_Assignment4_jar.xml b/.idea/artifacts/CST8284_19F_Assignment4_jar.xml new file mode 100644 index 0000000..082c1ac --- /dev/null +++ b/.idea/artifacts/CST8284_19F_Assignment4_jar.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/out/artifacts/CST8284_19F_Assignment4_jar + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e208459 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..3df29ed --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..52fb556 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + CST8284_19F_Assignment4 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/CST8284_19F_Assignment4.iml b/CST8284_19F_Assignment4.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/CST8284_19F_Assignment4.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/CurrentAppointments.apts b/CurrentAppointments.apts new file mode 100644 index 0000000000000000000000000000000000000000..e07d83b0d313d34292f56983d69e6ae72f4ee376 GIT binary patch literal 7038 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 literal 0 HcmV?d00001 diff --git a/bin/META-INF/MANIFEST.MF b/bin/META-INF/MANIFEST.MF new file mode 100644 index 0000000..7ac2d42 --- /dev/null +++ b/bin/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: cst8284.asgmt4.scheduler.SchedulerLauncher + diff --git a/bin/cst8284/asgmt4/employee/Dentist.class b/bin/cst8284/asgmt4/employee/Dentist.class new file mode 100644 index 0000000000000000000000000000000000000000..61a7382060f7025e52ae0f0720ac1715296967aa GIT binary patch literal 708 zcmZ{hT}$IY6o%hv(3t|5e zp^}L*pfNPQ6aCHA4Ek>wN_EIkY_)p~S~t2BWfbwFf)aFwSx1KAWE5P8_>5opg28ek zkNZ6y%e2l9HFYf$hNkl!F(2!Iq1tk8_${}69u90*#WEZmw0kLYE@jRzm{%j;4|$Nm zK51#Dflx=DlDATg&&ETNRa@=z&#nd*8RkA3m{?{gA0>%Ml7Jq|#0rCPEPbCQF|o=} z>c-JsXkwkZyAg?$^ctsP$Yo4Bnmk7{EPMeaZ#Npno*+k>tdcLjn~s4d=%MK^f+BIC zQ#7cuDKpBY?MIjo^ie>WVtNfMV~S#BBA`4?RoXm5F>O91b%Cj)ue$iTT`)Ct*ekhNL literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/employee/Employee.class b/bin/cst8284/asgmt4/employee/Employee.class new file mode 100644 index 0000000000000000000000000000000000000000..4e5315077fd8377f2feb7fc876e4dd14066f48b2 GIT binary patch literal 1029 zcmaiz+iuf95QhKF!A^qPv}sdHIi&?k4yC3c7Zt6F5CW-ER4!6QLR>j!30oXHiZ?}h zD~^o>5)Z&bA!gU64QV7~$zIR?^Ucif^{?OGe*$RWk%EJb@m zDLlJH5uXoeGqdk{!WZ&@Az7}pN&PH%!%fUFENa%IK8rjSO)UJ=Mr#yG-m_4^5<@~z zrD9Y`1ooldA4+P3JH5ReEEFxQ;3|W$AJ<$h&(v1hSuk9)U?RhiZwj9u4SO9vICeUo zo-=SAuk8$kde^}WZZeod|Ggi4@N<-XTh%I2H*pE=S!{|PRK61-!$$LezEkH(+*P!k z;%-{FuefH&rE*<$TCtFZL9uQWV^}U%W_^o137)!AoC-NQ9`$LIV!85qmNFxQs99C> zp@k}H47pY?9Ju_2P$ta%Js8{SL#5V9m!$KQpo^NJm9~$bWFoRqoGbLUtyRGM4_L20 zV}6X~FIfGgGuP;DkPcYGbsYgxYVbIBhuCV@tQKyJacerMq?4>jf^}?=RHc{V^aI@- zkgJYyr&>G1y=lUxCajQ-R53xV)If|baz17~j#);v_6_A}&ejCSIOiDW9C9<}*qRHZ qt6x$6sAs-#p*}HCI>OLDxP=F#W8~yz$QkTu$dk(uO5V|>>VE)I;N|IrUVF=We^3OgcjyjqDNWm|&R{NR)>2qTFK4?;Ti;msxkd&|(j;d`O5JW;XS zI`1WL`C$ynWyf>G3PUd6soWVUR2UK)ewAzJ!8IKj3^VlP3l$9vqdLYg&M**iv3ZHk zFw#XkK5|{h4S6I@M>Z}VktsVK->M(&@!)-IMYinQmRqsN9Vm4lz++jD@f4mCttJD{bUX*W zJ!u^ubFWI*w~95}r&FxSTav&pbWBNL1FJd;m}by+{CZ&XSB`Aa{`2l$kdLNR>IVAu z(x^z^sL2%R5zQ0OkfuF7iuEH&>kI~I9HPiB<@L~>3Ts|G>f-irFU(EYZ(pni^PXC#iG6vzL)?2S#wAR&u!^}E6OO^4> zCrjU~Jn5?+K&y19(kefIAIkEao>^FjnG_{eZ1?n>KIeB%|NG3}|NQY6fC=p9kP^7s zXnB+4lM@xawY}#}R9cN4W3z1;Ze_aJbWGdZGi)!1v_RjkzOPp--QKR;-`F)8w3-zd zP^+d>Sv6c!x6G&dhGhuk^rknfdo&xUDT}seT9p~yGVD#=tqSyRnQqHl*7wMyKQK|Q zS3TFXx5*%H>7DnP=8j{NomNYPT{A30SuMBsHVh7s*BhR>Z+c$|TuI(H9U9SwzLv_M zZn!Peu^%qZ3Wz0v(=(3U@^ss)>sH&yQ0e$j2xM=Yw&_g??3d$GJf2fBMU+0-@{o79 zE|8vaHjO-r1X?QKWxSfhEB`sCpqLUDa8V%BYFefza3jR+F8A>Iaohp~E=iojWr1%` zn&Od0!h=js<$or9re@kkaLQ|e*7|EsL$~TW>5sG*E~dR5vn6mnIewSE>GXTZ1&L;> zZCNbJ0(ziv@+0)BJY45uj7i)?MWE0!yy=d-hhi%eY@MwJ{xC>+DmJMYMd3iKR59jhvft+3sd z^FQdPgFMJS9!`T}cmgc67^*?dK(WQ6Ma`@8rzuixQ`JJx}Xl&ZFex#2tWr zd>|olI`G{|M&R1>+;q&Uy#GUq7jT9cJSUKI4r>BKQIX$io7Se`7O)D9kLx3e_warJ zkFcJ@W9o0mJD|iT_>|ftCAVg(9@wdmYLwhMtL*P{i7%j2v(cMPYMms)Zt(M5q*z|mfm19SHIhu!NJp(kIx-rI z=);S&r(dm|rFVj^^C0~W(TYQ!xR)2Tk561NPSTTKo(ywaU75XhuDBu>( zV-imuupkohg+q*d_CVen_jV%!E(W2?76Vd?f_xJTLf?)!kXjVvI|BJW0fhC;AarMA zKvtq4Kg5F2_a_cyB?|H*f&7#J!eV6*Y9pa9mvqEpUHB8Lj}Guq^HKNlv5(LCH+*c; n<2DU^%Xx0{JY0X`W3TJ+OWNY270u=6u3Q!l_3lx`6x#m+#P3ZX literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/AppointmentDialog$1.class b/bin/cst8284/asgmt4/scheduler/AppointmentDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2fac858b4952a39b890264aa38c43520dc876041 GIT binary patch literal 792 zcmb7CZEF)j5PmjqXU?mwu}!O1>q~?*N)II;3Kb!wsaB$XP~zw9-85Ob?1kG+;@=W{ z0YCTy{88fUB_J3DJ-FT3o!MueXJ)?t`1%b%8}~dE1Rg}j9zHs3htdqkwjG*iMDaAC zEbL4ssnT{#+8!&Jq{GHT4<&)!cXB2}IkzFr*cZN4I!@=ESWYZu0_B-Z8s`F=eHZsW zG;^hg;q#MBj_F9C@>pqQp9pL>{}ix45GZxin5q!C7@&-bk0RCrc(^1`Y`TE;zS8t^ zIzFT9jXX<8pw>?#nG9s6+Xn%Oy_c%ScglmCX`95Qq6Lkr%qInW|oVa7v(Rh1pL?OG>hm& zInni%4js7sT%Vqf7UW-$9i_2{+XAhBuR?&kuGm{<#C`pJ3Iu{vttsm!(ik$h#f>WR zK#7f->lRxD{ykja`)WRDh5W{E-Twr?^##F)JZ7EO3daCFZ15W7wvWrG@k!tcHkSw; ze(x}=t&i}_pRx4|z|S2|IoY!uq`nATg76bu$1cMZaf1O0xQRX9OHBF>8f^LOa}@ad E3FAk-0{{R3 literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/AppointmentDialog$2.class b/bin/cst8284/asgmt4/scheduler/AppointmentDialog$2.class new file mode 100644 index 0000000000000000000000000000000000000000..08a5da21d404b0bb056529e6f0889c891ad364fc GIT binary patch literal 789 zcmb7CU279T6g`u#HS5;4v8Gk4RU09V(uInLBguoO{l__s7p~-vPAo&_hAsab)b_!C^a;W-zkt&_qLu zCkbU?XFN`owj}%Wa-HQAL_sE^c0wzoZiIU!{{Q zqEqEW*Oxl9@A7kfPINRU|D5bFjXm5KX#IN?0_?hC*UXTsAQRHD%;qB?5S(dESvQf! zkik9fQjw=gtkqnr*edYv;R@eZ^C>IjH-78UXZWqJ2tMX9tGre?26%@xUW45Bv5p#_ z1g>LafzaXi4zt?&1i$7x#K-2`;ddw=Yb0leuCTBW|$)GFhBu!vBP_bNk2e? LEuVdk0)M{%)^)r! literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/AppointmentDialog$3.class b/bin/cst8284/asgmt4/scheduler/AppointmentDialog$3.class new file mode 100644 index 0000000000000000000000000000000000000000..1bed663bd31988c6835ede1055078ad4e5918e09 GIT binary patch literal 786 zcmb7CU279T6g`tovS!_y8f#j$T0bJBQM#acC{%=yv`~rq&=Q}gyVGQ3GZS_uiT)PR z{~-7QKKKLtQR1CVz=tU4!p_{8d*|G9?!7;Le)|rfjr%?d3=d;t_aE)IBW{Lc+m1{; z63H|bS=5S5!tk0QhNYd+%UF03Oyt__)O2HC;fp zFO_&P9iNHpl%J)7q1M+iPX|1c?!3G#+L1I2d;R~BNEFwIF)8Y%+7NYyodwes$%jt< z!R{bH9a}y&iN>nr5Z7>>Vao{H6X$%IT8ArMPDIA7)QaRbkDVw_%q$f*FUnt1F$5=i zn#JNsI??r&4(+-8RG&i?FUUU^cBB&@cNkj#UWE|%T(PTWq~|^U_GCE{4B@d-BI~By z7-4XmTIA6vvGtnk6IliNeO#dXN7?S72(G`rb=s>Vt{v8r!~y&0GCmt z6T=m3ED<{N-eFc+pAeM3;OcLHAa}f{WFK;n`XX=%LQil5+XUm`CIJ+13p=zIiS%7G L$O_2kDA4x{{ujG% literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/AppointmentDialog.class b/bin/cst8284/asgmt4/scheduler/AppointmentDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..be26f8358d2631b543e88c7e9742736af6fbad68 GIT binary patch literal 7029 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 literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/BadAppointmentDataException.class b/bin/cst8284/asgmt4/scheduler/BadAppointmentDataException.class new file mode 100644 index 0000000000000000000000000000000000000000..48ec0156dc7e056bcaa181e9957d20d18064f774 GIT binary patch literal 918 zcmbV~Yj4vq6oy~-zBap1)&Yf$l-t^LA`(4!j!jf_{+|00S402xL>V~}^L2)eL}LBHMC8ebeHcR}6iJ|EN@u9{7wluBr5bh_3Xi0c=71sFYz-K4 zhjA!M*q~Z3Bf%5l8vW7bLoQVbRmzfoHze0Cxffc5WiV_ya8P5|Z7x?>&e$^ReW}EY z$>>DrH~b_L)?6G=XPo+@c$UnWQ<*S4=>N}gcFV}(sPpw1My7S#@v70_+5J;Xi$kPU04Qn1#wVI&V0*O(1$58#nVMF0Q* literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/Scheduler.class b/bin/cst8284/asgmt4/scheduler/Scheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..10daf95b5802f535a7e527fed628b98ca442cac6 GIT binary patch literal 10568 zcmb7K34B!LwLd4B+LIdg{)ms%Cq zYU|Qk!F?-MX~keC(NuBYuy%E+wVUs~+V^br_4&5?Q2IaLy)(H(lGYda<=*?pZ) z|FeHLuYLaH(?qnG-`6OQX+|JvEm^o^alMi3j#!K9lYt&HmjXOf%&K%y}OMWmA47RrR;m1c) zX@-!RiCwEkf?nMzlxOQSj>a=hXbDBlwp3)Rnb=@#4Fi;tmRP_DcN&S1JUfH4tNt-m z)tx@dr*a>t*XlHns+fwCrj>!xOY@l~uSz8n(6vh`$@xayO3JDQIvr07!Be-HGl6MR zRrP3EZV)u0k7Crc9V8RW}Oi=b!w$Hrel&lv0jH(Q^*L%;LX(zq(-k*zbY1q$D+_`qs!Xt z5YQ;DkZ119x^^zF0B~G~WdzP|HR6t?6(VHBQ>9KP&`V)MK*6$%H#<`jm2JPD^w>U1q#hv1V0m0|Bvvs4bWE!J5Ti5m&SiY1hH zShA+*>yjM4!F0{2ppA5mQAWlDVS^bq<2?ulc1mgdJ6u8T9U-d^G6*&| z>2x#Qf`VXcC~747I!q%G=wWJf^XLLXd7h)0F`#J{y?#rlTj|@-D?CB;+U)jRXFc8` z;bmg2qnV7|Ar!;dB!F=$IO9gE0q{M^9D^X48uVtTiDs9BlN` z0jBY*qn4TQN6lWpOczjopi`O#;OCNenxn`D8AuwwAS7-rX9N5b5>lUpq$5JAVn-zX zp-xXJ&aF@c#oNIg_GC;7j%Rgxj-F>Kj~M5h8HG!+u`y{T6uVNeY;jjCnOO*9DSA<- zm*{251XAWWVQ&m8>h#j9OqDK#{Y^15>5s-NzqvDHC1KTtzz!Q|^g4<+RVC(xK@0{% z$#~f4b5ZfqkC~2Zi}{V=>Nx4&7E48g{;j6fYnoBNj}FmK#eaSVRl;*%QXTXQNsn)$ zGR<`*8{|w9^wQhNehmv2_zlqW(l0>(Pd-8KS30eynO^!etkLJC-=aM5`G$FHGWs%g zlI;J!PX9#z3=aiXaK$QEHo^tdA9VVWV8}?3Wk)5fO5kx;B&c=FMQG()40QLVa%+f~T}3{4~AqmSq>5~2SCuIljQtVXER z=sz>900!*~B`fpkNKd{f?)$S=O;Fi%}b^4V44{8d*{Un(H$eh&M?2I=S(`R%< zqtA1!EAtk$1~b$fRrO46o$16^AAQ34I(xVP6-jRb``ItX$g`c;k2RgWT!adz$4Is* z(&(yCUVOsEI_pw57X-qwBmn)0i+wx+^)O@5Zmob!b9=TP26NJ2KvJ<2+cG@cR9`UO z)>;N$%!CKP&MI=obHIb;XJ3wlAN6d$xf7L_)5zv>g12S4%~fAK(_m%H&s9=7)pV}) zeqncp09CTMpa7O4LyliuQZ!F*Yg6j1SrBfQt@~K?Td+W zEVEPYWVO>YF4lMva(9O1)$MDtn%DRQrm2}XqWQL%wMJr`YsyJXelx9_fMY%Rs6T;H)((WS8v<1`AZsCTXXlK762{CgO}GKytJm0NNcJdF#M{6^YVJ2sEGSxs1j1)u>HcG zW(IxS${WNYH!{t2EOMj|xksuyy}SvX7q73;|~~7NyedQAe;)~u?MAj0HHJKk6Aq^Y%Ek;ej^<3 zF_2e70oR0icxR&MN%r`w>ZnxncGAE#)B5b4wTLLuUXW>wQ7gBR<334aBs2E|T} z>f~`GvNg6cwzJX4U**d+z6_QmUY@OjGZS>aLgJ(xd3B(-faL^{S|b`?$uxaTPg>#d z;p1Jr0W~FGBQ9_)(+ zZZhla=p|g{@b~8;x@mSp32UkO;%q}NP!`k7v6o~(L{WZ-Z`S!1Ig5}ZljdmBGNJ*5 zy+b@ze%-3`xA``^Vs9~{A%rMIZMot{=6g{1#S^grvfl=@9Ja>Bh(ygOFq2NIJRK{{#beb7OWf}G- zQc-E0(62Zrl!$6b_))m7Wx-wjKs#Zn?$68cvO44mgjM_CM-69!eIq&)IfwTnU^F$g zwszsi%Ll+j&Juf)#y`lE$_o7THXB(h)Oa9MhAV{D2^874z$OTxk$xw-)TQLhmVl#@ zg~2-I<0w=cz5EnZ)F5&5pw7?mvw$*TqB#oy$|koKRw0pem=~l>7^2&ObH+#MbG?k# zG;hHIFTW_2@BGMo+3aPVU*T5~!JH6^h*de}Zj#>)frt_D@{h!k{1G4jn18DAPhgtE zUfzs&-Hn56{+ZaUSJ@KAy!;F79LLUHehXycAoC8$#QnH=7lqThuxTV=55tK*giHq$ z@$!4XTXbm~jGYev7~Cz-f-aWlbSVG-E)6c+;VR_DXIjm~e36Q#qqEG%moE=K+2Csp z?tJq71*1i{&%={Xj#t$p?61*2?g?Ye9Cudnc-`SvKkQ(;V_?CWJUYn*> zgVg*O<`GydRALFkWnh(XK9f&tG1>xXS|N73Yp)V#FAYGo(>hQ%6D#l)5uYoXd|(c( zKL!P>4Im>M%;*=SI<|aykTwp`Sv6@oJ5A>SzJ3beRhqho1+@|DqRF%cx;jg3ECPWF zg_XYYB8c|eaqasRB(pj<15pO00vIgnGm#G4J!^2lL;W|W@!!&jc(v_Zl`TMXmUlFtc zz8K(L0wsQhrqQL4^D>v5GwEw|J?0Cnz;8OH;z-=tGYMl9K5EqtsjeDS7Cb;VWOuu9 zY2_VM!29vOGELunhEgJoy|<0+jj+9&$d9vFu}0f~YUwuGji(CeZ4cd!&1827f0+E@ z8F$c~4g(j#K!kys8c6&S&0@Kx>8_Hy^9u**-ldg$XriE?MjzaiBYTC?-#svv`)Cpl zMJwq6VDcce`H+j38i$uj;N_t#FF>LSjC?oC$g5yP9QjO}k+oSy9?mjyQa|nElKw$@ zJWYfBG{hxO+xPi{^i1nKrLu9dd|sMf@L=jI@Clc$=EIqY2EgwV;CBf8J_SCXrbYBD z-0eBI;Pdzp_X0K3i*SWklnj2GsjLi392u5?!fU`dPa&&Q-e=Uz8Xfv8#3+)3E(hN| zqI2xpDSW+5i{Lk1C2xq=Oe{{*Ptx@BlDFVL_LJv4d49+Cr$KsmFHKkT-;?=D19#zF z$#1d~#6{e8_!eY)n-GymkwGlMLwP4n1)smm@)-slv4hHq-lco# z81Msg`#m=OmtD-26DK}!(RFcbWtp`hGTUXbQI3~?dTo+E!K_oUfZm*#PveQk{Ec-s!d^4C%;j-EWq zcNeO>@F_+Q!*@TUDfBtMW*>nqe2x#gOs8=kKDFj!g$LhM3y_mFCF1EepL`6QSAI5g zi3%)5)Xt@REF>zSM*b3)L82+3xSl6r$K$a|B0&MQk(VcPIpuQ&R@>Uy3~D|+iFOuH z{t=o@nnq1iigSK5i>7e2KjBrl#&- zgQxCgDk}H1?WGBI<(>zr2*1-@TV5b@pn>DZo>OVe@MS{ zI{raAB!w`p2YQ?*j)*#Hng@e-&}es(L>;#3PWZG}#O z0h|mIEx`O~+{jBYGow&^BE;X^EaOuE_;t8j&Zpw;2J-O=h;Zt` zKZrcYH?_crzge4~=5HYd0@T)dqd_{ac93^h?4fGpMoel$_^g zI1#2!ycLcVKx_(v^=))4cT*+zP&IGIp8(Y3Ij>y=Q8p+PX91i%gMY@sHg78~Rzu!lsP$^0bl=D-ps z^APSt)5Vm(N#n;`HBOI*R5%;3rQ-7-m1J1)yC0U6r1|Mme$Kh}sB24YDZh~Bm-f&k z+`Xpm#^LUD-0dd6ymjWk=3HM_*Fk<`A71`EyY$WM(zn&pnex_I@}_frJF|46e%?M9 z&KsV4sZ_4o{ZuU1%=kXX*MC{czY>6zx;FrsCV1w}>Us-3tgesHqv~qoT_XvNZ-Ynd zMkL+?f4rTNQ1UH&C*99?;S2WNw4d+ADcyYvbGy_!$iIfENa=bj{|0wVkBJv%JCkzp zq$RMLDO0CSIs#@`TnE1p0TGfH0%KKG@NXp&lB*4xt@H$f+=toSxo2mdd1m(K@1q|83Ru+;W0R5> z2;VII-B~F|2F%BL4J++djcf6W>u7{*WGM7`m72SS+Z z!j*O)lb9lY>;C-2s$2ENexPF<)2a_M41-aoClcw%;^sZ?93}wX?k9Go(!bV8*hc&_Nv5h0gD>$kp!Lgwe&Tu zra}bdpLs=k{(*t}C{TU%j*H<}w5s;aR`A!{tvVu@wmfe)Y!oAHY8M~z{Bv>Rpdq60 z%l~Ypy!dW({@Rh(xZ{*;DT;jwm}w+*Ff17uLxLQS$iZN|ab4lBIXnnNpy4Ss>x^LM zm960!!;Oof)W()Zn54vUdNUx))axay(aEHh(b_$Gh~!t=#GsQ^zkz=AkTqHWTCdP4 zg-w z5jAP3nUUoFp+j2A5h!vF3&gwK59)-I>^Dv0uZ0NEv!YcUlFC>*@yt zO4`k|7Q+%OjUb+f9YUv|63YaZjA%}WHmr^tjt`qa>*@ojd1J~zbP5)rR4QGeU?r*r z7IArB$i}Mh(!ff&c$I<(q7j@euuQtDU_#!=7*?ZJ!5STZ8oK}2(9(lthB}@}jb3tjR|HK| zehNm{%`r5hRzgZDSO_J8O>{{>hd#$*(AvgzBdu9cY!RsO3B>8du58xSGY;eK*ok4& zO2n`cTcx?%=#VJ?$5nLd!=9%qK(1INT3mK5zV_CzT)aaqL49A?M zn*TAGmuitfS`}Q3o%Fk!&1#vn!1^#EkLWEvD?%WBV_g+(3fj>@COW2PL5N79C6sMM zr-DnQ-BDX}`gO<9BIxpIk(3;5GcEeCTb(q=of!6@RxavR(1U#p6c>4)1gd?Qa*;RJ zqh{0*&2rt>h+YNH!es(yag9&&cEhx_{aMXY9VQ^TQr9J2-H(9?F8AZ^f+)~e!2w)B zuypMKJ?)ITDb`WCvxY^4e{$_r3a*wiWt7>Y=_8{~>CS}vm7fJv1w%*)C{l%HJH2W~ zGX(P4Qb+}Nz9kBVu0+a7vquz+Lg$`pnsKQQ8QgA;Wz7r;)e>S)K2|hI;IIM%V*-o0 zZ#xAw%ino}r>3xRJ_lR6ydW1oqUb8$VnAcM^GmNB|aGdLd6`UxVeEU;e& zun{*Xcs_2FRabKcbX#|eL`mI2Sq>v!C1!{OndZL@MsSOt!Ucm_%~*}4*)iOV7fVC0 zmrqUvFPU2vT<64ao8;$hI4%SAGFF|Cy&;G}New0$)kBU-*N(cJA@o!sN&+j~CG#L- zwJJK4&3BZ7fEOz-1_hS2IT=>MJwB#zA_jo8BiuE)D4kqLC_?rr0a!+sUP z-K_eBR@Z4}oG4yL;`gZ;yHB(9;TZ118>HLb7(^?)tz=9DZxUE~N`>|G$8Zm}%AdC? zcpKg>Bc(ZV6S_X+RypG`=pMXN!MpHoHZrEisTQzohL+54BbgB$ax&fOkjzKFhlkP1 zypuit>}T*6DLm}LEDr=-lvKbCNa&|==SklYZppdC($o2>cLLW*R^_BC_eC(xa#3)* zlxtH*@}g6yjbN75aIQeRnXw&9W#6%5n32tE1`jIuC~lIap54y0-EI!AkOy`g^y_&_AHm0#a)rL<1^EzD?rq3(5 z6R(Nl3v_y-L$|YrI+@5Hx447ALs5L01WFXXh8n2EP$VV3#>##gK*vlB>xLHRQQ%Pt z^BV$NJtEA>l+Y<>UZ7EYi$3i()pXba?B13+=5JAgN2B;IgTMQz?!gq1!; zHn5VoImz^x2&#VZ$Pin>s(>ecG(*8+f=3N?Y$&a+-AL{|4UKopv~|RZi?c!0z9N`$L|&V0r%2e z_HFMF5X0kmLcyQpUgdJH4s|jg=Rn0~DfU+df0JTyDb}tUJcp>32R4x8scOr-!8{XI z?do34_frWHGDb@;qn99oVS{bnaQ7&L=9nmx4PLQ{V*Di#Q=4k<~bRY!FbFrDy89TO2z77@|8U2A{V zO+$7qMa1N3VTp8Nk7nCE4CQ^esLx@S?NPJ-`8iLqW@*V{MU;yQnro2nArN*a*?y`m zVc4D_bF7oL@XpZ?R+F&DQz_yZ9yg51gxo|+2bmNEnAN{gEK@|4q(UUk(!k>y8)Kh2 zZlyF2NM)WumUl7RAnP9cUYlt;vfgETG-uRI+c8lsRz*Y&JAqpnUEq4=he;#A?C2$-=QaK0!94lg1hR2F_L$z(qj)+|X>rM;Ge6Ed% zcBaLdMcK`~IG~oTqnHh$~5yYqV}bZHKI`BIw0{u8Llq3`$tqoopq?#q>jD{+l^dAv+%Ioy6={e4{F1*wYu1J0w)I-;oOz71&N zB|!$N!PAU8TtaXUyxiY^9bSP~Qp33<$E)yaQYj`6Dn6!T)G0BonZ;d$@z)ktR8Hab zJ+rt+0(`TJ;VtVMb9l#TIFj_%MtW%zsTiz7<&EE489V2{c6Juz8-r2Cf~mudjHN0zE^l{ zY+x9^-xx$;n2Z3X+ln0=+sTDa?807-m+}7sm-E7ZkfX}$ zewr*f#PK@LIvBt)jyK{e^5tsW%JB~RIC=8}#tqzU0zc#vugoy-!@EnR_v78!;#92aetrew$Oc1qV ztyt$ioh#}^gZtDdHi)GAv{7sk&F<4yv0Yr?K3ym-60PE5$p7dFu~W2(4y^buHhs8_ literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.class b/bin/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.class new file mode 100644 index 0000000000000000000000000000000000000000..b620514158bbbab0d17955d98fb867dc4fbd5e59 GIT binary patch literal 1058 zcmb7D%Wl&^6g?9=F%3?WHf?#AlD?b=SVUP=N>!-@At42d6x0Q~i8D=I96NHxNPG(a zkPVw4u|TZ(D8wDd0!wYAu$Z|IpL_0W{OkAk9{^ft7|1X*oryeZ9<^*f8IEMjo;a6c z5P2fBdqF5q$K$~Dt6{+8ptth#NJ4{p4|yX zV;*uDgbcZ3*LUR!gJxCF8T3vt5P4|0ZNk7UhGN(C#oK7q7vX!}_XNXwH*mOj&O=w( ziBp%C?u4P${r{TV42Ba|MC51IVun=5?d4F_*Ljq&X<&n4Z((IAUK3lm!;l{eny-Ax zC6%;gRlBL#C6jLFaSsm++^2zD|7zkP9?@|7;vxu%W7C>bq?XdIeoz#TP3$OWmS0Fg z`_TDVK4&;suE9CJ$x!G??tFa1$H_hpZ%BAU2{a#uLlY&eQP;g73LWvvRa@R(_{N^8 zb{STB?$GBlQtiFFPMsdv-{*F`TvsP;JfXTYI$8Q3l%%&v_X=4yNk%eT`-c2iQZg{< z&c)6$3Z$EJ09H{Xi+%{K(XE0*LTe-|^%>S1bY{5w1=-B>pS?}CKGmj#(qiV-IAWJr z_Gnf6afY2aOOk>3sNhPRwSryJGK2+mWJ<--DMjul`JYmp%3r9}f1=!=GsA&Om2QHz P8GDr1inS_gv8?|Auz>+~ literal 0 HcmV?d00001 diff --git a/bin/cst8284/asgmt4/scheduler/TelephoneNumber.class b/bin/cst8284/asgmt4/scheduler/TelephoneNumber.class new file mode 100644 index 0000000000000000000000000000000000000000..342c853919e708376b3fd3e1240aebc0ca80293c GIT binary patch literal 2579 zcmZ`)U2_vv7=BKgHrsS7B^HnmaZ!XMO&UIm7RraAEfQ!;wGgEgaGPwCg=9DGZuk^X z#tX+=z0q+-hifi$MuQ_Wdf}b^3w{XtoZU1HCCSI0H_v&`d!F|*|2+TWPXJ^1B7%@W zyx@A{2gb)Tx?8GxV;Q$lHj4F%;bhJm6{A+REn}`;T{fHu!U99r^c#AnqFbfRx#ep{ z!Hb|zVAw}ZJF{Rord~1c=*tyDK+zpTpR|hT|Js4Io zgiQiH@kBm~E!Y~tYcF^Z98$3j+XW(~J6)}Lw|)J^2woQ$>l&JqdNEt8*{0=H4a=L- zJ$?FC!KiukK*1XVvDv!oY1}d#P1kNn7ZmIg*zRAU*^Xw_E0tg)P&0~A?7&-+@@|2> z9enHLt%5xQ+pfe%?;gCDh^G_n!q~mUZs~ShMFL4WSk*n|*6k9xMFlB=>a6LyjHFgH zOQsih6BAm&b{r;JTd^Hl&`ej$X0z$}`T6u5Un%Wo*>DVr$t|yJXfo?ORitDUwN=H{ z-HKh%D|BC$l!8$vBxk*Ng@Szo8{srPdBaB z2BSeEjbZ>E^0nOh98QwU!DU)@Z@BYIRR@{hE>?d`HE*7#HYw z>&pQuusNQ~C0@>nR6n9(0!LY@(r(scNyc-DNd+w0Guc*f$lE9K?8`^;F5U68o2FN0 zy)^mlTiurR(n9yIq6*#=|SEW?uFsF=nnHf2qBT!UDb zI><#Ka9TwU?7{)p@Fe4)iKQFtB!L+fvvRwi+w*=?OZ1$Id5I1ZooVav4QoHn2ZJFt zBa0xfb69XtG{LY}Hd&m>nXX;e%6%}9CdjXCKC$awP6uNz%aMzmIpntB>4odFdaZfs zK&jn9PKsPVJ-MtR0)_r@H}FrQpQz}U=pfNGm*h@CMO5x6o*m2-j>LF};)tLmuw^YX zf%3_^St-h9Fgg0-QLNy)90MC=OsgsuaYtncNi+&Ey&w%sknkm3ht0tS^}S`&;vU6RTRO1Mi=b5Q!q}Ma^MfI%h0HF z6}xz_hu>a=5t4!BAP>n<`YQv+bt?v-QfJV|ULnT8fQ@{{IQ8>9DgOe#O+LY^BMof+ z4jZ0g$HmyrnDzv3{xuSNyMevmH^GruIsh|m;QrV_AMELC;Lz+yWGKRQZe&OqQYjn> zr+OMVJhbme3Ej?XPE(Tf@FE_X~OT-~&EC#4w*@S{}H7SEle? + + + + +All Classes + + + + + +

All Classes

+ + + diff --git a/doc/allclasses-noframe.html b/doc/allclasses-noframe.html new file mode 100644 index 0000000..506107e --- /dev/null +++ b/doc/allclasses-noframe.html @@ -0,0 +1,29 @@ + + + + + +All Classes + + + + + +

All Classes

+ + + diff --git a/doc/constant-values.html b/doc/constant-values.html new file mode 100644 index 0000000..30e5749 --- /dev/null +++ b/doc/constant-values.html @@ -0,0 +1,229 @@ + + + + + +Constant Field Values + + + + + + + + +
+ + + + + + + +
+ + +
+

Constant Field Values

+

Contents

+ +
+
+ + +

cst8284.asgmt4.*

+ +
+ +
+ + + + + + + +
+ + + + diff --git a/doc/cst8284/asgmt4/employee/Dentist.html b/doc/cst8284/asgmt4/employee/Dentist.html new file mode 100644 index 0000000..e688ada --- /dev/null +++ b/doc/cst8284/asgmt4/employee/Dentist.html @@ -0,0 +1,341 @@ + + + + + +Dentist + + + + + + + + + + + + +
+
cst8284.asgmt4.employee
+

Class Dentist

+
+
+ +
+
    +
  • +
    +
    +
    public class Dentist
    +extends Employee
    +
    This class extends from the Employee class and helps to make a Dentist object that stores the full + name of the Employee.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      Dentist() +
      No-arg constructor.
      +
      Dentist(java.lang.String fullname) +
      The 1-arg constructor for the Dentist class.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.String[]getActivityType() +
      First prints the menu options for the activity type and then asks for the user input.
      +
      + +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Dentist

        +
        public Dentist()
        +
        No-arg constructor.
        +
      • +
      + + + +
        +
      • +

        Dentist

        +
        public Dentist(java.lang.String fullname)
        +
        The 1-arg constructor for the Dentist class. Takes in the fullname passed and sets it to + the superclass constructor.
        +
        +
        Parameters:
        +
        fullname - the name passed tio the constructor and then it is passed to the Employee class.
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getActivityType

        +
        public java.lang.String[] getActivityType()
        +
        First prints the menu options for the activity type and then asks for the user input. Then it runs a series + of case statements to return a string based ob the user input. This string is used to set the category type of + Activity class.
        +
        +
        Specified by:
        +
        getActivityType in class Employee
        +
        Returns:
        +
        a activity type string that determines the type of activity user wants. Its pre defined, but is only + returned when a user submits a valid choice.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/employee/Employee.html b/doc/cst8284/asgmt4/employee/Employee.html new file mode 100644 index 0000000..76a1d09 --- /dev/null +++ b/doc/cst8284/asgmt4/employee/Employee.html @@ -0,0 +1,431 @@ + + + + + +Employee + + + + + + + + + + + + +
+
cst8284.asgmt4.employee
+

Class Employee

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.employee.Employee
    • +
    +
  • +
+
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    Dentist
    +
    +
    +
    +
    public abstract class Employee
    +extends java.lang.Object
    +
    The employee abstract class that have the abstract methods and fields to store employee information.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      private java.lang.StringfullName +
      The field used to store the current full name of the Employee.
      +
      protected static java.util.Scannerscan +
      scanner object used to take user input.
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ModifierConstructor and Description
      protected Employee() +
      Constructor chains to the next 1-arg constructor and passes a default value.
      +
      protected Employee(java.lang.String fullName) +
      Calls the setter of fullname and passes it to be set by it.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and TypeMethod and Description
      abstract java.lang.String[]getActivityType() +
      Abstract method to be overridden by subclasses.
      +
      java.lang.StringgetName() +
      Getter for fullName
      +
      voidsetName(java.lang.String fullName) +
      Sets the passed name value to the fullName field.
      +
      java.lang.StringtoString() +
      Overridden toString method
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        fullName

        +
        private java.lang.String fullName
        +
        The field used to store the current full name of the Employee.
        +
      • +
      + + + +
        +
      • +

        scan

        +
        protected static java.util.Scanner scan
        +
        scanner object used to take user input.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Employee

        +
        protected Employee()
        +
        Constructor chains to the next 1-arg constructor and passes a default value.
        +
      • +
      + + + +
        +
      • +

        Employee

        +
        protected Employee(java.lang.String fullName)
        +
        Calls the setter of fullname and passes it to be set by it.
        +
        +
        Parameters:
        +
        fullName - full name passed for the employee
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setName

        +
        public void setName(java.lang.String fullName)
        +
        Sets the passed name value to the fullName field.
        +
        +
        Parameters:
        +
        fullName - value passed by the constructor
        +
        +
      • +
      + + + +
        +
      • +

        getName

        +
        public java.lang.String getName()
        +
        Getter for fullName
        +
        +
        Returns:
        +
        the fullname field
        +
        +
      • +
      + + + +
        +
      • +

        getActivityType

        +
        public abstract java.lang.String[] getActivityType()
        +
        Abstract method to be overridden by subclasses.
        +
        +
        Returns:
        +
        String depicting the type of
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Overridden toString method
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        +
        the current Employee name by using a getter
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/employee/class-use/Dentist.html b/doc/cst8284/asgmt4/employee/class-use/Dentist.html new file mode 100644 index 0000000..b8682ce --- /dev/null +++ b/doc/cst8284/asgmt4/employee/class-use/Dentist.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.employee.Dentist + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.employee.Dentist

+
+
No usage of cst8284.asgmt4.employee.Dentist
+ + + + + + diff --git a/doc/cst8284/asgmt4/employee/class-use/Employee.html b/doc/cst8284/asgmt4/employee/class-use/Employee.html new file mode 100644 index 0000000..f9e547f --- /dev/null +++ b/doc/cst8284/asgmt4/employee/class-use/Employee.html @@ -0,0 +1,235 @@ + + + + + +Uses of Class cst8284.asgmt4.employee.Employee + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.employee.Employee

+
+
+ +
+ + + + + + diff --git a/doc/cst8284/asgmt4/employee/package-frame.html b/doc/cst8284/asgmt4/employee/package-frame.html new file mode 100644 index 0000000..475fc23 --- /dev/null +++ b/doc/cst8284/asgmt4/employee/package-frame.html @@ -0,0 +1,21 @@ + + + + + +cst8284.asgmt4.employee + + + + + +

cst8284.asgmt4.employee

+
+

Classes

+ +
+ + diff --git a/doc/cst8284/asgmt4/employee/package-summary.html b/doc/cst8284/asgmt4/employee/package-summary.html new file mode 100644 index 0000000..c35d331 --- /dev/null +++ b/doc/cst8284/asgmt4/employee/package-summary.html @@ -0,0 +1,151 @@ + + + + + +cst8284.asgmt4.employee + + + + + + + + + + + +
+

Package cst8284.asgmt4.employee

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Dentist +
    This class extends from the Employee class and helps to make a Dentist object that stores the full + name of the Employee.
    +
    Employee +
    The employee abstract class that have the abstract methods and fields to store employee information.
    +
    +
  • +
+
+ + + + + + diff --git a/doc/cst8284/asgmt4/employee/package-tree.html b/doc/cst8284/asgmt4/employee/package-tree.html new file mode 100644 index 0000000..8a8ca4d --- /dev/null +++ b/doc/cst8284/asgmt4/employee/package-tree.html @@ -0,0 +1,141 @@ + + + + + +cst8284.asgmt4.employee Class Hierarchy + + + + + + + + + + + +
+

Hierarchy For Package cst8284.asgmt4.employee

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • cst8284.asgmt4.employee.Employee +
        +
      • cst8284.asgmt4.employee.Dentist
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/doc/cst8284/asgmt4/employee/package-use.html b/doc/cst8284/asgmt4/employee/package-use.html new file mode 100644 index 0000000..f0272c0 --- /dev/null +++ b/doc/cst8284/asgmt4/employee/package-use.html @@ -0,0 +1,180 @@ + + + + + +Uses of Package cst8284.asgmt4.employee + + + + + + + + + + + +
+

Uses of Package
cst8284.asgmt4.employee

+
+
+ +
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/Activity.html b/doc/cst8284/asgmt4/scheduler/Activity.html new file mode 100644 index 0000000..11f6e88 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/Activity.html @@ -0,0 +1,459 @@ + + + + + +Activity + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class Activity

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.Activity
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class Activity
    +extends java.lang.Object
    +implements java.io.Serializable
    +
    This class helps to make an Activity Object that stores two fields - category of Appointment and + description of Activity to be performed.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      private java.lang.Stringcategory +
      The variable used to store the category passed down by the setters and constructors.
      +
      private java.lang.StringdescriptionOfWork +
      The variable used to store the description passed down by the setters and constructors.
      +
      static longserialVersionUID 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Activity(java.lang.String description, + java.lang.String category) +
      Constructor calls the two setters to set the parameters passed into constructor.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.StringgetCategory() +
      Returns the category.
      +
      java.lang.StringgetDescription() +
      Returns the description of work stored.
      +
      voidsetCategory(java.lang.String s) +
      Sets the passed category.
      +
      voidsetDescription(java.lang.String s) +
      Sets the passed parameter.
      +
      java.lang.StringtoString() +
      Prints the Activities to console
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        descriptionOfWork

        +
        private java.lang.String descriptionOfWork
        +
        The variable used to store the description passed down by the setters and constructors.
        +
      • +
      + + + +
        +
      • +

        category

        +
        private java.lang.String category
        +
        The variable used to store the category passed down by the setters and constructors.
        +
      • +
      + + + +
        +
      • +

        serialVersionUID

        +
        public static final long serialVersionUID
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Activity

        +
        public Activity(java.lang.String description,
        +                java.lang.String category)
        +
        Constructor calls the two setters to set the parameters passed into constructor. It receives the two + string values as the description of the type of activity user wants.
        +
        +
        Parameters:
        +
        description - The description of the activity.
        +
        category - Predefined string passed by makeAppointmentFromUserInput method from Scheduler class.
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getDescription

        +
        public java.lang.String getDescription()
        +
        Returns the description of work stored.
        +
        +
        Returns:
        +
        The description of work.
        +
        +
      • +
      + + + +
        +
      • +

        setDescription

        +
        public void setDescription(java.lang.String s)
        +
        Sets the passed parameter.
        +
        +
        Parameters:
        +
        s - description of the type of work to be performed.
        +
        +
      • +
      + + + +
        +
      • +

        getCategory

        +
        public java.lang.String getCategory()
        +
        Returns the category.
        +
        +
        Returns:
        +
        category string. It is pre-written in the Employee class.
        +
        +
      • +
      + + + +
        +
      • +

        setCategory

        +
        public void setCategory(java.lang.String s)
        +
        Sets the passed category.
        +
        +
        Parameters:
        +
        s - Returns current category
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Prints the Activities to console
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        +
        Category and description of work in the string format, combined together, to be used by + the Appointment class' toString method.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/Appointment.html b/doc/cst8284/asgmt4/scheduler/Appointment.html new file mode 100644 index 0000000..8d92656 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/Appointment.html @@ -0,0 +1,652 @@ + + + + + +Appointment + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class Appointment

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.Appointment
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class Appointment
    +extends java.lang.Object
    +implements java.io.Serializable
    +
    This class helps to make the Appointment object that stores the user's name, phone number, appointment date + and time, and type of activity to be done.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      private Activityactivity +
      The Activity object that stores the info about type of Activity.
      +
      private java.util.CalendaraptDate +
      The calendar abject that stores the appointment date and time.
      +
      private java.lang.StringfirstName +
      Stores the first name of the customer
      +
      private java.lang.StringlastName +
      Stores the last name of the customer
      +
      private TelephoneNumberphone +
      Stores the phone number of the customer
      +
      static longserialVersionUID 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      Appointment(java.util.Calendar cal, + java.lang.String firstName, + java.lang.String lastName, + TelephoneNumber phone, + Activity activity) +
      The second constructor for the Appointment class.
      +
      Appointment(java.util.Calendar cal, + java.lang.String fullName, + TelephoneNumber phone, + Activity activity) +
      This constructor chains to the another constructor which takes two different strings for the first + and last names.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      ActivitygetActivity() 
      java.util.CalendargetAptDate() 
      java.lang.StringgetFirstName() 
      java.lang.StringgetLastName() 
      TelephoneNumbergetPhone() 
      voidsetActivity(Activity activity) +
      sets the current Activity object to the passed value
      +
      voidsetAptDate(java.util.Calendar aptDate) +
      sets the current aptDate field to passed parameter
      +
      voidsetFirstName(java.lang.String firstName) +
      sets the current firstName field to the passed value
      +
      voidsetLastName(java.lang.String lastName) +
      sets the current lastName field to the passed value
      +
      voidsetPhone(TelephoneNumber phone) +
      sets the current TelephoneNumber Object to passed value
      +
      java.lang.StringtoString() +
      Returns the Complete Appointment information, formatted, and by using toString methods from + Calendar, TelephoneNumber, and Activity classes.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        aptDate

        +
        private java.util.Calendar aptDate
        +
        The calendar abject that stores the appointment date and time.
        +
      • +
      + + + +
        +
      • +

        firstName

        +
        private java.lang.String firstName
        +
        Stores the first name of the customer
        +
      • +
      + + + +
        +
      • +

        lastName

        +
        private java.lang.String lastName
        +
        Stores the last name of the customer
        +
      • +
      + + + +
        +
      • +

        phone

        +
        private TelephoneNumber phone
        +
        Stores the phone number of the customer
        +
      • +
      + + + +
        +
      • +

        activity

        +
        private Activity activity
        +
        The Activity object that stores the info about type of Activity.
        +
      • +
      + + + +
        +
      • +

        serialVersionUID

        +
        public static final long serialVersionUID
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Appointment

        +
        public Appointment(java.util.Calendar cal,
        +                   java.lang.String fullName,
        +                   TelephoneNumber phone,
        +                   Activity activity)
        +
        This constructor chains to the another constructor which takes two different strings for the first + and last names. It splits the full name into two parts in the constructor call
        +
        +
        Parameters:
        +
        cal - Calendar object
        +
        fullName - full name of the person
        +
        phone - TelephoneNumber object
        +
        activity - Activity object
        +
        +
      • +
      + + + +
        +
      • +

        Appointment

        +
        public Appointment(java.util.Calendar cal,
        +                   java.lang.String firstName,
        +                   java.lang.String lastName,
        +                   TelephoneNumber phone,
        +                   Activity activity)
        +
        The second constructor for the Appointment class. Calls all the setters and sets the passed + values to the class fields.
        +
        +
        Parameters:
        +
        cal - the Calendar object
        +
        firstName - first name string
        +
        lastName - last name string
        +
        phone - TelephoneNumber object
        +
        activity - Activity object
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getAptDate

        +
        public java.util.Calendar getAptDate()
        +
        +
        Returns:
        +
        current Calendar object
        +
        +
      • +
      + + + +
        +
      • +

        setAptDate

        +
        public void setAptDate(java.util.Calendar aptDate)
        +
        sets the current aptDate field to passed parameter
        +
        +
        Parameters:
        +
        aptDate - Calendar object sent by the Scheduler class
        +
        +
      • +
      + + + +
        +
      • +

        getFirstName

        +
        public java.lang.String getFirstName()
        +
        +
        Returns:
        +
        the current firstName field
        +
        +
      • +
      + + + +
        +
      • +

        setFirstName

        +
        public void setFirstName(java.lang.String firstName)
        +
        sets the current firstName field to the passed value
        +
        +
        Parameters:
        +
        firstName - made by splitting the fullName into two parts
        +
        +
      • +
      + + + +
        +
      • +

        getLastName

        +
        public java.lang.String getLastName()
        +
        +
        Returns:
        +
        current lastName field
        +
        +
      • +
      + + + +
        +
      • +

        setLastName

        +
        public void setLastName(java.lang.String lastName)
        +
        sets the current lastName field to the passed value
        +
        +
        Parameters:
        +
        lastName - made by splitting the fullName into two parts
        +
        +
      • +
      + + + +
        +
      • +

        getPhone

        +
        public TelephoneNumber getPhone()
        +
        +
        Returns:
        +
        the current TelephoneNumber Object
        +
        +
      • +
      + + + +
        +
      • +

        setPhone

        +
        public void setPhone(TelephoneNumber phone)
        +
        sets the current TelephoneNumber Object to passed value
        +
        +
        Parameters:
        +
        phone - Object sent by the Scheduler class
        +
        +
      • +
      + + + +
        +
      • +

        getActivity

        +
        public Activity getActivity()
        +
        +
        Returns:
        +
        the current Activity object
        +
        +
      • +
      + + + +
        +
      • +

        setActivity

        +
        public void setActivity(Activity activity)
        +
        sets the current Activity object to the passed value
        +
        +
        Parameters:
        +
        activity - Activity object sent by the Scheduler class
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Returns the Complete Appointment information, formatted, and by using toString methods from + Calendar, TelephoneNumber, and Activity classes.
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        +
        complete formatted output (appointment information)
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/AppointmentDialog.html b/doc/cst8284/asgmt4/scheduler/AppointmentDialog.html new file mode 100644 index 0000000..99d069e --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/AppointmentDialog.html @@ -0,0 +1,513 @@ + + + + + +AppointmentDialog + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class AppointmentDialog

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.AppointmentDialog
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class AppointmentDialog
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static javax.swing.JTextFieldactivity 
      private static java.awt.GridBagConstraintsbuttonConstant 
      private static java.awt.Containercp 
      static javax.swing.JTextFielddate 
      private static java.awt.FontdefaultFont 
      static javax.swing.JComboBox<java.lang.String>des 
      private static java.awt.GridBagConstraintslabelConstants 
      private static intlabelWidth 
      static javax.swing.JTextFieldname 
      static javax.swing.JTextFieldphone 
      private static java.awt.GridBagConstraintstextConstants 
      static javax.swing.JTextFieldtime 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      AppointmentDialog() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      private static javax.swing.JButtonsetBtns(java.lang.String btnLabel, + java.awt.event.ActionListener act) 
      private static javax.swing.JTextFieldsetRow(java.lang.String label, + char keyboardShortcut) 
      static voidshowAppointmentDialog() 
      static voidshowCalendarDialog() 
      static voidshowDaySchedule() +
      GUI for the daily schedule viewer.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        textConstants

        +
        private static final java.awt.GridBagConstraints textConstants
        +
      • +
      + + + +
        +
      • +

        labelConstants

        +
        private static final java.awt.GridBagConstraints labelConstants
        +
      • +
      + + + +
        +
      • +

        buttonConstant

        +
        private static final java.awt.GridBagConstraints buttonConstant
        +
      • +
      + + + +
        +
      • +

        cp

        +
        private static java.awt.Container cp
        +
      • +
      + + + + + + + +
        +
      • +

        defaultFont

        +
        private static final java.awt.Font defaultFont
        +
      • +
      + + + +
        +
      • +

        des

        +
        public static javax.swing.JComboBox<java.lang.String> des
        +
      • +
      + + + +
        +
      • +

        name

        +
        public static javax.swing.JTextField name
        +
      • +
      + + + +
        +
      • +

        phone

        +
        public static javax.swing.JTextField phone
        +
      • +
      + + + +
        +
      • +

        date

        +
        public static javax.swing.JTextField date
        +
      • +
      + + + +
        +
      • +

        time

        +
        public static javax.swing.JTextField time
        +
      • +
      + + + +
        +
      • +

        activity

        +
        public static javax.swing.JTextField activity
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AppointmentDialog

        +
        public AppointmentDialog()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        showAppointmentDialog

        +
        public static void showAppointmentDialog()
        +
      • +
      + + + +
        +
      • +

        showCalendarDialog

        +
        public static void showCalendarDialog()
        +
      • +
      + + + +
        +
      • +

        showDaySchedule

        +
        public static void showDaySchedule()
        +
        GUI for the daily schedule viewer.
        +
      • +
      + + + +
        +
      • +

        setRow

        +
        private static javax.swing.JTextField setRow(java.lang.String label,
        +                                             char keyboardShortcut)
        +
      • +
      + + + +
        +
      • +

        setBtns

        +
        private static javax.swing.JButton setBtns(java.lang.String btnLabel,
        +                                           java.awt.event.ActionListener act)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/BadAppointmentDataException.html b/doc/cst8284/asgmt4/scheduler/BadAppointmentDataException.html new file mode 100644 index 0000000..39317a1 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/BadAppointmentDataException.html @@ -0,0 +1,416 @@ + + + + + +BadAppointmentDataException + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class BadAppointmentDataException

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.lang.Throwable
    • +
    • +
        +
      • java.lang.Exception
      • +
      • +
          +
        • java.lang.RuntimeException
        • +
        • +
            +
          • cst8284.asgmt4.scheduler.BadAppointmentDataException
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class BadAppointmentDataException
    +extends java.lang.RuntimeException
    +
    The Exception is thrown whenever there is an inconsistency in the data entered by the user. It extends + RuntimeException.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      private java.lang.Stringdescription +
      The variable used to store the more details of the error or exception thrown.
      +
      private static longserialVersionUID 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      BadAppointmentDataException() +
      It chains to the two-string constructor by passing a preset message.
      +
      BadAppointmentDataException(java.lang.String error, + java.lang.String description) +
      Takes the two parameters and passes one of them to the superclass of Exception and stores the other + in the local field.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      java.lang.StringgetDescription() 
      voidsetDescription(java.lang.String description) +
      Sets the description to the passed value
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Throwable

        +addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        serialVersionUID

        +
        private static final long serialVersionUID
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        description

        +
        private java.lang.String description
        +
        The variable used to store the more details of the error or exception thrown.
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BadAppointmentDataException

        +
        public BadAppointmentDataException()
        +
        It chains to the two-string constructor by passing a preset message.
        +
      • +
      + + + +
        +
      • +

        BadAppointmentDataException

        +
        public BadAppointmentDataException(java.lang.String error,
        +                                   java.lang.String description)
        +
        Takes the two parameters and passes one of them to the superclass of Exception and stores the other + in the local field.
        +
        +
        Parameters:
        +
        error - the actual error message passed in the BadAppointmentDataException, then passed to the + superclass constructor.
        +
        description - the detailed description of the exception thrown, passed in + the BadAppointmentDataException exception.
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setDescription

        +
        public void setDescription(java.lang.String description)
        +
        Sets the description to the passed value
        +
        +
        Parameters:
        +
        description - the description message passed by constructor
        +
        +
      • +
      + + + +
        +
      • +

        getDescription

        +
        public java.lang.String getDescription()
        +
        +
        Returns:
        +
        description stored in the field above.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/Scheduler.html b/doc/cst8284/asgmt4/scheduler/Scheduler.html new file mode 100644 index 0000000..18f362a --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/Scheduler.html @@ -0,0 +1,774 @@ + + + + + +Scheduler + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class Scheduler

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.Scheduler
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class Scheduler
    +extends java.lang.Object
    +
    This is the class where everything happens - making appointments, saving appointments, changing the appointments, + saving the appointments to file, retrieving the appointments from file, entering the information about + appointments, making objects and instances.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      private static java.util.ArrayList<Appointment>appointments +
      ArrayList that stores all the Appointments.
      +
      private static java.text.DateFormatdateFormat +
      The DateFormat is used to check the correct date format for the input date
      +
      private static Employeeemployee +
      A declaration of a Employee Object to hold the current employee name.
      +
      static java.lang.StringoutString +
      The variable which stores the daily schedule and the appointment data to be used by the GUI
      +
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      Scheduler(Employee employee) +
      This constructor sets the new employee object, and at the same time calls the + loadAppointmentsFromFile method to add appointments to ArrayList, if they exists.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static booleanchangeAppointment(java.util.Calendar cal) +
      Changes the existing appointment's date and time to a new date and time.
      +
      static booleandeleteAppointment(java.util.Calendar cal) +
      Deletes the appointment based on the date and time received as a calendar object.
      +
      static voiddisplayAppointment(java.util.Calendar cal) +
      Displays a single appointment based on the user entered date and time.
      +
      static voiddisplayDaySchedule(java.util.Calendar cal) +
      Displays the day schedule by using a for loop to loop between 8 AM - 4 PM and calling displayAppointment method + in each iteration.
      +
      private static AppointmentfindAppointment(java.util.Calendar cal) +
      Finds the appointment in the ArrayList by using the Collections class' sort method.
      +
      static java.util.ArrayList<Appointment>getAppointments() +
      The getter for the appointments ArrayList.
      +
      static EmployeegetEmployee() +
      The getter for the current employee object.
      +
      voidlaunch() +
      The launch method maintains a while loop that keep the program running.
      +
      static booleanloadAppointmentsFromFile(java.lang.String sourceFile, + java.util.ArrayList<Appointment> apts) +
      Does exactly opposite of saveAppointmentsToFile method by loading appointments from file + and adding them to array one by one.
      +
      static AppointmentmakeAppointmentFromUserInput() +
      Makes a new Appointment object by making several other objects such as TelephoneNumber and Activity; + takes in various information needed to make a Appointment.
      +
      static java.util.CalendarmakeCalendarFromUserInput(boolean suppressHour) +
      Makes a new Calendar Object by taking the user input.
      +
      static voidoutput(java.lang.String msg) +
      This method takes a string value and concatenates it to a static string variable which is then + used to output messages to the JScrollPanel in the the Scheduler Viewer Class.
      +
      private static intprocessTimeString(java.lang.String t) +
      Takes in the string value entered by the user and process whether it is am or pm and then convert it to + 13-hour format.
      +
      static booleansaveAppointment(Appointment apt) +
      Saves the appointment to the ArrayList, but only after making sure that + it does not already exits in the ArrayList.
      +
      static booleansaveAppointmentsToFile(java.util.ArrayList<Appointment> apts, + java.lang.String saveFile) +
      Saves the appointments in memory to a file on the disk.
      +
      private static voidsetAppointmentDate(java.lang.String date, + java.util.Calendar cal) +
      This is the sub method used to set the appointment date as well as check for any bad date formats.
      +
      private voidsetEmployee(Employee emp) +
      This is the setter for the name of Employee object used in the class.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        outString

        +
        public static java.lang.String outString
        +
        The variable which stores the daily schedule and the appointment data to be used by the GUI
        +
      • +
      + + + +
        +
      • +

        appointments

        +
        private static java.util.ArrayList<Appointment> appointments
        +
        ArrayList that stores all the Appointments.
        +
      • +
      + + + +
        +
      • +

        employee

        +
        private static Employee employee
        +
        A declaration of a Employee Object to hold the current employee name.
        +
      • +
      + + + +
        +
      • +

        dateFormat

        +
        private static java.text.DateFormat dateFormat
        +
        The DateFormat is used to check the correct date format for the input date
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Scheduler

        +
        public Scheduler(Employee employee)
        +
        This constructor sets the new employee object, and at the same time calls the + loadAppointmentsFromFile method to add appointments to ArrayList, if they exists.
        +
        +
        Parameters:
        +
        employee - The instantiated employee object, then set to the current employee object.
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        launch

        +
        public void launch()
        +
        The launch method maintains a while loop that keep the program running. It also catches the exceptions thrown + by the execution of the program. This method calls two other methods displayMenu() and executeMenuItem() to + complete its functions. It exits the program if user selects O option.
        +
      • +
      + + + +
        +
      • +

        output

        +
        public static void output(java.lang.String msg)
        +
        This method takes a string value and concatenates it to a static string variable which is then + used to output messages to the JScrollPanel in the the Scheduler Viewer Class. + It is used to show daily string and appointment information.
        +
        +
        Parameters:
        +
        msg - The string used to append the static string above
        +
        +
      • +
      + + + +
        +
      • +

        setEmployee

        +
        private void setEmployee(Employee emp)
        +
        This is the setter for the name of Employee object used in the class.
        +
        +
        Parameters:
        +
        emp - sets the current employee object to the passed employee object.
        +
        +
      • +
      + + + +
        +
      • +

        getEmployee

        +
        public static Employee getEmployee()
        +
        The getter for the current employee object.
        +
        +
        Returns:
        +
        current employee object (name of the employee).
        +
        +
      • +
      + + + +
        +
      • +

        saveAppointment

        +
        public static boolean saveAppointment(Appointment apt)
        +
        Saves the appointment to the ArrayList, but only after making sure that + it does not already exits in the ArrayList. Also sorts the ArrayList after saving the appointment by + using sort method.
        +
        +
        Parameters:
        +
        apt - A complete appointment object returned by the makeAppointmentFromUserInput method. if null + is received, it means the appointment does not exists.
        +
        Returns:
        +
        boolean whether the appointment save was successful or not. + true if yes, false + if appointment save is not successful.
        +
        +
      • +
      + + + +
        +
      • +

        findAppointment

        +
        private static Appointment findAppointment(java.util.Calendar cal)
        +
        Finds the appointment in the ArrayList by using the Collections class' sort method. It passes three arguments to this + method, first - the ArrayList, second - a dummy appointment made by just using calendar object to help + in the searching, third - a new instance of the the SortAppointmentByCalendar class that extends + Comparable.
        +
        +
        Parameters:
        +
        cal - helps in searching of appointment by date and time. It helps to create a dummy appointment that plays a + role to search appointments.
        +
        Returns:
        +
        appointment object - if present in the array; otherwise returns null.
        +
        +
      • +
      + + + +
        +
      • +

        deleteAppointment

        +
        public static boolean deleteAppointment(java.util.Calendar cal)
        +
        Deletes the appointment based on the date and time received as a calendar object. First it finds the appointment + by using the findAppointment method and then displays it. Then prompts the user to confirm the delete and then + deletes the appointment from the ArrayList.
        +
        +
        Parameters:
        +
        cal - the calendar object by using which appointments will be searched.
        +
        Returns:
        +
        true - if delete was successful + false - if delete was not successful.
        +
        +
      • +
      + + + +
        +
      • +

        changeAppointment

        +
        public static boolean changeAppointment(java.util.Calendar cal)
        +
        Changes the existing appointment's date and time to a new date and time. + First it finds the appointment by using the findAppointment method and if Appointment is found, displays it + and asks for confirmation, and then makes a new calendar object for the new sate and time. it then sets the + new calendar for the existing appointment.
        +
        +
        Parameters:
        +
        cal - the calendar object used for searching the appointments.
        +
        Returns:
        +
        true - if change rime was successful + false - if changing time failed due to some reason.
        +
        +
      • +
      + + + +
        +
      • +

        displayAppointment

        +
        public static void displayAppointment(java.util.Calendar cal)
        +
        Displays a single appointment based on the user entered date and time. + First, it calls the findAppointment method to search for the appointment and if no appointment is found, displays + a message that appointment does not exists. If the appointment is found, prints it by using the Appointment + class' toString method.
        +
        +
        Parameters:
        +
        cal - the calendar object used to find the appointments. This method passed the the calendar parameter + to the findAppointment method.
        +
        +
      • +
      + + + +
        +
      • +

        displayDaySchedule

        +
        public static void displayDaySchedule(java.util.Calendar cal)
        +
        Displays the day schedule by using a for loop to loop between 8 AM - 4 PM and calling displayAppointment method + in each iteration.
        +
        +
        Parameters:
        +
        cal - the calendar object used to set the HOUR_OF_DAY to find all appointments on a given date, which is eventually + passed down to the findAppointment Class.
        +
        +
      • +
      + + + +
        +
      • +

        saveAppointmentsToFile

        +
        public static boolean saveAppointmentsToFile(java.util.ArrayList<Appointment> apts,
        +                                             java.lang.String saveFile)
        +
        Saves the appointments in memory to a file on the disk. It uses FileOutputStream and ObjectOutputStream to + write the objects to file by using a enhanced for loop through the Appointments Array.
        +
        +
        Parameters:
        +
        apts - The appointments array used to save the appointments declared at top of the class
        +
        saveFile - the actual name of the file to be saved on the disk.
        +
        Returns:
        +
        true - if save appointments to file was successful + false - if save appointments to file failed or an exception was thrown.
        +
        +
      • +
      + + + +
        +
      • +

        loadAppointmentsFromFile

        +
        public static boolean loadAppointmentsFromFile(java.lang.String sourceFile,
        +                                               java.util.ArrayList<Appointment> apts)
        +
        Does exactly opposite of saveAppointmentsToFile method by loading appointments from file + and adding them to array one by one. It first clears the ArrayList to remove all appointments that are + in the memory. Then uses FileInputStream and ObjectInputStream to read the objects from file.
        +
        +
        Parameters:
        +
        sourceFile - the name of the file on the disk.
        +
        apts - the actual appointments ArrayList used to save appointments.
        +
        Returns:
        +
        whether the loading appointments was successful or not - true if yes; false if an error occurred or + an exception was thrown.
        +
        +
      • +
      + + + +
        +
      • +

        makeAppointmentFromUserInput

        +
        public static Appointment makeAppointmentFromUserInput()
        +
        Makes a new Appointment object by making several other objects such as TelephoneNumber and Activity; + takes in various information needed to make a Appointment. It also checks if the entered name has any illegal + characters or not. Makes a new Appointment by using the information and returns it.
        +
        +
        Returns:
        +
        a new Appointment Object
        +
        Throws:
        +
        BadAppointmentDataException - if the name contains illegal characters or the name is greater + than the specified length, or if user only enters the single name.
        +
        +
      • +
      + + + +
        +
      • +

        makeCalendarFromUserInput

        +
        public static java.util.Calendar makeCalendarFromUserInput(boolean suppressHour)
        +
        Makes a new Calendar Object by taking the user input. it calls another method to set the date of the + calendar instance. Sets the Calendar.setLenient to false so that user is not able to set the bad date for the + calendar.
        +
        +
        Parameters:
        +
        suppressHour - used if user wants to take the date input only. Then it does not prompt the user for the + time input.
        +
        Returns:
        +
        the new calendar object made by the method after taking dates and times from the user.
        +
        +
      • +
      + + + +
        +
      • +

        setAppointmentDate

        +
        private static void setAppointmentDate(java.lang.String date,
        +                                       java.util.Calendar cal)
        +
        This is the sub method used to set the appointment date as well as check for any bad date formats. + It uses a pre defined date format and matches all input date formats with the given format. In case + of a mismatch, it throws a new BadAppointmentDataException.
        +
        +
        Parameters:
        +
        date - the string value to be parsed and matched with pre defined date format
        +
        cal - the calendar object created in previous method; used to set date.
        +
        Throws:
        +
        BadAppointmentDataException - if the date format is not as specified or user enters bad date.
        +
        +
      • +
      + + + +
        +
      • +

        processTimeString

        +
        private static int processTimeString(java.lang.String t)
        +
        Takes in the string value entered by the user and process whether it is am or pm and then convert it to + 13-hour format.
        +
        +
        Parameters:
        +
        t - the string sent by the makeCalendarFromUserInput method to convert to 13-hour.
        +
        Returns:
        +
        13-hour format time.
        +
        +
      • +
      + + + +
        +
      • +

        getAppointments

        +
        public static java.util.ArrayList<Appointment> getAppointments()
        +
        The getter for the appointments ArrayList.
        +
        +
        Returns:
        +
        appointments stored in the ArrayList.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/SchedulerLauncher.html b/doc/cst8284/asgmt4/scheduler/SchedulerLauncher.html new file mode 100644 index 0000000..928cbaf --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/SchedulerLauncher.html @@ -0,0 +1,286 @@ + + + + + +SchedulerLauncher + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class SchedulerLauncher

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.SchedulerLauncher
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class SchedulerLauncher
    +extends java.lang.Object
    +
    The entry point of the Assignment and contains a main method.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      SchedulerLauncher() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static voidmain(java.lang.String[] args) +
      Main method of the program.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SchedulerLauncher

        +
        public SchedulerLauncher()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main(java.lang.String[] args)
        +
        Main method of the program. It instantiates a new Employee object of type Dentist and instantiates a new + Scheduler object by passing made dentist as parameter.
        +
        +
        Parameters:
        +
        args - default string
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/SchedulerViewer.html b/doc/cst8284/asgmt4/scheduler/SchedulerViewer.html new file mode 100644 index 0000000..62403ad --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/SchedulerViewer.html @@ -0,0 +1,389 @@ + + + + + +SchedulerViewer + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class SchedulerViewer

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.SchedulerViewer
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class SchedulerViewer
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      static javax.swing.JFrameframe 
      private static java.awt.DimensionscreenSize 
      static javax.swing.JTextAreascrollText 
      private static java.awt.Toolkittk 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      SchedulerViewer() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static javax.swing.JPanelgetCenterPanel(javax.swing.JTextArea jta, + int height) 
      static javax.swing.JPanelgetWestPanel() 
      static voidlaunchGUI() 
      private static javax.swing.JButtonsetWestPanelBtns(java.lang.String btnLabel, + java.awt.event.ActionListener act) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        tk

        +
        private static final java.awt.Toolkit tk
        +
      • +
      + + + +
        +
      • +

        screenSize

        +
        private static final java.awt.Dimension screenSize
        +
      • +
      + + + +
        +
      • +

        scrollText

        +
        public static final javax.swing.JTextArea scrollText
        +
      • +
      + + + +
        +
      • +

        frame

        +
        public static javax.swing.JFrame frame
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SchedulerViewer

        +
        public SchedulerViewer()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        launchGUI

        +
        public static void launchGUI()
        +
      • +
      + + + +
        +
      • +

        getCenterPanel

        +
        public static javax.swing.JPanel getCenterPanel(javax.swing.JTextArea jta,
        +                                                int height)
        +
      • +
      + + + +
        +
      • +

        setWestPanelBtns

        +
        private static javax.swing.JButton setWestPanelBtns(java.lang.String btnLabel,
        +                                                    java.awt.event.ActionListener act)
        +
      • +
      + + + +
        +
      • +

        getWestPanel

        +
        public static javax.swing.JPanel getWestPanel()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.html b/doc/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.html new file mode 100644 index 0000000..a8adf8a --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.html @@ -0,0 +1,309 @@ + + + + + +SortAppointmentByCalendar + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class SortAppointmentByCalendar

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.SortAppointmentByCalendar
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.util.Comparator<Appointment>
    +
    +
    +
    +
    public class SortAppointmentByCalendar
    +extends java.lang.Object
    +implements java.util.Comparator<Appointment>
    +
    The class overwrites the compare method in the the Comparator interface and it helps to sort the + appointments in the ArrayList by returning a number based on comparison result.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    +
  • +
+
+
+
    +
  • + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intcompare(Appointment apt1, + Appointment apt2) +
      Overrides the compare method from the Comparator Interface and uses the Calendar.before + and Calendar.after and returns a number based on the result.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
        +
      • + + +

        Methods inherited from interface java.util.Comparator

        +comparing, comparing, comparingDouble, comparingInt, comparingLong, equals, naturalOrder, nullsFirst, nullsLast, reversed, reverseOrder, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SortAppointmentByCalendar

        +
        public SortAppointmentByCalendar()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        compare

        +
        public int compare(Appointment apt1,
        +                   Appointment apt2)
        +
        Overrides the compare method from the Comparator Interface and uses the Calendar.before + and Calendar.after and returns a number based on the result.
        +
        +
        Specified by:
        +
        compare in interface java.util.Comparator<Appointment>
        +
        Parameters:
        +
        apt1 - First appointment passed to be compared, passed in the method call
        +
        apt2 - Second appointment to be compared, passed in the method call
        +
        Returns:
        +
        1 if apt2 is after apt1, + -1 if apt2 is before apt1, + 0 if no case applies.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/TelephoneNumber.html b/doc/cst8284/asgmt4/scheduler/TelephoneNumber.html new file mode 100644 index 0000000..95ab8ba --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/TelephoneNumber.html @@ -0,0 +1,513 @@ + + + + + +TelephoneNumber + + + + + + + + + + + + +
+
cst8284.asgmt4.scheduler
+

Class TelephoneNumber

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • cst8284.asgmt4.scheduler.TelephoneNumber
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.io.Serializable
    +
    +
    +
    +
    public class TelephoneNumber
    +extends java.lang.Object
    +implements java.io.Serializable
    +
    The class helps to make the Telephone number object that validates, parses and processes the phone number. + It stores the phone number in three different fields.
    +
    +
    Version:
    +
    1.0
    +
    Author:
    +
    Amanjot Singh
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      private intareaCode +
      The field used to store the 3 digit area code.
      +
      private intlineNumber +
      The field used to store the line number of the phone number.
      +
      private intprefix +
      The field used to store the 3 digit number prefix.
      +
      static longserialVersionUID 
      +
    • +
    + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      TelephoneNumber(java.lang.String phoneNumber) +
      Constructor receives the phone number string from the Scheduler class and processes it into different fields - + area code, prefix, and line number.
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intgetAreaCode() 
      intgetLineNumber() 
      intgetPrefix() 
      voidsetAreaCode(int areaCode) +
      sets the area code to the passed value.
      +
      voidsetLineNumber(int lineNumber) +
      sets the line number to the passed integer value.
      +
      voidsetPrefix(int prefix) +
      sets the prefix to the passed int value.
      +
      java.lang.StringtoString() +
      Gets the area code, prefix, and line number using getters and forms a telephone number string with a + specific format.
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        areaCode

        +
        private int areaCode
        +
        The field used to store the 3 digit area code.
        +
      • +
      + + + +
        +
      • +

        prefix

        +
        private int prefix
        +
        The field used to store the 3 digit number prefix.
        +
      • +
      + + + +
        +
      • +

        lineNumber

        +
        private int lineNumber
        +
        The field used to store the line number of the phone number.
        +
      • +
      + + + +
        +
      • +

        serialVersionUID

        +
        public static final long serialVersionUID
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TelephoneNumber

        +
        public TelephoneNumber(java.lang.String phoneNumber)
        +
        Constructor receives the phone number string from the Scheduler class and processes it into different fields - + area code, prefix, and line number. + Makes sures that the phone number meets the specified formats and it does not contain any + illegal characters. + Then, extracts the substrings from the passed string and assign them to the various fields by converting them + to integer values. + Also makes sure that area code does not start with 0 or 1
        +
        +
        Parameters:
        +
        phoneNumber - phone number passed by the Scheduler Class.
        +
        Throws:
        +
        BadAppointmentDataException - if the phone number does not meet the specified formats - that is - + contains illegal characters, has bad format, or the area code starts with 0 or 1.
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getAreaCode

        +
        public int getAreaCode()
        +
        +
        Returns:
        +
        the area code integer
        +
        +
      • +
      + + + +
        +
      • +

        setAreaCode

        +
        public void setAreaCode(int areaCode)
        +
        sets the area code to the passed value.
        +
        +
        Parameters:
        +
        areaCode - area code passed by the constructor
        +
        +
      • +
      + + + +
        +
      • +

        getPrefix

        +
        public int getPrefix()
        +
        +
        Returns:
        +
        the prefix integer
        +
        +
      • +
      + + + +
        +
      • +

        setPrefix

        +
        public void setPrefix(int prefix)
        +
        sets the prefix to the passed int value.
        +
        +
        Parameters:
        +
        prefix - prefix integer made by the constructor
        +
        +
      • +
      + + + +
        +
      • +

        getLineNumber

        +
        public int getLineNumber()
        +
        +
        Returns:
        +
        the line number stored in the above field.
        +
        +
      • +
      + + + +
        +
      • +

        setLineNumber

        +
        public void setLineNumber(int lineNumber)
        +
        sets the line number to the passed integer value.
        +
        +
        Parameters:
        +
        lineNumber - int sent by the constructor
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public java.lang.String toString()
        +
        Gets the area code, prefix, and line number using getters and forms a telephone number string with a + specific format.
        +
        +
        Overrides:
        +
        toString in class java.lang.Object
        +
        Returns:
        +
        the complete phone number string to be used by Appointment class.
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/Activity.html b/doc/cst8284/asgmt4/scheduler/class-use/Activity.html new file mode 100644 index 0000000..e263a96 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/Activity.html @@ -0,0 +1,220 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.Activity + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.Activity

+
+
+ +
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/Appointment.html b/doc/cst8284/asgmt4/scheduler/class-use/Appointment.html new file mode 100644 index 0000000..fb2df6a --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/Appointment.html @@ -0,0 +1,251 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.Appointment + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.Appointment

+
+
+ +
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/AppointmentDialog.html b/doc/cst8284/asgmt4/scheduler/class-use/AppointmentDialog.html new file mode 100644 index 0000000..481f423 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/AppointmentDialog.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.AppointmentDialog + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.AppointmentDialog

+
+
No usage of cst8284.asgmt4.scheduler.AppointmentDialog
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/BadAppointmentDataException.html b/doc/cst8284/asgmt4/scheduler/class-use/BadAppointmentDataException.html new file mode 100644 index 0000000..4affed1 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/BadAppointmentDataException.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.BadAppointmentDataException + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.BadAppointmentDataException

+
+
No usage of cst8284.asgmt4.scheduler.BadAppointmentDataException
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/Scheduler.html b/doc/cst8284/asgmt4/scheduler/class-use/Scheduler.html new file mode 100644 index 0000000..3d85bac --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/Scheduler.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.Scheduler + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.Scheduler

+
+
No usage of cst8284.asgmt4.scheduler.Scheduler
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/SchedulerLauncher.html b/doc/cst8284/asgmt4/scheduler/class-use/SchedulerLauncher.html new file mode 100644 index 0000000..f746c9a --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/SchedulerLauncher.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.SchedulerLauncher + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.SchedulerLauncher

+
+
No usage of cst8284.asgmt4.scheduler.SchedulerLauncher
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/SchedulerViewer.html b/doc/cst8284/asgmt4/scheduler/class-use/SchedulerViewer.html new file mode 100644 index 0000000..02e6143 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/SchedulerViewer.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.SchedulerViewer + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.SchedulerViewer

+
+
No usage of cst8284.asgmt4.scheduler.SchedulerViewer
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/SortAppointmentByCalendar.html b/doc/cst8284/asgmt4/scheduler/class-use/SortAppointmentByCalendar.html new file mode 100644 index 0000000..33035a7 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/SortAppointmentByCalendar.html @@ -0,0 +1,124 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.SortAppointmentByCalendar + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.SortAppointmentByCalendar

+
+
No usage of cst8284.asgmt4.scheduler.SortAppointmentByCalendar
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/class-use/TelephoneNumber.html b/doc/cst8284/asgmt4/scheduler/class-use/TelephoneNumber.html new file mode 100644 index 0000000..7a84e57 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/class-use/TelephoneNumber.html @@ -0,0 +1,220 @@ + + + + + +Uses of Class cst8284.asgmt4.scheduler.TelephoneNumber + + + + + + + + + + + +
+

Uses of Class
cst8284.asgmt4.scheduler.TelephoneNumber

+
+
+ +
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/package-frame.html b/doc/cst8284/asgmt4/scheduler/package-frame.html new file mode 100644 index 0000000..d9341cb --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/package-frame.html @@ -0,0 +1,31 @@ + + + + + +cst8284.asgmt4.scheduler + + + + + +

cst8284.asgmt4.scheduler

+ + + diff --git a/doc/cst8284/asgmt4/scheduler/package-summary.html b/doc/cst8284/asgmt4/scheduler/package-summary.html new file mode 100644 index 0000000..1325adf --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/package-summary.html @@ -0,0 +1,204 @@ + + + + + +cst8284.asgmt4.scheduler + + + + + + + + + + + +
+

Package cst8284.asgmt4.scheduler

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Activity +
    This class helps to make an Activity Object that stores two fields - category of Appointment and + description of Activity to be performed.
    +
    Appointment +
    This class helps to make the Appointment object that stores the user's name, phone number, appointment date + and time, and type of activity to be done.
    +
    AppointmentDialog 
    Scheduler +
    This is the class where everything happens - making appointments, saving appointments, changing the appointments, + saving the appointments to file, retrieving the appointments from file, entering the information about + appointments, making objects and instances.
    +
    SchedulerLauncher +
    The entry point of the Assignment and contains a main method.
    +
    SchedulerViewer 
    SortAppointmentByCalendar +
    The class overwrites the compare method in the the Comparator interface and it helps to sort the + appointments in the ArrayList by returning a number based on comparison result.
    +
    TelephoneNumber +
    The class helps to make the Telephone number object that validates, parses and processes the phone number.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    BadAppointmentDataException +
    The Exception is thrown whenever there is an inconsistency in the data entered by the user.
    +
    +
  • +
+
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/package-tree.html b/doc/cst8284/asgmt4/scheduler/package-tree.html new file mode 100644 index 0000000..105aab9 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/package-tree.html @@ -0,0 +1,157 @@ + + + + + +cst8284.asgmt4.scheduler Class Hierarchy + + + + + + + + + + + +
+

Hierarchy For Package cst8284.asgmt4.scheduler

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ + + + + + diff --git a/doc/cst8284/asgmt4/scheduler/package-use.html b/doc/cst8284/asgmt4/scheduler/package-use.html new file mode 100644 index 0000000..6ae08c7 --- /dev/null +++ b/doc/cst8284/asgmt4/scheduler/package-use.html @@ -0,0 +1,171 @@ + + + + + +Uses of Package cst8284.asgmt4.scheduler + + + + + + + + + + + +
+

Uses of Package
cst8284.asgmt4.scheduler

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use cst8284.asgmt4.scheduler 
    PackageDescription
    cst8284.asgmt4.scheduler 
    +
  • +
  • + + + + + + + + + + + + + + + + + + +
    Classes in cst8284.asgmt4.scheduler used by cst8284.asgmt4.scheduler 
    Class and Description
    Activity +
    This class helps to make an Activity Object that stores two fields - category of Appointment and + description of Activity to be performed.
    +
    Appointment +
    This class helps to make the Appointment object that stores the user's name, phone number, appointment date + and time, and type of activity to be done.
    +
    TelephoneNumber +
    The class helps to make the Telephone number object that validates, parses and processes the phone number.
    +
    +
  • +
+
+ + + + + + diff --git a/doc/deprecated-list.html b/doc/deprecated-list.html new file mode 100644 index 0000000..3c39046 --- /dev/null +++ b/doc/deprecated-list.html @@ -0,0 +1,124 @@ + + + + + +Deprecated List + + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + + + diff --git a/doc/help-doc.html b/doc/help-doc.html new file mode 100644 index 0000000..12bb930 --- /dev/null +++ b/doc/help-doc.html @@ -0,0 +1,229 @@ + + + + + +API Help + + + + + + + + +
+ + + + + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
  • +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-1.html b/doc/index-files/index-1.html new file mode 100644 index 0000000..42151fa --- /dev/null +++ b/doc/index-files/index-1.html @@ -0,0 +1,172 @@ + + + + + +A-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

A

+
+
Activity - Class in cst8284.asgmt4.scheduler
+
+
This class helps to make an Activity Object that stores two fields - category of Appointment and + description of Activity to be performed.
+
+
Activity(String, String) - Constructor for class cst8284.asgmt4.scheduler.Activity
+
+
Constructor calls the two setters to set the parameters passed into constructor.
+
+
activity - Variable in class cst8284.asgmt4.scheduler.Appointment
+
+
The Activity object that stores the info about type of Activity.
+
+
activity - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
Appointment - Class in cst8284.asgmt4.scheduler
+
+
This class helps to make the Appointment object that stores the user's name, phone number, appointment date + and time, and type of activity to be done.
+
+
Appointment(Calendar, String, TelephoneNumber, Activity) - Constructor for class cst8284.asgmt4.scheduler.Appointment
+
+
This constructor chains to the another constructor which takes two different strings for the first + and last names.
+
+
Appointment(Calendar, String, String, TelephoneNumber, Activity) - Constructor for class cst8284.asgmt4.scheduler.Appointment
+
+
The second constructor for the Appointment class.
+
+
AppointmentDialog - Class in cst8284.asgmt4.scheduler
+
 
+
AppointmentDialog() - Constructor for class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
appointments - Static variable in class cst8284.asgmt4.scheduler.Scheduler
+
+
ArrayList that stores all the Appointments.
+
+
aptDate - Variable in class cst8284.asgmt4.scheduler.Appointment
+
+
The calendar abject that stores the appointment date and time.
+
+
areaCode - Variable in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
The field used to store the 3 digit area code.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-10.html b/doc/index-files/index-10.html new file mode 100644 index 0000000..8513b8e --- /dev/null +++ b/doc/index-files/index-10.html @@ -0,0 +1,129 @@ + + + + + +N-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

N

+
+
name - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-11.html b/doc/index-files/index-11.html new file mode 100644 index 0000000..35cb50c --- /dev/null +++ b/doc/index-files/index-11.html @@ -0,0 +1,136 @@ + + + + + +O-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

O

+
+
output(String) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
This method takes a string value and concatenates it to a static string variable which is then + used to output messages to the JScrollPanel in the the Scheduler Viewer Class.
+
+
outString - Static variable in class cst8284.asgmt4.scheduler.Scheduler
+
+
The variable which stores the daily schedule and the appointment data to be used by the GUI
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-12.html b/doc/index-files/index-12.html new file mode 100644 index 0000000..0b0ecc2 --- /dev/null +++ b/doc/index-files/index-12.html @@ -0,0 +1,142 @@ + + + + + +P-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

P

+
+
phone - Variable in class cst8284.asgmt4.scheduler.Appointment
+
+
Stores the phone number of the customer
+
+
phone - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
prefix - Variable in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
The field used to store the 3 digit number prefix.
+
+
processTimeString(String) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Takes in the string value entered by the user and process whether it is am or pm and then convert it to + 13-hour format.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-13.html b/doc/index-files/index-13.html new file mode 100644 index 0000000..0a5e85a --- /dev/null +++ b/doc/index-files/index-13.html @@ -0,0 +1,250 @@ + + + + + +S-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

S

+
+
saveAppointment(Appointment) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Saves the appointment to the ArrayList, but only after making sure that + it does not already exits in the ArrayList.
+
+
saveAppointmentsToFile(ArrayList<Appointment>, String) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Saves the appointments in memory to a file on the disk.
+
+
scan - Static variable in class cst8284.asgmt4.employee.Employee
+
+
scanner object used to take user input.
+
+
Scheduler - Class in cst8284.asgmt4.scheduler
+
+
This is the class where everything happens - making appointments, saving appointments, changing the appointments, + saving the appointments to file, retrieving the appointments from file, entering the information about + appointments, making objects and instances.
+
+
Scheduler(Employee) - Constructor for class cst8284.asgmt4.scheduler.Scheduler
+
+
This constructor sets the new employee object, and at the same time calls the + loadAppointmentsFromFile method to add appointments to ArrayList, if they exists.
+
+
SchedulerLauncher - Class in cst8284.asgmt4.scheduler
+
+
The entry point of the Assignment and contains a main method.
+
+
SchedulerLauncher() - Constructor for class cst8284.asgmt4.scheduler.SchedulerLauncher
+
 
+
SchedulerViewer - Class in cst8284.asgmt4.scheduler
+
 
+
SchedulerViewer() - Constructor for class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
screenSize - Static variable in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
scrollText - Static variable in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
serialVersionUID - Static variable in class cst8284.asgmt4.scheduler.Activity
+
 
+
serialVersionUID - Static variable in class cst8284.asgmt4.scheduler.Appointment
+
 
+
serialVersionUID - Static variable in exception cst8284.asgmt4.scheduler.BadAppointmentDataException
+
 
+
serialVersionUID - Static variable in class cst8284.asgmt4.scheduler.TelephoneNumber
+
 
+
setActivity(Activity) - Method in class cst8284.asgmt4.scheduler.Appointment
+
+
sets the current Activity object to the passed value
+
+
setAppointmentDate(String, Calendar) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
This is the sub method used to set the appointment date as well as check for any bad date formats.
+
+
setAptDate(Calendar) - Method in class cst8284.asgmt4.scheduler.Appointment
+
+
sets the current aptDate field to passed parameter
+
+
setAreaCode(int) - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
sets the area code to the passed value.
+
+
setBtns(String, ActionListener) - Static method in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
setCategory(String) - Method in class cst8284.asgmt4.scheduler.Activity
+
+
Sets the passed category.
+
+
setDescription(String) - Method in class cst8284.asgmt4.scheduler.Activity
+
+
Sets the passed parameter.
+
+
setDescription(String) - Method in exception cst8284.asgmt4.scheduler.BadAppointmentDataException
+
+
Sets the description to the passed value
+
+
setEmployee(Employee) - Method in class cst8284.asgmt4.scheduler.Scheduler
+
+
This is the setter for the name of Employee object used in the class.
+
+
setFirstName(String) - Method in class cst8284.asgmt4.scheduler.Appointment
+
+
sets the current firstName field to the passed value
+
+
setLastName(String) - Method in class cst8284.asgmt4.scheduler.Appointment
+
+
sets the current lastName field to the passed value
+
+
setLineNumber(int) - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
sets the line number to the passed integer value.
+
+
setName(String) - Method in class cst8284.asgmt4.employee.Employee
+
+
Sets the passed name value to the fullName field.
+
+
setPhone(TelephoneNumber) - Method in class cst8284.asgmt4.scheduler.Appointment
+
+
sets the current TelephoneNumber Object to passed value
+
+
setPrefix(int) - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
sets the prefix to the passed int value.
+
+
setRow(String, char) - Static method in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
setWestPanelBtns(String, ActionListener) - Static method in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
showAppointmentDialog() - Static method in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
showCalendarDialog() - Static method in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
showDaySchedule() - Static method in class cst8284.asgmt4.scheduler.AppointmentDialog
+
+
GUI for the daily schedule viewer.
+
+
SortAppointmentByCalendar - Class in cst8284.asgmt4.scheduler
+
+
The class overwrites the compare method in the the Comparator interface and it helps to sort the + appointments in the ArrayList by returning a number based on comparison result.
+
+
SortAppointmentByCalendar() - Constructor for class cst8284.asgmt4.scheduler.SortAppointmentByCalendar
+
 
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-14.html b/doc/index-files/index-14.html new file mode 100644 index 0000000..a632008 --- /dev/null +++ b/doc/index-files/index-14.html @@ -0,0 +1,160 @@ + + + + + +T-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

T

+
+
TelephoneNumber - Class in cst8284.asgmt4.scheduler
+
+
The class helps to make the Telephone number object that validates, parses and processes the phone number.
+
+
TelephoneNumber(String) - Constructor for class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
Constructor receives the phone number string from the Scheduler class and processes it into different fields - + area code, prefix, and line number.
+
+
textConstants - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
time - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
tk - Static variable in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
toString() - Method in class cst8284.asgmt4.employee.Employee
+
+
Overridden toString method
+
+
toString() - Method in class cst8284.asgmt4.scheduler.Activity
+
+
Prints the Activities to console
+
+
toString() - Method in class cst8284.asgmt4.scheduler.Appointment
+
+
Returns the Complete Appointment information, formatted, and by using toString methods from + Calendar, TelephoneNumber, and Activity classes.
+
+
toString() - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
Gets the area code, prefix, and line number using getters and forms a telephone number string with a + specific format.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-2.html b/doc/index-files/index-2.html new file mode 100644 index 0000000..0af5262 --- /dev/null +++ b/doc/index-files/index-2.html @@ -0,0 +1,142 @@ + + + + + +B-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

B

+
+
BadAppointmentDataException - Exception in cst8284.asgmt4.scheduler
+
+
The Exception is thrown whenever there is an inconsistency in the data entered by the user.
+
+
BadAppointmentDataException() - Constructor for exception cst8284.asgmt4.scheduler.BadAppointmentDataException
+
+
It chains to the two-string constructor by passing a preset message.
+
+
BadAppointmentDataException(String, String) - Constructor for exception cst8284.asgmt4.scheduler.BadAppointmentDataException
+
+
Takes the two parameters and passes one of them to the superclass of Exception and stores the other + in the local field.
+
+
buttonConstant - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-3.html b/doc/index-files/index-3.html new file mode 100644 index 0000000..460125e --- /dev/null +++ b/doc/index-files/index-3.html @@ -0,0 +1,146 @@ + + + + + +C-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

C

+
+
category - Variable in class cst8284.asgmt4.scheduler.Activity
+
+
The variable used to store the category passed down by the setters and constructors.
+
+
changeAppointment(Calendar) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Changes the existing appointment's date and time to a new date and time.
+
+
compare(Appointment, Appointment) - Method in class cst8284.asgmt4.scheduler.SortAppointmentByCalendar
+
+
Overrides the compare method from the Comparator Interface and uses the Calendar.before + and Calendar.after and returns a number based on the result.
+
+
cp - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
cst8284.asgmt4.employee - package cst8284.asgmt4.employee
+
 
+
cst8284.asgmt4.scheduler - package cst8284.asgmt4.scheduler
+
 
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-4.html b/doc/index-files/index-4.html new file mode 100644 index 0000000..efaf40c --- /dev/null +++ b/doc/index-files/index-4.html @@ -0,0 +1,171 @@ + + + + + +D-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

D

+
+
date - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
dateFormat - Static variable in class cst8284.asgmt4.scheduler.Scheduler
+
+
The DateFormat is used to check the correct date format for the input date
+
+
defaultFont - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
deleteAppointment(Calendar) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Deletes the appointment based on the date and time received as a calendar object.
+
+
Dentist - Class in cst8284.asgmt4.employee
+
+
This class extends from the Employee class and helps to make a Dentist object that stores the full + name of the Employee.
+
+
Dentist() - Constructor for class cst8284.asgmt4.employee.Dentist
+
+
No-arg constructor.
+
+
Dentist(String) - Constructor for class cst8284.asgmt4.employee.Dentist
+
+
The 1-arg constructor for the Dentist class.
+
+
des - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
description - Variable in exception cst8284.asgmt4.scheduler.BadAppointmentDataException
+
+
The variable used to store the more details of the error or exception thrown.
+
+
descriptionOfWork - Variable in class cst8284.asgmt4.scheduler.Activity
+
+
The variable used to store the description passed down by the setters and constructors.
+
+
displayAppointment(Calendar) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Displays a single appointment based on the user entered date and time.
+
+
displayDaySchedule(Calendar) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Displays the day schedule by using a for loop to loop between 8 AM - 4 PM and calling displayAppointment method + in each iteration.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-5.html b/doc/index-files/index-5.html new file mode 100644 index 0000000..39af8e4 --- /dev/null +++ b/doc/index-files/index-5.html @@ -0,0 +1,143 @@ + + + + + +E-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

E

+
+
Employee - Class in cst8284.asgmt4.employee
+
+
The employee abstract class that have the abstract methods and fields to store employee information.
+
+
Employee() - Constructor for class cst8284.asgmt4.employee.Employee
+
+
Constructor chains to the next 1-arg constructor and passes a default value.
+
+
Employee(String) - Constructor for class cst8284.asgmt4.employee.Employee
+
+
Calls the setter of fullname and passes it to be set by it.
+
+
employee - Static variable in class cst8284.asgmt4.scheduler.Scheduler
+
+
A declaration of a Employee Object to hold the current employee name.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-6.html b/doc/index-files/index-6.html new file mode 100644 index 0000000..af7931b --- /dev/null +++ b/doc/index-files/index-6.html @@ -0,0 +1,141 @@ + + + + + +F-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

F

+
+
findAppointment(Calendar) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Finds the appointment in the ArrayList by using the Collections class' sort method.
+
+
firstName - Variable in class cst8284.asgmt4.scheduler.Appointment
+
+
Stores the first name of the customer
+
+
frame - Static variable in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
fullName - Variable in class cst8284.asgmt4.employee.Employee
+
+
The field used to store the current full name of the Employee.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-7.html b/doc/index-files/index-7.html new file mode 100644 index 0000000..cd46413 --- /dev/null +++ b/doc/index-files/index-7.html @@ -0,0 +1,177 @@ + + + + + +G-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

G

+
+
getActivity() - Method in class cst8284.asgmt4.scheduler.Appointment
+
 
+
getActivityType() - Method in class cst8284.asgmt4.employee.Dentist
+
+
First prints the menu options for the activity type and then asks for the user input.
+
+
getActivityType() - Method in class cst8284.asgmt4.employee.Employee
+
+
Abstract method to be overridden by subclasses.
+
+
getAppointments() - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
The getter for the appointments ArrayList.
+
+
getAptDate() - Method in class cst8284.asgmt4.scheduler.Appointment
+
 
+
getAreaCode() - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
 
+
getCategory() - Method in class cst8284.asgmt4.scheduler.Activity
+
+
Returns the category.
+
+
getCenterPanel(JTextArea, int) - Static method in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
getDescription() - Method in class cst8284.asgmt4.scheduler.Activity
+
+
Returns the description of work stored.
+
+
getDescription() - Method in exception cst8284.asgmt4.scheduler.BadAppointmentDataException
+
 
+
getEmployee() - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
The getter for the current employee object.
+
+
getFirstName() - Method in class cst8284.asgmt4.scheduler.Appointment
+
 
+
getLastName() - Method in class cst8284.asgmt4.scheduler.Appointment
+
 
+
getLineNumber() - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
 
+
getName() - Method in class cst8284.asgmt4.employee.Employee
+
+
Getter for fullName
+
+
getPhone() - Method in class cst8284.asgmt4.scheduler.Appointment
+
 
+
getPrefix() - Method in class cst8284.asgmt4.scheduler.TelephoneNumber
+
 
+
getWestPanel() - Static method in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-8.html b/doc/index-files/index-8.html new file mode 100644 index 0000000..e17214b --- /dev/null +++ b/doc/index-files/index-8.html @@ -0,0 +1,150 @@ + + + + + +L-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

L

+
+
labelConstants - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
labelWidth - Static variable in class cst8284.asgmt4.scheduler.AppointmentDialog
+
 
+
lastName - Variable in class cst8284.asgmt4.scheduler.Appointment
+
+
Stores the last name of the customer
+
+
launch() - Method in class cst8284.asgmt4.scheduler.Scheduler
+
+
The launch method maintains a while loop that keep the program running.
+
+
launchGUI() - Static method in class cst8284.asgmt4.scheduler.SchedulerViewer
+
 
+
lineNumber - Variable in class cst8284.asgmt4.scheduler.TelephoneNumber
+
+
The field used to store the line number of the phone number.
+
+
loadAppointmentsFromFile(String, ArrayList<Appointment>) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Does exactly opposite of saveAppointmentsToFile method by loading appointments from file + and adding them to array one by one.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index-files/index-9.html b/doc/index-files/index-9.html new file mode 100644 index 0000000..66cfcbb --- /dev/null +++ b/doc/index-files/index-9.html @@ -0,0 +1,140 @@ + + + + + +M-Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C D E F G L M N O P S T  + + +

M

+
+
main(String[]) - Static method in class cst8284.asgmt4.scheduler.SchedulerLauncher
+
+
Main method of the program.
+
+
makeAppointmentFromUserInput() - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Makes a new Appointment object by making several other objects such as TelephoneNumber and Activity; + takes in various information needed to make a Appointment.
+
+
makeCalendarFromUserInput(boolean) - Static method in class cst8284.asgmt4.scheduler.Scheduler
+
+
Makes a new Calendar Object by taking the user input.
+
+
+A B C D E F G L M N O P S T 
+ +
+ + + + + + + +
+ + + + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..f1f2d78 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,75 @@ + + + + + +Generated Documentation (Untitled) + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/doc/overview-frame.html b/doc/overview-frame.html new file mode 100644 index 0000000..3a3882c --- /dev/null +++ b/doc/overview-frame.html @@ -0,0 +1,22 @@ + + + + + +Overview List + + + + + + + +

 

+ + diff --git a/doc/overview-summary.html b/doc/overview-summary.html new file mode 100644 index 0000000..62867b1 --- /dev/null +++ b/doc/overview-summary.html @@ -0,0 +1,139 @@ + + + + + +Overview + + + + + + + + +
+ + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +
Packages 
PackageDescription
cst8284.asgmt4.employee 
cst8284.asgmt4.scheduler 
+
+ +
+ + + + + + + +
+ + + + diff --git a/doc/overview-tree.html b/doc/overview-tree.html new file mode 100644 index 0000000..4a3b901 --- /dev/null +++ b/doc/overview-tree.html @@ -0,0 +1,163 @@ + + + + + +Class Hierarchy + + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + + + + + + +
+ + + + diff --git a/doc/package-list b/doc/package-list new file mode 100644 index 0000000..7cd1ba3 --- /dev/null +++ b/doc/package-list @@ -0,0 +1,2 @@ +cst8284.asgmt4.employee +cst8284.asgmt4.scheduler diff --git a/doc/script.js b/doc/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/doc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/doc/serialized-form.html b/doc/serialized-form.html new file mode 100644 index 0000000..d785294 --- /dev/null +++ b/doc/serialized-form.html @@ -0,0 +1,251 @@ + + + + + +Serialized Form + + + + + + + + +
+ + + + + + + +
+ + +
+

Serialized Form

+
+
+
    +
  • +

    Package cst8284.asgmt4.scheduler

    +
      +
    • + + +

      Class cst8284.asgmt4.scheduler.Activity extends java.lang.Object implements Serializable

      +
      +
      serialVersionUID:
      +
      1L
      +
      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          descriptionOfWork

          +
          java.lang.String descriptionOfWork
          +
          The variable used to store the description passed down by the setters and constructors.
          +
        • +
        • +

          category

          +
          java.lang.String category
          +
          The variable used to store the category passed down by the setters and constructors.
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class cst8284.asgmt4.scheduler.Appointment extends java.lang.Object implements Serializable

      +
      +
      serialVersionUID:
      +
      1L
      +
      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          aptDate

          +
          java.util.Calendar aptDate
          +
          The calendar abject that stores the appointment date and time.
          +
        • +
        • +

          firstName

          +
          java.lang.String firstName
          +
          Stores the first name of the customer
          +
        • +
        • +

          lastName

          +
          java.lang.String lastName
          +
          Stores the last name of the customer
          +
        • +
        • +

          phone

          +
          TelephoneNumber phone
          +
          Stores the phone number of the customer
          +
        • +
        • +

          activity

          +
          Activity activity
          +
          The Activity object that stores the info about type of Activity.
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class cst8284.asgmt4.scheduler.BadAppointmentDataException extends java.lang.RuntimeException implements Serializable

      +
      +
      serialVersionUID:
      +
      1L
      +
      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          description

          +
          java.lang.String description
          +
          The variable used to store the more details of the error or exception thrown.
          +
        • +
        +
      • +
      +
    • +
    • + + +

      Class cst8284.asgmt4.scheduler.TelephoneNumber extends java.lang.Object implements Serializable

      +
      +
      serialVersionUID:
      +
      1L
      +
      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          areaCode

          +
          int areaCode
          +
          The field used to store the 3 digit area code.
          +
        • +
        • +

          prefix

          +
          int prefix
          +
          The field used to store the 3 digit number prefix.
          +
        • +
        • +

          lineNumber

          +
          int lineNumber
          +
          The field used to store the line number of the phone number.
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ +
+ + + + + + + +
+ + + + diff --git a/doc/stylesheet.css b/doc/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/doc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/out/artifacts/CST8284_19F_Assignment4/CST8284_19F_Assignment4.jar b/out/artifacts/CST8284_19F_Assignment4/CST8284_19F_Assignment4.jar new file mode 100644 index 0000000000000000000000000000000000000000..796174c65d24db21ab3d3bcf7c32f8eac35e2fe0 GIT binary patch literal 48238 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

b(WB2Y6|zs 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 literal 0 HcmV?d00001 diff --git a/out/artifacts/CST8284_19F_Assignment4_jar/CST8284_19F_Assignment4.jar b/out/artifacts/CST8284_19F_Assignment4_jar/CST8284_19F_Assignment4.jar new file mode 100644 index 0000000000000000000000000000000000000000..82dab142009b600361e7499f7c391231387e1ef0 GIT binary patch literal 48238 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

b(WB2Y6|zs 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 literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/META-INF/MANIFEST.MF b/out/production/CST8284_19F_Assignment4/META-INF/MANIFEST.MF new file mode 100644 index 0000000..7ac2d42 --- /dev/null +++ b/out/production/CST8284_19F_Assignment4/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: cst8284.asgmt4.scheduler.SchedulerLauncher + diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/employee/Dentist.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/employee/Dentist.class new file mode 100644 index 0000000000000000000000000000000000000000..50dac91d69dad450f449ae98055c1ba05b26ecfc GIT binary patch literal 708 zcmah`%TC)s6g`vJv1`%-rU60j4z zs#HFJkE(jdu~fuE_2SOl>+_nK$3MRw0Q9iw;2l!Of3z41ji-;z!pN2d-SN*d?fLZhc_(A&`IJ!R-4?Sx`s^jD!sU!b=@vmIJzvTBsr1es3+GgzfD zAD62r6V{U!tl=-aP;16eE}>BvuHy#vG2Fa> literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Activity.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Activity.class new file mode 100644 index 0000000000000000000000000000000000000000..e2c2212a554ce380848e79517d9c412d13146623 GIT binary patch literal 1219 zcmaizZBG+H5Xb*}eZC$~6;OOYDk|+2IIUHyB_vv6)KqwZ*6{LrUCUy*Yworr_^C9} zl4#-w@Ix7Aua%Ov3HM@lcXoF6H~-oD^Y`a(03}p(OvBVMg@Q8cDKZ<%Y$jmoi1+s% zsM*6LiYn%jT9guaoWPR=o-)iedEoe>BZcSgefsG6pBXZ>Bm2a*+P2%W_N6b}R)rzy z*pjzA|CC`i;J&cib?ygr>cg8I2KJU=s_MCcv|U-Z+g%m+-6wIjb|SB z?AC=g`$Q0nmEjjLJh1Fs#;`K$eT;l4S?2V_C8S z=a4tMZSGqy94StOJf%X?7b<3$ZgIIYlz?GAmmf!>xL_o1VL~m6oDoQxl2*^i|sJ(6uzl`{oD?73(!-|l{A{r5kA`~_ehM>&)ge1J^_ zXK`D>i@3wP4_Vx0vBhGW#k~O%J1jn8@iB}0EFNUBt6(Is{6xX0_>7OA=kNuuIvZD5 zR9Vy%7}(?8K7ZZI;vfq%i$j5|-tbm+&kz_dAL>VXspXkgX+^gTyQaH~0t0)d+w?Z| zI;o5WDwb~Vm$p3DwD(CNXX)+l>BfO$lb%+tHob+ph53@++^>7{rDpZOsI@G^Eo~c? zA+k4*0?f%CoXmO~{n7;PG^sardS+cX{f-py43u^}+D;@C}3x4j+R zY8h!NHUES_=9+1n-jcvkF)78TbLx#Ej=r~M2k+F5Kx)OQQCUXHrfmdyZ|fCH7SyRy zCOYLq=kPM+9hgmlOD8yQG#u0R>W1x6J^IN7m2t0SSwWk=ebzi>!=v5o9rAx>uIwA$ za+_fj#i^tQ2q?{n)?^}jE~84$*1BvQZ@Y_TKw9K1qIEiS7gb_sgXFB-VeTLqbx%3^ zb|;|n3bM%L0>ewq0+TR?To#yorS@92E_Gslo+uUnsosR4n3}ig#Ho<9Ze?6*u{C z18V{odiEuf1f|rCd%JRIR6QDX^2&5dTXK?^kAl}2(QFqd-E3GUSzJzH(eBfugI;5i z>pLbRJTXgY))K9@O*u&0)Rh`Mf2oxjz0shlD?rSNV_pnjPK3o_`N;4I{ctXyq+je= zxY#SFKAxq&CxLUwppRQi6Sa@KD_3f;T&c%$r8d)=M-fwGqshBz4AFiTS4fuV#vxBU zoAcWA%$V@e*FP7mskzyF>KOgMO0!oBNEN36PMxHwX%A z=b3Qmmpg`&lEJTr!5@=OhQ1ZFW2CfcA8BpIM@F0Vk=61kA2}_b_A$`Ka1L40zd?T1 zFhB$!#yU-*mI9w0T!jvA8izqCf`YKq`qqXc{B|8H@utBp?ra0AXq|5PI?nK-4%8HxUR;q$D6}9LOUA@^ud& z+%5(}VUfJ0v{@rcQ~{wGH6A7fPW@tlt_AE(B~eVnG_1TFl^c|Xbf@cxXCeB}5% WnfQ1ip3BdXT-G~$-=K(nxb-iOlu;4@ literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$1.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ae8976b0ec497e311524ef0b13cc190bffac1e5f GIT binary patch literal 825 zcmb7CU2hUW6g@+ME$h}IwzS%6)uK`~T{S#3sWBmxY8%uC4L(nIr!Z!jAv**3w@my< zeDDYOql|YJ5}TljKJ3iBch8)A?#cb}^V@d-P24Y`fa^Yr*z&OL;|6Ye*zs_Sp)lb| z?VMq)`<_quhtN!=>W8PtDIbbMhT>DHqsTGF9oZwJya1Sd*~w4HEc1f~1k$k>A?2hEV1{?Il<6AeT>PDC2EMk6hi z9SUWSBu{j|_Ly|7kjz+5+le-$mtkinFXU4jiV0!EcNw7L;zK8MNlYxmb~eRdU=02n zJx(KWES>)9LhF6!5slhW(X8=HVFx<)a67;q>;~|#9H4|OzzScG|4ra$Kb}+D7a2))2Aq>P8CS7JG)q_~(j2PT SpgWIET*E3wPGo^@VEGqhNXTyh literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$2.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog$2.class new file mode 100644 index 0000000000000000000000000000000000000000..83bdf3162f0794beb448179a22e2258a243ed2d6 GIT binary patch literal 822 zcmb7CO>fgc5Ph2_absK>LP-lP6lj1npc+*(pD-8GM>&d|oWtp)?G^u~H)KCfpc7=}s>)c5ipD9da`m*>-56p@=7mNW;!} ztfjIeq3nU=i5@g|N!Jp|jP91dCz2iKhQ4dv=H-0YcP{$tb1h|W>03H?tRItUce%{VpOIIsnxw6JX zBfve}XL$5KW0QJEdO>_A=3^^ThStBc(cdvc@{cD%#XQZOC6k)Ys@i$&`6@818DS5^ z8J{H9xh`IeMar$ziZ-BmyxqrR+OaaN8>?2G4-^&XslW%rrECogS;cQX{0!Fmio(YX z6VO>E4Db$1bOu@M<1(t0FwQ8fLQM#geC{%=yv`|U)p%R~`n`tt#nF%|SME{BC zuMqqIAN&FSDDlp2z(N)DVQ22Wd-mLO&)y$DzkLVL#Jv&O%FF2 z3R51}P8n9Zulba}3C&EZLHO(-;UlrfP<$elv`-mU>wf}l_ZaeR-4_hYU8%(L$>>BR zFZoGKl}cAfJnr#Cx_n;D+o3cJ!J$$jX~*0cLFrC6GIsaTZZqU&FtW|iL_^V^#3Bh> z!=90!2A`O7OvOA>F}TTJanAKZ7;CBKI-H z1auY&1H8i$ok1G=xQH@k43|)uGqmXYl(X>(tndZ--voa8;ytzfkdjn0;GD$CxQrE| aS-=${&7q1_y7O4WRV-8FL>A}<7JmT@NXF6t literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/AppointmentDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..833246c5d0f62208a19931591cf9d741b893b105 GIT binary patch literal 7081 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 literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/BadAppointmentDataException.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/BadAppointmentDataException.class new file mode 100644 index 0000000000000000000000000000000000000000..0669355ebe60f4d64bf3fa1218b289dd3169ba54 GIT binary patch literal 918 zcmbW0+iuf95QhIvV&_O2LJtsVaXB@0DlCBom5M4s0}@q)pe?!I+N*StV@K-^g0}(* zsKf;iz(XNsohYdY;(}aEX2&z%{4;C+{Pq0@03TZ=+$_PVpoq;1O1Ndb+hsC$inv?E zJ%&aql;lxgs8lBL+m~GicF1t)Ac<4WW8LS`SXe|eKgLiEMH(nM(v;26?7idfxfk(x z;2movR0_x1EKb@z+ffHyszQ@zSQ2SmQoQZH83FSTG;nUG5k+B|%Sa-SR&p!kr6GY9o+KZAFBSx1c zlu8ssJr%lpaj2EQAWT7h@JHfudwUVhP&rPkK z70``mry515C;0`6HE@}1lTMG3Cl4sQP1ekvBmX%|ze2V`CBQo2Hn2=yZIXx;tkTIq z)~1j*l$obk)$N?4;O=~bHOJJmM=mUM2)UD?oJsl=MTNLZ+Ki5BrZPu9t!awiC%lnj zyPdDF=j4gNheY->>gptGMzu2*eGs^g8&j4?|E7=Seu4dooE*%ob{5>bFsC(}b3M!2 F_zltAxJ3W} literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Scheduler.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/Scheduler.class new file mode 100644 index 0000000000000000000000000000000000000000..b1aaa0e97d62adeaf7622caaf02a65a27e7fd0ab GIT binary patch literal 10639 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 XKC9Sm{v4p90=QTNSd7J79*_H9X(SZ8 literal 0 HcmV?d00001 diff --git a/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/SchedulerLauncher.class b/out/production/CST8284_19F_Assignment4/cst8284/asgmt4/scheduler/SchedulerLauncher.class new file mode 100644 index 0000000000000000000000000000000000000000..fc904e4ef2963ccb7faa97a3cd242652843e96a9 GIT binary patch literal 1302 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 toString method + * @return the current Employee name by using a getter + */ + @Override + public String toString() {return getName();} + +} \ No newline at end of file diff --git a/src/cst8284/asgmt4/scheduler/Activity.java b/src/cst8284/asgmt4/scheduler/Activity.java new file mode 100644 index 0000000..b535986 --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/Activity.java @@ -0,0 +1,89 @@ +/* + * Course Name: CST8284_303 + * Student Name: Amanjot Singh + * Class name: Activity + * Date: 28 November 2019 + */ + +package cst8284.asgmt4.scheduler; + +import java.io.Serializable; + +/** + * This class helps to make an Activity Object that stores two fields - category of Appointment and + * description of Activity to be performed. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class Activity implements Serializable { + + /** + * The variable used to store the description passed down by the setters and constructors. + */ + private String descriptionOfWork; + /** + * The variable used to store the category passed down by the setters and constructors. + */ + private String category; + public static final long serialVersionUID = 1L; + + + /** + * Constructor calls the two setters to set the parameters passed into constructor. It receives the two + * string values as the description of the type of activity user wants. + * + * @param description The description of the activity. + * @param category Predefined string passed by makeAppointmentFromUserInput method from Scheduler class. + */ + public Activity(String description, String category){ + setDescription(description); + setCategory(category); + } + + /** + * Returns the description of work stored. + * + * @return The description of work. + */ + public String getDescription() { + return descriptionOfWork; + } + + /** + * Sets the passed parameter. + * + * @param s description of the type of work to be performed. + */ + public void setDescription(String s) { + this.descriptionOfWork = s; + } + + /** + * Returns the category. + * + * @return category string. It is pre-written in the {@link cst8284.asgmt4.employee.Employee } class. + */ + public String getCategory() { + return category; + } + + /** + * Sets the passed category. + * + * @param s Returns current category + */ + public void setCategory(String s) { + this.category = s; + } + + /** + * Prints the Activities to console + * @return Category and description of work in the string format, combined together, to be used by + * the {@link Appointment} class' toString method. + */ + public String toString(){ + return getCategory() + "\n" + getDescription(); + + } +} diff --git a/src/cst8284/asgmt4/scheduler/Appointment.java b/src/cst8284/asgmt4/scheduler/Appointment.java new file mode 100644 index 0000000..c84c50f --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/Appointment.java @@ -0,0 +1,166 @@ +/* + * Course Name: CST8284_303 + * Student Name: Amanjot Singh + * Class name: Appointment + * Date: 28 November 2019 + * references: https://www.geeksforgeeks.org/split-string-java-examples/ + */ + +package cst8284.asgmt4.scheduler; + +import java.io.Serializable; +import java.util.Calendar; + +/** + * This class helps to make the Appointment object that stores the user's name, phone number, appointment date + * and time, and type of activity to be done. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class Appointment implements Serializable { + + /** + * The calendar abject that stores the appointment date and time. + */ + private Calendar aptDate; + /** + * Stores the first name of the customer + */ + private String firstName; + /** + * Stores the last name of the customer + */ + private String lastName; + /** + * Stores the phone number of the customer + */ + private TelephoneNumber phone; + /** + * The Activity object that stores the info about type of Activity. + */ + private Activity activity; + public static final long serialVersionUID = 1L; + + /** + * This constructor chains to the another constructor which takes two different strings for the first + * and last names. It splits the full name into two parts in the constructor call + * + * @param cal Calendar object + * @param fullName full name of the person + * @param phone TelephoneNumber object + * @param activity Activity object + */ + public Appointment(Calendar cal, String fullName, TelephoneNumber phone, Activity activity){ + this(cal, fullName.split(" ")[0], fullName.split(" ")[1], phone, activity); + } + + // references: https://www.geeksforgeeks.org/split-string-java-examples/ + /** + * The second constructor for the Appointment class. Calls all the setters and sets the passed + * values to the class fields. + * + * @param cal the Calendar object + * @param firstName first name string + * @param lastName last name string + * @param phone TelephoneNumber object + * @param activity Activity object + */ + public Appointment(Calendar cal, String firstName, String lastName, TelephoneNumber phone, Activity activity){ + setAptDate(cal); + setFirstName(firstName); + setLastName(lastName); + setPhone(phone); + setActivity(activity); + } + + /** + * + * @return current {@link Calendar} object + */ + public Calendar getAptDate() { + return aptDate; + } + + /** + * sets the current aptDate field to passed parameter + * @param aptDate Calendar object sent by the {@link Scheduler} class + */ + public void setAptDate(Calendar aptDate) { + this.aptDate = aptDate; + } + + /** + * + * @return the current firstName field + */ + public String getFirstName() { + return firstName; + } + + /** + * sets the current firstName field to the passed value + * @param firstName made by splitting the fullName into two parts + */ + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + /** + * + * @return current lastName field + */ + public String getLastName() { + return lastName; + } + + /** + * sets the current lastName field to the passed value + * @param lastName made by splitting the fullName into two parts + */ + public void setLastName(String lastName) { + this.lastName = lastName; + } + + /** + * + * @return the current TelephoneNumber Object + */ + public TelephoneNumber getPhone() { + return phone; + } + + /** + * sets the current TelephoneNumber Object to passed value + * @param phone Object sent by the {@link Scheduler} class + */ + public void setPhone(TelephoneNumber phone) { + this.phone = phone; + } + + /** + * + * @return the current Activity object + */ + public Activity getActivity() { + return activity; + } + + /** + * sets the current Activity object to the passed value + * @param activity Activity object sent by the {@link Scheduler} class + */ + public void setActivity(Activity activity) { + this.activity = activity; + } + + /** + * Returns the Complete Appointment information, formatted, and by using toString methods from + * {@link Calendar}, {@link TelephoneNumber}, and {@link Activity} classes. + * + * @return complete formatted output (appointment information) + */ + public String toString(){ + return getAptDate().getTime() + "\n" + getFirstName() + " " + getLastName() + "\n" + getPhone().toString() + "\n" + getActivity(); + } +} diff --git a/src/cst8284/asgmt4/scheduler/AppointmentDialog.java b/src/cst8284/asgmt4/scheduler/AppointmentDialog.java new file mode 100644 index 0000000..4f8f07e --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/AppointmentDialog.java @@ -0,0 +1,185 @@ +package cst8284.asgmt4.scheduler; + + +import java.awt.*; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.*; + +import static javax.swing.JOptionPane.showMessageDialog; + +/* Adapted, with considerable modification, from + * http://www.java2s.com/Code/Java/Swing-JFC/TextAcceleratorExample.htm, + * + */ + +public class AppointmentDialog { + + private static final GridBagConstraints textConstants = new GridBagConstraints( + 0, GridBagConstraints.RELATIVE, 1, 1, 1, 1, // gridx, gridy, gridwidth, gridheight, weightx, weighty + GridBagConstraints.EAST, 0, new Insets(2, 2, 2, 2), 1, 1); // anchor, fill, insets, ipadx, ipady + + private static final GridBagConstraints labelConstants = new GridBagConstraints( + 1, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0, + GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0); + + private static final GridBagConstraints buttonConstant = new GridBagConstraints( + 1, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0, + GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0); + + + private static Container cp; + private static final int labelWidth = 35; + private static final Font defaultFont = new Font("SansSerif", Font.PLAIN, 16); + + public static JComboBox des; + public static JTextField name, phone, date, time, activity; + + + public static void showAppointmentDialog(){ + JFrame f = new JFrame("Save an Appointment"); + cp = f.getContentPane(); + cp.setLayout(new GridBagLayout()); + + name = setRow("Enter Client Name (as FirstName LastName):", 'n'); + phone = setRow("Phone Number (e.g. 613-555-1212):", 'p'); + date = setRow("Appointment Date (entered as DDMMYYYY):", 'd'); + time = setRow("Appointment Time:", 't'); + activity = setRow("Activity Description", 'a'); + + des = new JComboBox(Scheduler.getEmployee().getActivityType()); + cp.add(new JLabel("Activity Type: ", SwingConstants.RIGHT), textConstants); + cp.add(des, labelConstants); + + setBtns("Save", + e -> { + try { + if (Scheduler.saveAppointment(Scheduler.makeAppointmentFromUserInput())) { + showMessageDialog(null, "Appointment Saved!"); + } else showMessageDialog(null, "Cannot save, an appointment at that time already exist."); + } + catch (BadAppointmentDataException ex){ + showMessageDialog(null, ex.getMessage(), ex.getDescription(), JOptionPane.ERROR_MESSAGE); + } + } + ); + f.pack(); + f.setLocationRelativeTo(null); + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + } + }); + f.setVisible(true); + } + + + public static void showCalendarDialog(){ + JFrame f = new JFrame("Get, set, change or delete an appointment"); + cp = f.getContentPane(); + cp.setLayout(new GridBagLayout()); + + date = setRow("Appointment Date (entered as DDMMYYYY): ", 'd'); + time = setRow("Appointment Time: ", 't'); + + setBtns("Get Appointment", + e -> { + try { + Scheduler.displayAppointment(Scheduler.makeCalendarFromUserInput(false)); + f.dispose(); + } + catch (BadAppointmentDataException ex){ + showMessageDialog(null, ex.getMessage(), ex.getDescription(), JOptionPane.ERROR_MESSAGE); + } + }); + + setBtns("Delete", + e -> { + try { + if (Scheduler.deleteAppointment(Scheduler.makeCalendarFromUserInput(false))) { + showMessageDialog(null, "Appointment Deleted"); + } else showMessageDialog(null, "No appointments found at given time."); + f.dispose(); + } + catch (BadAppointmentDataException ex){ + showMessageDialog(null, ex.getMessage(), ex.getDescription(), JOptionPane.ERROR_MESSAGE); + } + }); + + setBtns("Change Time", + e -> { + try { + if (Scheduler.changeAppointment(Scheduler.makeCalendarFromUserInput(false))) { + showMessageDialog(null, "Appointment re-booked"); + } else showMessageDialog(null, "No appointments found at given time."); + f.dispose(); + } + catch (BadAppointmentDataException ex){ + showMessageDialog(null, ex.getMessage(), ex.getDescription(), JOptionPane.ERROR_MESSAGE); + } + }); + + f.pack(); + f.setLocationRelativeTo(null); + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + } + }); + f.setVisible(true); + } + + /** + * GUI for the daily schedule viewer. + */ + public static void showDaySchedule(){ + JFrame f = new JFrame("Display Day Schedule"); + cp = f.getContentPane(); + cp.setLayout(new GridBagLayout()); + + date = setRow("Appointment Date (entered as DDMMYYYY): ", 'd'); + + setBtns("Get Day Schedule", + e -> { + try { + Scheduler.displayDaySchedule(Scheduler.makeCalendarFromUserInput(true)); + f.dispose(); + } + catch (BadAppointmentDataException ex){ + showMessageDialog(null, ex.getMessage(), ex.getDescription(), JOptionPane.ERROR_MESSAGE); + } + } ); + f.pack(); + f.setLocationRelativeTo(null); + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + } + }); + f.setVisible(true); + } + + + + + private static JTextField setRow(String label, char keyboardShortcut) { + JLabel l; JTextField t; + cp.add(l = new JLabel(label, SwingConstants.RIGHT), textConstants); + l.setFont(defaultFont); + l.setDisplayedMnemonic(keyboardShortcut); + cp.add(t = new JTextField(labelWidth), labelConstants); + t.setFocusAccelerator(keyboardShortcut); + return t; + } + + private static JButton setBtns(String btnLabel, ActionListener act) { + final Font font = new Font("SansSerif", Font.PLAIN, 20); + JButton btn = new JButton(btnLabel); + btn.setFont(font); + btn.addActionListener(act); + cp.add(btn, buttonConstant); + return btn; + } + +} diff --git a/src/cst8284/asgmt4/scheduler/BadAppointmentDataException.java b/src/cst8284/asgmt4/scheduler/BadAppointmentDataException.java new file mode 100644 index 0000000..3d29cab --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/BadAppointmentDataException.java @@ -0,0 +1,65 @@ +/* + * Course Name: CST8284_303 + * Student Name: Amanjot Singh + * Class name: BadAppointmentDataException + * Date: 28 November 2019 + */ + +package cst8284.asgmt4.scheduler; + +/** + * The Exception is thrown whenever there is an inconsistency in the data entered by the user. It extends + * RuntimeException. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class BadAppointmentDataException extends java.lang.RuntimeException { + private static final long serialVersionUID = 1L; + /** + * The variable used to store the more details of the error or exception thrown. + */ + private String description; + + + /** + * It chains to the two-string constructor by passing a preset message. + */ + public BadAppointmentDataException(){ + this("Please try again", "Bad data entered"); + } + + /** + * Takes the two parameters and passes one of them to the superclass of Exception and stores the other + * in the local field. + * + * @param error the actual error message passed in the {@link BadAppointmentDataException}, then passed to the + * superclass constructor. + * @param description the detailed description of the exception thrown, passed in + * the {@link BadAppointmentDataException} exception. + */ + public BadAppointmentDataException(String error, String description){ + super(error); + setDescription(description); + } + + /** + * Sets the description to the passed value + * @param description the description message passed by constructor + */ + public void setDescription(String description){ + this.description = description; + } + + /** + * + * @return description stored in the field above. + */ + public String getDescription() { + return this.description; + } + + + + +} diff --git a/src/cst8284/asgmt4/scheduler/Scheduler.java b/src/cst8284/asgmt4/scheduler/Scheduler.java new file mode 100644 index 0000000..de9f1f5 --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/Scheduler.java @@ -0,0 +1,436 @@ +/* + * Course Name: CST8284_303 + * Class name: Scheduler + * Date: 28 November 2019 + + * References: + https://www.youtube.com/watch?v=_jhCvy8_lGE + https://stackoverflow.com/questions/2294551/java-io-writeabortedexception-writing-aborted-java-io-notserializableexception + http://tutorials.jenkov.com/java-exception-handling/catching-multiple-exceptions.html + Lecture notes. + */ + + +package cst8284.asgmt4.scheduler; + +import java.io.*; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import cst8284.asgmt4.employee.Employee; +import javax.swing.*; +import static javax.swing.JOptionPane.showMessageDialog; + +/** + * This is the class where everything happens - making appointments, saving appointments, changing the appointments, + * saving the appointments to file, retrieving the appointments from file, entering the information about + * appointments, making objects and instances. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class Scheduler { + + /** + * The variable which stores the daily schedule and the appointment data to be used by the GUI + */ + public static String outString=""; + /** + * ArrayList that stores all the Appointments. + */ + private static ArrayList appointments = new ArrayList<>(); + /** + * A declaration of a Employee Object to hold the current employee name. + */ + private static Employee employee; + /** + * The DateFormat is used to check the correct date format for the input date + */ + private static DateFormat dateFormat = new SimpleDateFormat("ddMMyyyy"); + + + + /** + * This constructor sets the new employee object, and at the same time calls the + * loadAppointmentsFromFile method to add appointments to ArrayList, if they exists. + * + * @param employee The instantiated employee object, then set to the current employee object. + */ + public Scheduler(Employee employee){ + setEmployee(employee); + loadAppointmentsFromFile("CurrentAppointments.apts", getAppointments()); + } + + + /** + * The launch method maintains a while loop that keep the program running. It also catches the exceptions thrown + * by the execution of the program. This method calls two other methods displayMenu() and executeMenuItem() to + * complete its functions. It exits the program if user selects O option. + */ + public void launch() { + + try{ + SchedulerViewer.launchGUI(); + } + catch (Exception ex){ + showMessageDialog(SchedulerViewer.frame, ex.getMessage()); + } + } + + /** + * This method takes a string value and concatenates it to a static string variable which is then + * used to output messages to the JScrollPanel in the the Scheduler Viewer Class. + * It is used to show daily string and appointment information. + * + * @param msg The string used to append the static string above + */ + public static void output(String msg){ + outString+=msg; + SchedulerViewer.scrollText.setText(outString); + } + + + /** + * This is the setter for the name of Employee object used in the class. + * + * @param emp sets the current employee object to the passed employee object. + */ + private void setEmployee(Employee emp){ + employee = emp; + } + + /** + * The getter for the current employee object. + * + * @return current employee object (name of the employee). + */ + public static Employee getEmployee(){ + return employee; + } + + /** + * Saves the appointment to the ArrayList, but only after making sure that + * it does not already exits in the ArrayList. Also sorts the ArrayList after saving the appointment by + * using sort method. + * + * @param apt A complete appointment object returned by the makeAppointmentFromUserInput method. if null + * is received, it means the appointment does not exists. + * @return boolean whether the appointment save was successful or not. + * true if yes, false + * if appointment save is not successful. + */ + public static boolean saveAppointment(Appointment apt){ + if (findAppointment(apt.getAptDate())==null){ + getAppointments().add(apt); + Collections.sort(getAppointments(), new SortAppointmentByCalendar()); + return true; + } + else return false; + } + + /** + * Finds the appointment in the ArrayList by using the Collections class' sort method. It passes three arguments to this + * method, first - the ArrayList, second - a dummy appointment made by just using calendar object to help + * in the searching, third - a new instance of the the {@link SortAppointmentByCalendar} class that extends + * {@link Comparable}. + * + * @param cal helps in searching of appointment by date and time. It helps to create a dummy appointment that plays a + * role to search appointments. + * @return appointment object - if present in the array; otherwise returns null. + */ + private static Appointment findAppointment(Calendar cal) { + // references: https://www.concretepage.com/java/example-collections-binarysearch-java + int index = Collections.binarySearch(getAppointments(), new Appointment(cal,null,null,null,null) , new SortAppointmentByCalendar() ); + if (index<0) return null; + else return getAppointments().get(index); + } + + + /** + * Deletes the appointment based on the date and time received as a calendar object. First it finds the appointment + * by using the findAppointment method and then displays it. Then prompts the user to confirm the delete and then + * deletes the appointment from the ArrayList. + * + * @param cal the calendar object by using which appointments will be searched. + * @return true - if delete was successful + * false - if delete was not successful. + */ + public static boolean deleteAppointment(Calendar cal){ + if(findAppointment(cal)!=null){ + + int j = JOptionPane.showConfirmDialog(null, findAppointment(cal).toString(), "Do you want to delete?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if (j==0){ + getAppointments().remove(findAppointment(cal)); + return true; + } + } + return false; + } + + + /** + * Changes the existing appointment's date and time to a new date and time. + * First it finds the appointment by using the findAppointment method and if Appointment is found, displays it + * and asks for confirmation, and then makes a new calendar object for the new sate and time. it then sets the + * new calendar for the existing appointment. + * + * @param cal the calendar object used for searching the appointments. + * @return true - if change rime was successful + * false - if changing time failed due to some reason. + */ + public static boolean changeAppointment(Calendar cal){ + if(findAppointment(cal)!=null){ + + int j = JOptionPane.showConfirmDialog(null, findAppointment(cal).toString(), "Do you want to change?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + + if (j==0){ + + AppointmentDialog.date.setText(JOptionPane.showInputDialog(null,"Enter new date")); + AppointmentDialog.time.setText(JOptionPane.showInputDialog(null,"Enter new time")); + + + Calendar newCal = makeCalendarFromUserInput(false); + if(findAppointment(newCal)==null){ + findAppointment(cal).setAptDate(newCal); + return true; + } else showMessageDialog(null,"Appointment Does not exitst"); + } + } + return false; + } + + + /** + * Displays a single appointment based on the user entered date and time. + * First, it calls the findAppointment method to search for the appointment and if no appointment is found, displays + * a message that appointment does not exists. If the appointment is found, prints it by using the {@link Appointment} + * class' toString method. + * + * @param cal the calendar object used to find the appointments. This method passed the the calendar parameter + * to the findAppointment method. + */ + public static void displayAppointment (Calendar cal){ + if (findAppointment(cal)==null){ + output("No appointments found between " + cal.get(Calendar.HOUR_OF_DAY) + ":00 and " + (cal.get(Calendar.HOUR_OF_DAY)+1) + ":00\n"); + } + else { + output("\n" + findAppointment(cal).toString() + "\n\n"); + } + } + + + /** + * Displays the day schedule by using a for loop to loop between 8 AM - 4 PM and calling displayAppointment method + * in each iteration. + * + * @param cal the calendar object used to set the HOUR_OF_DAY to find all appointments on a given date, which is eventually + * passed down to the findAppointment Class. + */ + public static void displayDaySchedule (Calendar cal) { + for (int i = 8; i <= 16; i++) { + cal.set(Calendar.HOUR_OF_DAY,i); + displayAppointment(cal); + } + + } + + + // reference: https://www.youtube.com/watch?v=_jhCvy8_lGE + /** + * Saves the appointments in memory to a file on the disk. It uses FileOutputStream and ObjectOutputStream to + * write the objects to file by using a enhanced for loop through the Appointments Array. + * + * @param apts The appointments array used to save the appointments declared at top of the class + * @param saveFile the actual name of the file to be saved on the disk. + * @return true - if save appointments to file was successful + * false - if save appointments to file failed or an exception was thrown. + */ + public static boolean saveAppointmentsToFile(ArrayList apts, String saveFile ){ + File file = new File(saveFile); + try { + FileOutputStream fout = new FileOutputStream(file); + ObjectOutputStream output = new ObjectOutputStream(fout); + for (Appointment apt: apts){ + output.writeObject(apt); + } + output.close(); + fout.close(); + return true; + } catch (IOException exp){ + showMessageDialog(null,exp.getMessage()); + } + return false; + } + + + // reference: https://www.youtube.com/watch?v=_jhCvy8_lGE + /** + * Does exactly opposite of saveAppointmentsToFile method by loading appointments from file + * and adding them to array one by one. It first clears the ArrayList to remove all appointments that are + * in the memory. Then uses FileInputStream and ObjectInputStream to read the objects from file. + * + * @param sourceFile the name of the file on the disk. + * @param apts the actual appointments ArrayList used to save appointments. + * @return whether the loading appointments was successful or not - true if yes; false if an error occurred or + * an exception was thrown. + */ + public static boolean loadAppointmentsFromFile(String sourceFile, ArrayList apts){ + apts.clear(); + File file = new File(sourceFile); + try( + FileInputStream fin = new FileInputStream(file); + ObjectInputStream input = new ObjectInputStream(fin); + ){ + while (true){ + Appointment apt = (Appointment)input.readObject(); + apts.add(apt); + } + } + catch (EOFException exp1){ + return true; + }catch (FileNotFoundException exp2){ + return false; + }catch (IOException | ClassNotFoundException exp3){ + showMessageDialog(SchedulerViewer.frame, exp3.getMessage()); + } + return false; + } + + + /** + * Makes a new Appointment object by making several other objects such as TelephoneNumber and Activity; + * takes in various information needed to make a Appointment. It also checks if the entered name has any illegal + * characters or not. Makes a new Appointment by using the information and returns it. + * + * @return a new Appointment Object + * @throws BadAppointmentDataException if the name contains illegal characters or the name is greater + * than the specified length, or if user only enters the single name. + */ + public static Appointment makeAppointmentFromUserInput(){ + + String name = AppointmentDialog.name.getText(); + + // references: https://stackoverflow.com/questions/2385701/regular-expression-for-first-and-last-name + if(name.isEmpty()) + throw new BadAppointmentDataException("Must enter a value","Empty or null value entered"); + else if (!name.matches("^[-\\ .'a-zA-z]*$")) + throw new BadAppointmentDataException("Name cannot include characters other than alphabetic " + + "characters, the dash (-), the period (.), and the apostrophe (‘)","Illegal characters in name"); + else if (name.length()>30) + throw new BadAppointmentDataException("Name cannot exceed 30 characters","Name exceeds maximum length"); + try{ + String aa = name.split(" ")[1]; + } + catch (ArrayIndexOutOfBoundsException ex){ + throw new BadAppointmentDataException("Name is not entered correctly","Name must contain two Strings separated by a single space"); + } + + String phone = AppointmentDialog.phone.getText(); + TelephoneNumber phoneNo = new TelephoneNumber(phone); + + Calendar cal = makeCalendarFromUserInput(false); + String act = AppointmentDialog.activity.getText(); + if(act.isEmpty()) + throw new BadAppointmentDataException("Must enter a value","Empty or null value entered"); + String des = (String)AppointmentDialog.des.getSelectedItem(); + Activity activity = new Activity(act, des); + + return new Appointment(cal,name,phoneNo,activity); + + } + + + /** + * Makes a new Calendar Object by taking the user input. it calls another method to set the date of the + * calendar instance. Sets the Calendar.setLenient to false so that user is not able to set the bad date for the + * calendar. + * + * @param suppressHour used if user wants to take the date input only. Then it does not prompt the user for the + * time input. + * @return the new calendar object made by the method after taking dates and times from the user. + */ + public static Calendar makeCalendarFromUserInput(boolean suppressHour){ + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.setLenient(false); + + String date = AppointmentDialog.date.getText(); + if (date.isEmpty()) + throw new BadAppointmentDataException("Must enter a value","Empty or null value entered"); + + setAppointmentDate(date, cal); + + if (!suppressHour) { + String time = AppointmentDialog.time.getText(); + if (time.isEmpty()) + throw new BadAppointmentDataException("Must enter a value","Empty or null value entered"); + cal.set(Calendar.HOUR_OF_DAY, processTimeString(time)); + } + return cal; + } + + + /** + * This is the sub method used to set the appointment date as well as check for any bad date formats. + * It uses a pre defined date format and matches all input date formats with the given format. In case + * of a mismatch, it throws a new BadAppointmentDataException. + * + * @param date the string value to be parsed and matched with pre defined date format + * @param cal the calendar object created in previous method; used to set date. + * @throws BadAppointmentDataException if the date format is not as specified or user enters bad date. + */ + private static void setAppointmentDate(String date, Calendar cal) { + + dateFormat.setLenient(false); + try { + Date date2 = dateFormat.parse(date); + cal.setTime(date2); + } + catch (RuntimeException exp){ + throw new BadAppointmentDataException("General runtime exception thrown setting start date",""); + }catch (ParseException exp){ + throw new BadAppointmentDataException("Bad calendar date entered; format is DDMMYYYY","Bad calendar format"); + } + + } + + /** + * Takes in the string value entered by the user and process whether it is am or pm and then convert it to + * 13-hour format. + * + * @param t the string sent by the makeCalendarFromUserInput method to convert to 13-hour. + * @return 13-hour format time. + */ + private static int processTimeString(String t){ + + try { + String t2 = t.replace(":", "").replace("00", "").replace(" ", ""); + if (t2.contains("a.m.") || t2.contains("am") || t2.contains("a m")) { + return Integer.parseInt(t2.replace("a.m.", "").replace("am", "").replace("a m", "")); + } else if (t2.contains("p.m.") || t2.contains("pm") || t2.contains("p m")) { + return (Integer.parseInt(t2.replace("p.m.", "").replace("pm", "").replace("p m", "")) + 12); + } else if (Integer.parseInt(t2) >= 1 && Integer.parseInt(t2) <= 4) { + return (Integer.parseInt(t2) + 12); + } else return Integer.parseInt(t2); + } + catch (Exception ex){ + throw new BadAppointmentDataException("Please enter a valid time","Bad time entered"); + } + } + + /** + * The getter for the appointments ArrayList. + * + * @return appointments stored in the ArrayList. + */ + public static ArrayList getAppointments(){ + return appointments; + } +} + + +// https://www.youtube.com/watch?v=_jhCvy8_lGE +// https://stackoverflow.com/questions/2294551/java-io-writeabortedexception-writing-aborted-java-io-notserializableexception +// http://tutorials.jenkov.com/java-exception-handling/catching-multiple-exceptions.html +// \ No newline at end of file diff --git a/src/cst8284/asgmt4/scheduler/SchedulerLauncher.java b/src/cst8284/asgmt4/scheduler/SchedulerLauncher.java new file mode 100644 index 0000000..2de7ba4 --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/SchedulerLauncher.java @@ -0,0 +1,33 @@ +/* + * Course Name: CST8284_303 + * Student Name: Amanjot Singh + * Class name: SchedulerLauncher + * Date: 28 November 2019 + */ + +package cst8284.asgmt4.scheduler; + +import cst8284.asgmt4.employee.Dentist; +import cst8284.asgmt4.employee.Employee; + +/** + * The entry point of the Assignment and contains a main method. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class SchedulerLauncher { + + /** + * Main method of the program. It instantiates a new Employee object of type Dentist and instantiates a new + * Scheduler object by passing made dentist as parameter. + * + * @param args default string + */ + public static void main(String[] args){ + javax.swing.SwingUtilities.invokeLater + (() -> new Scheduler(new Dentist("Dr. Andrews")).launch()); + + } + +} diff --git a/src/cst8284/asgmt4/scheduler/SchedulerViewer.java b/src/cst8284/asgmt4/scheduler/SchedulerViewer.java new file mode 100644 index 0000000..d33f219 --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/SchedulerViewer.java @@ -0,0 +1,103 @@ +package cst8284.asgmt4.scheduler; + + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; + +import static javax.swing.JOptionPane.showMessageDialog; + +public class SchedulerViewer { + + private static final Toolkit tk = Toolkit.getDefaultToolkit(); + private static final Dimension screenSize = tk.getScreenSize(); + public static final JTextArea scrollText = new JTextArea(); + public static JFrame frame; + + + + public static void launchGUI(){ + frame = new JFrame(); + frame.setTitle("Scheduling Appointments for " + Scheduler.getEmployee()); + frame.setLayout(new BorderLayout()); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + int screenX = (int) screenSize.getWidth() / 2; + int screenY = (int) (7 * screenSize.getHeight() / 8); + + frame.add(getWestPanel(), BorderLayout.WEST); + frame.add(getCenterPanel(scrollText, screenY), BorderLayout.CENTER); + frame.setPreferredSize(new Dimension(screenX, screenY)); + + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + + } + + public static JPanel getCenterPanel(JTextArea jta, int height) { + JScrollPane centerPane = new JScrollPane(jta); + centerPane.setPreferredSize(new Dimension(400, 7 * height / 8)); + JPanel jp = new JPanel(); + jp.add(centerPane); + return jp; + } + + private static JButton setWestPanelBtns(String btnLabel, ActionListener act) { + final Font font = new Font("SansSerif", Font.PLAIN, 20); + JButton btn = new JButton(btnLabel); + btn.setFont(font); + btn.addActionListener(act); + return btn; + } + + public static JPanel getWestPanel() { + JPanel controlPanel = new JPanel(new GridLayout(6, 1)); + JPanel westPanel = new JPanel(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.anchor = GridBagConstraints.NORTH; + gbc.weighty = 1; + + controlPanel.add(setWestPanelBtns(" Save Appointment ", + e -> AppointmentDialog.showAppointmentDialog())); + + controlPanel.add(setWestPanelBtns(" Display Schedule ", + e -> { + Scheduler.outString = ""; + AppointmentDialog.showDaySchedule(); + + })); + + controlPanel.add(setWestPanelBtns(" Display Appointment ", + e -> { + Scheduler.outString = ""; + AppointmentDialog.showCalendarDialog(); + })); + + controlPanel.add(setWestPanelBtns("Save Appointment to file", + e -> { + if (Scheduler.saveAppointmentsToFile(Scheduler.getAppointments(), "CurrentAppointments.apts")) { + showMessageDialog(controlPanel, "Appointment data Saved to file"); + } + + })); + + controlPanel.add(setWestPanelBtns("Load Appointments from file", + e -> { + if (Scheduler.loadAppointmentsFromFile("CurrentAppointments.apts", Scheduler.getAppointments())) { + showMessageDialog(controlPanel, "Appointments successfully loaded from file"); + } + })); + + controlPanel.add(setWestPanelBtns("Exit", + e -> { + Scheduler.loadAppointmentsFromFile("CurrentAppointments.apts", Scheduler.getAppointments()); + frame.dispose(); + } + )); + + westPanel.add(controlPanel, gbc); + return westPanel; + } + +} diff --git a/src/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.java b/src/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.java new file mode 100644 index 0000000..758c985 --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/SortAppointmentByCalendar.java @@ -0,0 +1,44 @@ +/* + * Course Name: CST8284_303 + * Student Name: Amanjot Singh + * Class name: SortAppointmentByCalendar + * Date: 28 November 2019 + */ + +package cst8284.asgmt4.scheduler; + +import java.util.Comparator; + +/** + * The class overwrites the compare method in the the Comparator interface and it helps to sort the + * appointments in the ArrayList by returning a number based on comparison result. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class SortAppointmentByCalendar implements Comparator { + + + /** + * Overrides the compare method from the Comparator Interface and uses the Calendar.before + * and Calendar.after and returns a number based on the result. + * + * @param apt1 First appointment passed to be compared, passed in the method call + * @param apt2 Second appointment to be compared, passed in the method call + * @return 1 if apt2 is after apt1, + * -1 if apt2 is before apt1, + * 0 if no case applies. + */ + @Override + public int compare(Appointment apt1, Appointment apt2) { + + if ( apt1.getAptDate().before(apt2.getAptDate()) ) return -1; + else if (apt1.getAptDate().after(apt2.getAptDate()) ) return 1; + else return 0; + + // source: http://www.java2s.com/Code/Java/Development-Class/CalendarComparator.htm + + + } + +} diff --git a/src/cst8284/asgmt4/scheduler/TelephoneNumber.java b/src/cst8284/asgmt4/scheduler/TelephoneNumber.java new file mode 100644 index 0000000..dffeb82 --- /dev/null +++ b/src/cst8284/asgmt4/scheduler/TelephoneNumber.java @@ -0,0 +1,142 @@ +/* + * Course Name: CST8284_303 + * Student Name: Amanjot Singh + * Class name: TelephoneNumber + * Date: 28 November 2019 + * References: https://www.journaldev.com/807/java-string-substring + */ + + +package cst8284.asgmt4.scheduler; + +import java.io.Serializable; + +/** + * The class helps to make the Telephone number object that validates, parses and processes the phone number. + * It stores the phone number in three different fields. + * + * @author Amanjot Singh + * @version 1.0 + */ +public class TelephoneNumber implements Serializable { + + /** + * The field used to store the 3 digit area code. + */ + private int areaCode; + /** + * The field used to store the 3 digit number prefix. + */ + private int prefix; + /** + * The field used to store the line number of the phone number. + */ + private int lineNumber; + public static final long serialVersionUID = 1L; + + +// references: https://www.journaldev.com/807/java-string-substring + /** + * Constructor receives the phone number string from the Scheduler class and processes it into different fields - + * area code, prefix, and line number. + * Makes sures that the phone number meets the specified formats and it does not contain any + * illegal characters. + * Then, extracts the substrings from the passed string and assign them to the various fields by converting them + * to integer values. + * Also makes sure that area code does not start with 0 or 1 + * + * @param phoneNumber phone number passed by the {@link Scheduler} Class. + * @throws BadAppointmentDataException if the phone number does not meet the specified formats - that is - + * contains illegal characters, has bad format, or the area code starts with 0 or 1. + */ + public TelephoneNumber(String phoneNumber){ + +// regex idea: http://txt2re.com/index-csharp.php3?s=121-255-4545&4&-19&5&-20&2 +// https://regexr.com/ + if (phoneNumber.isEmpty()) + throw new BadAppointmentDataException("Must enter a value","Empty or null value entered"); + else if (!phoneNumber.matches("^(.{3})(-)(.{3})(-)(.{4})$")) + throw new BadAppointmentDataException("Missing digit(s); correct format is AAA-PPP-NNNN, where AAA" + + " is the area code and PPP-NNNN is the local number","Incorrect format"); + else if (!phoneNumber.matches("(\\d+).(\\d+).(\\d+)")) + throw new BadAppointmentDataException("Telephone numbers can only contain numbers or the\n" + + "character ‘-‘","Bad character(s) in input string"); + + String area = phoneNumber.substring(0, 3); + String prefix = phoneNumber.substring(4, 7); + String line = phoneNumber.substring(8, 12); + + if (area.charAt(0)=='0' || area.charAt(0)=='1') + throw new BadAppointmentDataException("Area code can’t start with a ‘0’ or a ‘1’","Invalid number"); + + setAreaCode(Integer.parseInt(area)); + setPrefix(Integer.parseInt(prefix)); + setLineNumber(Integer.parseInt(line)); + + } + + /** + * + * @return the area code integer + */ + public int getAreaCode() { + return areaCode; + } + + /** + * sets the area code to the passed value. + * + * @param areaCode area code passed by the constructor + */ + public void setAreaCode(int areaCode) { + this.areaCode = areaCode; + } + + /** + * + * @return the prefix integer + */ + public int getPrefix() { + return prefix; + } + + /** + * sets the prefix to the passed int value. + * + * @param prefix prefix integer made by the constructor + */ + public void setPrefix(int prefix) { + this.prefix = prefix; + } + + /** + * + * @return the line number stored in the above field. + */ + public int getLineNumber() { + return lineNumber; + } + + /** + * sets the line number to the passed integer value. + * + * @param lineNumber int sent by the constructor + */ + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; + } + + /** + * Gets the area code, prefix, and line number using getters and forms a telephone number string with a + * specific format. + * + * @return the complete phone number string to be used by {@link Appointment} class. + */ + public String toString(){ + return "(" + getAreaCode() + ") " + getPrefix() + "-" + getLineNumber(); + } +} + + + +//"^(\\d{3})(-)(\\d{3})(-)(\\d{4})$" \ No newline at end of file