Question: Implementing CourseNameValidator: The design of the course name validation functionality calls for CourseNameValidator to be implemented using the State Pattern . The state pattern is

Implementing CourseNameValidator:

The design of the course name validation functionality calls for CourseNameValidator to be implemented using the State Pattern. The state pattern is an object-oriented way to implement an FSM, where each state is its own object and behaviors are defined for each input type.

The provided design provides four states: InitialState, LetterState, DigitState and SuffixState, all of which implement the State abstract class. All are inner classes of CourseNameValidator since there is no need to expose them to the client.

You MAY implement your state pattern using more states (for example, one state for each letter, digit, etc. as demonstrated in the CourseNameValidatorFSM while-switch implementation). You may not use fewer than the suggested four states.

Create CourseNameValidator Class

Create CourseNameValidator in the src/ folder of the edu.ncsu.csc216.pack_scheduler.course.validator package.

Add the method isValid() to CourseNameValidator. isValid() accepts a String parameter and returns a boolean. The method should initially return false so the method will compile.

Create CourseNameValidatorTest Class

Create CourseNameValidatorTest in the test/ folder of the edu.ncsu.csc216.pack_scheduler.course.validator package. Do so by copying CourseNameValidatorFSMTest and naming the copy CourseNameValidatorTest. Then update the references to CourseNameValidatorFSM to CourseNameValidator.

Run your new test class. Most if not all of the tests should fail. If they all pass, check that all references to CourseNameValidatorFSM were removed.

Implement State Class

Create the State abstract class as an inner class of CourseNameValidator. We are using an abstract class because there is common behavior for the onOther() method - throwing an exception!

State has three methods:

onLetter(): abstract method for handling a letter input

onDigit(): abstract method for handling a digit input

onOther(): concrete method for handling any other input. It should throw an InvalidTransitionException with the message Course name can only contain letters and digits.

Implement Concrete States

Create each concrete state as an inner class of CourseNameValidator. Each concrete class should extend the State abstract class and provide an implementation for onLetter() and onDigit(). You may use CourseNameValidatorFSM to help you with your implementation.

If you decide to do the four-state implementation, note that you will have to keep track of the number of letters and digits that you have. Counts should be stored as fields in CourseNameValidator so that all inner classes can access and modify the fields. Constants in the LetterState and DigitState classes provide the cutoffs for the number of letter and digits. By using constants, you can quickly update the FSM if the number of allowed letters or numbers was to ever change.

Implement Context Class

CourseNameValidator is the context class of the state pattern. The isValid() method will identify the next character of input and then call the appropriate method on the currentState. Implement isValid() to complete the state pattern.

Test CourseNameValidator

Run CourseNameValidatorTest against CourseNameValidator to ensure that your FSM is implemented correctly. Use the debugger to help you resolve any issues with your implementation.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!