This assignment is in two parts, using SAX and DOM to parse and print a computer folder listing in HTML form.
You are provided with a small folder listing in the file Folder.xml. The top-level folder element has an attribute giving its name. Within this are files and subsidiary folders. Each has a name element and an optional attribute giving its extension (i.e. suffix). For example, the file analyser.exe has name analyser and extension .exe. A file has a size element, but a subsidiary folder omits this. A file or subsidiary folder has optional permission elements for who may use it. Each permission has a user attribute and a selection of permission values: r (read), w (write), x (execute).
Your goal is to use both SAX and DOM to create HTML output that looks like the following in a web browser. Data and Private are subsidiary folders and so have no size field. Folder Private and file test are not accessible and so have no permissions. See image.
Note that you are expected to create neatly indented and tabulated HTML. Also note that you will get no credit for code that literally outputs the HTML for this table. Your code must work with any input file in the style of Folder.xml. During development, you may find it helpful to temporarily set the value of variable writer (which prints HTML output) to System.out so you can immediately see what your code is doing. When your code is working, replace this with output to an HTML file.
Start by looking at the sax folder as supplied. Open the BlueJ project and study the Java files you are given. Also open Folder.xml in a text editor to see what you will have to read and output as HTML.
The SAX practical is rather similar to this part of the assignment, except that there is only one handler (for HTML). FolderSAX.java is complete and should not be changed. Look at the parse method in FolderSAX. You will see that it reads and parses Folder.xml. FolderHTML is registered as the handler for this, so you will get events as various XML elements are found.
FolderHTML.java is very incomplete and is the file you should work on. See the code provided for some hints about doing this. The total count is for all folder entries, while the file count is for those with size values. You will need take care over the following:
Now look at the dom folder as supplied. Open the BlueJ project and study the Java file you are given. Note that Folder.xml is the same as for the SAX part of the assignment.
The DOM practical is rather similar to this part of the assignment. The structure of FolderDOM is given, but a number of methods are currently empty. Some you can fill in by adapting code from the DOM practical, but some you will need to write from scratch. In a number of cases you can use code that is similar to the SAX part of the assignment.
Start by looking at the main method. You will see that this loads Folder.xml. Computer folders implicitly contain a link to their parent folder. The DOM part of the assignment therefore differs in that the parent folder (name empty, extension ‘..’) is appended to the folder list after it has been read. The DOM tree you read must therefore be modified to append this entry. An HTML header is then output, followed by the body of the table and the HTML trailer. When your code is working, you should see the parent folder as the last entry in the table.
The file and total counts must be handled by XPath for this part of the assignment. The first needs to count all size children of the root node. The second needs to count all file children of the root node.