In this project, you will be developing a simple Java application (textprocessor) using an agile, test-driven process involving multiple deliverables. While you will receive one grade for the entire project, each deliverable must be completed by its own due date, and all deliverables will contribute to the overall project grade.
Specification of the textprocessor Utility
textprocessor is a command-line utility written in Java with the following specification:
textprocessor allows for simple text manipulation of the contents of a file.
textprocessor [OPTIONS] FILE
Program textprocessor performs basic text transformations on lines of text from an input FILE. Unless the -o option (see below) is specified, the program writes transformed text to stdout and errors/usage messages to stderr. The FILE parameter is required and must be the last parameter. OPTIONS may be zero or more of the following and may occur in any order:
- The program writes the output to output_file_namewith transformed text instead of writing to stdout. If output_file_name already exists, the program shall result in an error.
- Used with the -r flag and -k flag ONLY; the search of -r or -k becomes case-insensitive.
- Keep only the lines containing substring. The search for substringis case-sensitive, unless option -i is set. This option must be mutually exclusive with -r below.
- -r <old> <new>
- Replaces the first instance of string oldin each line with string new. The search for old is case-sensitive, unless option -i is set. This option must be mutually exclusive with -k above.
- -s <suffix>
- Adds the string suffixat the end of each line.
- Add a line number followed by a single spaceto the beginning of each line, where padding is an integer in the inclusive range of 1 to 9 specifying the minimum padding of the line number field. If the number of digits in the line number is less than the specified padding, zeros are left padded until the minimum padding is reached. If the number of digits in the line number is greater than the specified padding, the line number is never truncated. Line numbering should start at 1. This option must be mutually exclusive with -w below.
- Removes all whitespace from lines. For this assignment, whitespace will count as any spaces, ” “, or tabs, “\t”, in the input file. It must be mutually exclusive with -n above.
- While the last command-line parameter provided is always treated as the filename, OPTIONSflags can be provided in any order and shall be applied as follows:
- Options -o/-i shall be processed first, as they determine global parameters of the computation.
- Options -k, -r, -n, -w, and -s, shall be processed in this order. That is: (1) if -k is present, then the file content is filtered based on the specified parameter, using a case insensitive search if -i is present; (2) if -r is present, then replacements are performed based on the option parameters, using a case insensitive search if -i is present; (3) if -n is present, then a line number is applied; (4) if -w is present, then whitespace from the line is removed; (5) if -s is present, then a suffix shall be applied.
- To keep this application simple, all errors shall result in display of the standard usage message.
- Specifying option -i without having specified option -r or -k shall result in an error.
- Specifying option -k with an empty string as the <substring>parameter should keep all input lines.
- Specifying option -r with an empty string as the <old>parameter or option -s with an empty string as the <suffix> parameter shall result in an error.
- Specifying options -r and -k simultaneously shall result in an error.
- Specifying option -n with a non-integer value or an integer out of range shall result in an error.
- Specifying options -n and -w simultaneously shall result in an error.
- If options are repeated, only their last occurrence is applied.
- All program option parameters are required, resulting in an error if omitted.
- You shall assume that the command line parameter strings will not contain newline characters (\r, \n, and so on), as the behavior of the program would be platform dependent and may result in errors during grading. Therefore, there should be no test cases using these values as option parameters.
- An empty input file shall produce an empty output file.
- The last line of a non-empty input file must be newline terminated. Otherwise, the program shall generate an error.