Description
Problem Description • In this assignment you will create a program that acts as a simple To-Do-List • The user should be able to add and remove tasks, view all tasks, toggle as task as complete and viceversa, and exit the program. • The core concept for this assignment is Exception Handling, with an introduction to using the ArrayList container from java.util. • The project design includes 4 classes o See the appendix for starter code (Cite professor using programmer comments) classes ValidationException and ToDoListLauncher are provided in full class Task is partly completed A Unit Test class for class Task is also provided in full, it should be used to test your work and will be used by your lab professors to do the same when grading. • Review this carefully, it could reappear, in part, on the final exam o You need to update class Task, and author class ToDoListManager Program Design (Diagram created using UMLet) Implementation Notes Class Task • The constructor should call the set methods for title and priority, leave isComplete alone as it defaults to false. You will need to add an appropriate throws clause to the contructor • setTitle(String title) o verify that the incoming title is: not null not an empty string not longer than 25 characters o if any one of the criteria above are met throw a new ValidationException setting an appropriate message. o if none of the criteria are met (data is good) then set the title into the title field (trim it as you set it) o You will need to add throws ValidationException to this method header • setPriority(String priority) o verify that the incoming priority is: not null not an empty string one of “high”, “medium”, “low” this should be a case insensitive comparison. o if any one of the criteria above are met throw a new ValidationException setting an appropriate message. o if none of the criteria are met (data is good) then set the priority into the priority field (trim it as you set it) o You will need to add throws ValidationException to this method header Tips: don’t forget about String methods trim(), length(), toLowerCase(), and equals(String) • Add a toString() method that overrides the inherited one from class Object Use a StringBuilder, or String.format to generate a String similar to: Do homework (low) is not complete o Title was “Do homework”, priority was “low”, isComplete was false Eat pizza (high) is complete o Title was “Eat pizza”, priority was “high”, isComplete was true Class ToDoListManager • Add the required fields • Make sure all fields are private • The constructor should instantiate the ArrayList and the Scanner • runToDoList() o Typical menu with switch statement in a loop with the needed menu options o Add a try-catch however to handle: Text entries instead of numbers for menu options o In the case of a bad input, print out an appropriate message and let the loop continue. • showMenu() o called from runToDoList(), all this does is output the menu on the console • addTask() o get inputs from the user for task title and task priority o instantiate a Task using the constructor o assign the reference to the Task into the ArrayList named tasks o catch any ValidationExceptions and output an appropriate message o No need to loop here, if an exception is thrown just let the method end o (See Appendix with a sample run of the program) • toggleTaskComplete() o Check that there are tasks before doing anything else o Ask user for index of Task in the ArrayList to toggle o After obtaining the Task from the ArrayList change the isCompleted into what it is not. (Tip: !) You will need to use getIsComplete() and setIsCompleted( boolean ) o Two things can go wrong here, InputMismatchException and IndexOutOfBoundsException o Trap both and output appropriate message for each o No need to loop here, if an exception is thrown just let the method end o (See Appendix with a sample run of the program) • removeTask() o Check that there are tasks before doing anything else o Ask user for index of Task in the ArrayList to remove o Two things can go wrong here, InputMismatchException and IndexOutOfBoundsException o Trap both and output appropriate message for each o No need to loop here, if an exception is thrown just let the method end o (See Appendix with a sample run of the program) • viewTasks() o Check that there are tasks before doing anything else o Loop over the ArrayList calling toString() on each Task object as well as appending the index number to the output o (See Appendix with a sample run of the program) Tip: • This program uses one Scanner(System.in) with a mix of calls to nextInt() and nextLine(), make sure you call nextLine() after every nextInt() to remove leftover line-terminator characters from the input Stream (System.in). • Also, if an exception is thrown and caught make sure you nextLine() on the Scanner to clean out bad data. Tasks • Use the UML, Starter Code, provided unit test class, and implementation notes to make a working program. • Find one web tutorials on Exception handling in Java, and one web tutorial on using ArrayList and include these in your discussion document as APA references. • Write one-page essay, using MS Word, that addresses the discussion questions (below) as a guide to discuss what was accomplished in the assignment, cite and reference any sources used online to help you answer questions. (You may use more than one page, but professors will stop reading after 3 pages). Discussion Questions • The ValidationException used in the lab extended Exception. Is ValidationException a runtime exception or not? What does this mean with regards to throws clauses as well as catch blocks? • In general terms would using an Array for this type of program be easier or harder than using ArrayList? List a few problems with using an array over an ArrayList. Tip: Search the web with “Java Array vs ArrayList” (without the quotes) for ideas, make sure you cite your source(s). • When you called input.nextLine() as part of your exception catching did you place it into every catch block or just inside a finally block at the end of the try-catch. What is the advantage or disadvantage to either approach? Submission Requirements • Place source code files and essay document into a zip archive and upload it to Blackboard by the due date. • The essay should be an electronic document, Microsoft Word format, include your name inside the document. • Your lab professor will indicate any additional submission requirements to you in the lab Notes on citations and references • Please do not cite or reference other students, ask for the original sources from them and cite and reference those instead • You will not get credit for an assignment or project if large portions are copied directly from other sources, even if you cite and reference the source(s) correctly. Assignments are to be your own original work; other works can be used for help in solving problems or as small pieces of your larger program. Determinations on this are up to the discretion of the professor, if in doubt check with your professor. • Note: One exception to this is in the case of lecture handouts, and code samples posted to Blackboard. You are free to use these as a starting point just cite + reference them as a personal communication from your professor e.g. Stanley Pieda (2015) personal communication. UML Class Diagram refresher / review: Donald Bell. (2004). UML basics: The class diagram. Retrieved from http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/#N100A5 JUnit Testing – Learning Resources (See Blackboard for larger list) Lars Vogel. (2015). Unit Testing with JUnit – Tutorial. Retrieved from http://www.vogella.com/tutorials/JUnit/article.html Java Coding Conventions (Reference only) Oracle. (April 20, 1999). Code Conventions for the Java Programming Language. [webpage] Retrieved from http://www.oracle.com/technetwork/java/index-135089.html You will need to follow links and use the table of contents. (PDF version available here: http://www.oracle.com/technetwork/java/codeconventions-150003.pdf ) Grading Guide Criteria* (Equal Weight) Needs Work (0) Poor (1) Intermediate (2) Excellent (3) Value Scored Code Conventions Java coding conventions are not followed Java coding conventions are not well followed. Java coding conventions are followed with several inconsistencies Java coding conventions are closely followed. Comments (Javadoc not required Assign 3) Comments missing or incorrect. Many classes and / or class members missing meaningful comments Very few classes and / or members missing comments, comments are meaningful. Nearly everything is commented, comments are meaningful, brief, well written. Discussion Missing or only repeats the questions Provides brief answers to questions with no explanations or examples Questions are answered, explained, and examples are used from the code to illustrate Questions are answered and explained with examples from code, student discusses how concepts in this program will be beneficial in future programing. Citations Minimum 3 references (Exceptions, ArrayList, Array vs ArrayList) No referenced work cited when it needed to be. See Algonquin College Policy AA20 on Plagiarism. References and citations present but not APA style, e.g. only the URL provided. References and citations loosely follow APA style References and citations closely follow APA style Compiles Program does not compile, too many syntax mistakes for the professor to track or debug without major re-write. Program does not compile, has several syntax mistakes Program does not compile, has a few small syntax mistakes Program compiles Concepts (Exceptions, ArrayList) Concepts are not demonstrated, program does not follow UML design. One or two concepts demonstrated, program loosely follows UML design Program demonstrates most of the concepts, closely follows UML design Program demonstrates understanding and application of concepts notably inheritance, polymorphism, abstract and follows UML design exactly. Execution Program does not run, or crashes on startup Program runs but crashes on unexpected input Program runs and does not crash, outputs are a close match to handout example Program runs, does not crash, outputs are an exact match to handout example. Unit Tests Unit tests omitted from student submission (or modified to pass tests that would normally fail) Provided unit test has many failed tests Provided unit test has few failed tests Provided unit test has no failed tests. Total: Max Points: 24 Appendix – Additional Notes Program Comments Note: • At the top of each source code file include the following comment header, adding the needed information: /* File Name: * Course Name: * Lab Section: * Student Name: * Date: * Author: Stanley Pieda (2015) Personal Communication * Updated By: (Student’s name) */ • Classes and class members (class level fields, constructors, methods) should have a brief description as a comment immediately above in the code listing. Example: /* * Provides interaction with the user in the * form of a console menu system. Options * include Practice test, Print Report, * and Exit Program. */ public void runMenu(){ Javadoc comments are not required for Assignment 3 but if you want to explore using them go ahead. (We will learn about Javadoc comments shortly in a future lecture) Appendix: Starter Code (If you copy and paste fix your indentation) package task; public class Task { private String title; private String priority; private boolean isComplete; public Task(){ title = “No title”; priority = “No priority”; } // things to do here: public Task(String title, String priority){ } public String getTitle(){ return title; } // things to do here public void setTitle(String title){ this.title = title.trim(); } public String getPriority(){ return priority; } // things to do here public void setPriority(String priority){ this.priority = priority.trim(); } public boolean getIsComplete(){ return isComplete; } public void setIsComplete(boolean isComplete){ this.isComplete = isComplete; } } ===== ===== ===== ===== ===== ===== package task; public class ValidationException extends Exception{ public ValidationException(){ super(“There was a problem when validating data”); } public ValidationException(String message){ super(message); } public ValidationException(String message, Throwable throwable){ super(message, throwable); } public ValidationException(Throwable throwable){ super(throwable); } } ===== ===== ===== ===== ===== ===== package task; public class ToDoListLauncher { public static void main(String[] args) { (new ToDoListManager()).runToDoList(); } } Appendix: Sample run of program Note: In the Eclipse console: • user input is in green text • System.err.println() outputs are in red. Here • user inputs were made black font, bolded, and highlighted in yellow • System.err.println() outputs were made black font, underlined, and bolded 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program delicious tuna Please enter integer numbers for menu selection 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 42 unrecognized command 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 2 Nothing to toggle, no tasks 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 3 Nothing to remove, no tasks 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 4 Nothing to show, no tasks 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) Homework Please enter task priority (high, medium, low) low 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) Eat pizza Please enter task priority (high, medium, low) high 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 4 index: 0 Homework (low) is not complete index: 1 Eat pizza (high) is not complete 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) This title is too long to use in this program Please enter task priority (high, medium, low) low 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program There was a problem adding a task: Title cannot exceed 25 characters Please try again. 1 Please enter task title (Title cannot be empty, max 25 characters) Please enter task priority (high, medium, low) high There was a problem adding a task: Title cannot be empty Please try again. 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) Please enter task priority (high, medium, low) low There was a problem adding a task: Title cannot be empty Please try again. 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) task title Please enter task priority (high, medium, low) maximum There was a problem adding a task: Priority must be high, medium, or low Please try again. 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) task title Please enter task priority (high, medium, low) There was a problem adding a task: Priority cannot be empty Please try again. 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 1 Please enter task title (Title cannot be empty, max 25 characters) task title User only used enter key User entered only whitespace User only used enter key User entered only whitespace Please enter task priority (high, medium, low) There was a problem adding a task: Priority cannot be empty Please try again. 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 2 Please enter index number of task to toggle complete / incomplete Tuna Could not toggle task complete Please enter only integers for index Please try again 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 2 Please enter index number of task to toggle complete / incomplete 42 Could not toggle task complete Please enter a valid index 0 to 1 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 2 Please enter index number of task to toggle complete / incomplete 1 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 4 index: 0 Homework (low) is not complete index: 1 Eat pizza (high) is complete 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 3 Please enter index number of task to remove moar tunas Could not remove task Please enter only integers for index Please try again 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 3 Please enter index number of task to remove 452 Could not remove task Please enter a valid index 0 to 1 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 3 Please enter index number of task to remove 1 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 4 index: 0 Homework (low) is not complete 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 555555555555555555555555555555555555555555555555555555555555555555555555555555555555 Please enter integer numbers for menu selection 1 to add a task 2 to toggle a task’s is completed 3 to remove a task 4 to view all tasks 5 to exit program 5 program will exit

