Independent Task: Create Event
Now you have created Activity
without any regressions, you can create the Event
class as a second child class of Activity
.
Learning Outcomes
- Create a new class that extends and existing class
- Implement abstract methods
- Run unit tests
Implement Event
Class
Create a new Java class called Event
in the edu.ncsu.csc216.wolf_scheduler.course
package of the WolfScheduler
project. Select the following options:
- Browse for
Activity
as the Superclass - Check the option to creating stubs for “Inherited abstract methods”.
- Check the option to “Generate comments”.
Implement Event
State
The Event
class will not yet compile because we do not yet call Activity
’s constructor. Before creating a constructor for Event
, we want to implement the fields. This way we can integrated the fields when generating our constructor.
Event
knows about two other items in addition to those provided by Activity
:
- an integer called
weeklyRepeat
- a String called
eventDetails
.
The fields should be private.
Generate getters and setters for the fields.
Implement Event()
Constructor
Generate an Event()
Constructor using Event
’s fields.
The constructor should have six parameters (title
, meetingDays
, startTime
, endTime
, weeklyRepeat
, and eventDetails
). This is because the Event
constructor also needs the parameters to construct the parent Activity
. Update the lines that set the fields to call the corresponding setter methods as a common path of error checking.
public Event(String title, String meetingDays, int startTime, int endTime, int weeklyRepeat, String eventDetails) {
super(title, meetingDays, startTime, endTime);
setWeeklyRepeat(weeklyRepeat);
setEventDetails(eventDetails);
}
Implement Event.setWeeklyRepeat()
The setWeeklyRepeat()
method should throw an IllegalArgumentException
if the weeklyRepeat
parameter is less than 1 or greater than 4. The IllegalArgumentException
message should be “Invalid weekly repeat”.
Create private constants to represent the minimum and maximum values for the weekly repeats.
Implement Event.setEventDetails()
The setEventDetails()
method should throw an IllegalArgumentException
if the eventDetails
parameter is null. Since eventDetails
are optional, the field may contain an empty string. The IllegalArgumentException
message should be “Invalid event details”.
Implement Event.getShortDisplayArray()
The getShortDisplayArray()
should return a String
array of length four. The first two values should be empty strings since Event
doesn’t have a name or section. The last two values should be the title
and the meeting string.
Implement Event.getLongDisplayArray()
The getLongDisplayArray()
should return a String
array of length seven. The first two values should be empty strings since Event
doesn’t have a name or section. The third value is the title
followed by two values with empty strings. The last two are the meeting string and eventDetails
.
Override getMeetingString()
and toString()
Right click in the editor and select Source > Override/Implement Methods. Check the boxes to getMeetingString()
and toString()
(which is under Object
).
ForgetMeetingString()
, append the following to Activity
’s getMeetingString()
: " (every X weeks)"
where X is the value stored in weeklyRepeat
. Remember, you can call the parent class’ methods by using super.methodName()
.
Implement toString()
to produce a comma separated string that meets the description in [UC 10].
Overriding Other Methods?
You don’t need to override the equals()
and hashCode()
. An Event
should be considered the same if the title and the meeting information is the same; the number of weeks between meetings and the details aren’t needed for equality. Therefore, you don’t need to override these methods.
Test Event
Use the provided EventTest
class to unit test your Event
implementation.
Oh no! The test testSetMeetingDaysAndTime()
is failing! You will eventually correct the code causing that error in the Debugging section, which comes next.
All of your other tests should pass now, however. If they do not, you will need to debug those tests. It may be helpful to hold on fixing them until after we discuss the debugger.
Comment Event
and Fix Static Analysis Notifications
Complete the following tasks:
- Update all your Javadoc for
Event
. Overridden methods much also be commented to describe the specifics in the overridden implementation. - Resolve all static analysis notifications.
Reference: Staging and Pushing to GitHub
GitHub Resources:
Check Your Progress
Complete the following tasks before pushing your work to GitHub.
- Make sure that all fields, methods, and constructors are commented.
- Resolve all static analysis notifications.
- Fix test failures.
- Commit and push your code changes with a meaningful commit message. Label your commit with “[Implementation]” for future you!