Design and implement a basic File Transfer Protocol (FTP) graphical user interface tool. When executed, the tool will display a UI where the user can upload (put) and download (get) files from a remote server. The ftp4j library will be used to implement the actual protocol and file transfers. A remote FTP site and credentials will be provided for the project
This project reuses classes implemented in Project 2. You should be able to use the classes with little to no modification. The classes (and related parent classes) to be reused are:• PutJob.java: A subclass of TransferJob that performs an FTP upload of a file to the remote host.• GetJob.java: A subclass of TransferJob that performs and FTP download of a file from the remote host
Two new classes will be introduced:• MultiThreadedTransferEngine.java: An implementation of TransferEngine that performs all operations in separate threads. Each addJob(…) operation will create and start a new job for the thread. The class must be thread-safe; that is, adding a job or getting the list of jobs while jobs are executing in separate threads are all possible operations. The engine must keep track of the jobs and threads so it can properly block when stop() is called if there are active transfer jobs.• JobTableModel.java: An implementation ofjavax.swing.table.AbstractTableModel that has a single constructor that takes a Collection of TransferJobs. The table model can be set on a Swing JTable to display 4 columns of job related data: source, destination, progress, and error message
The UI must contain the following additional features; that is, features beyond those already supported in project 2:• A jobs table: For displaying the added jobs and the transfer progress. The jobs will no longer be displayed in the console text area. The table must have 4 columns defined by the JobTableModel described previously.• A refresh timer: For refreshing the jobs in the job table. The timer must fire every 5 seconds and update/replace the model on the jobs table. Be sure to use the Swing Timer so it can operate safely on the UI.• A refresh button: Refreshes the local file list and remote file list. The refresh no longer appends the status of all jobs to the console text area because the jobs are now listed in the table.
Refer to the example screenshot for a suggested layout. You may use the NetBeans UI Builder for this project
The general functionality is the same as with project 2. A user can upload and download files using a simple UI but the UI will not block while a transfer is in progress and multiple transfers can be in progress simultaneously. You do not need to implement directory browsing so the local file list will always be for the current directory and the remote file list will always be for the default home directory of the user (refer to FTPClient.currentDirectory()).
Future projects in this class will reuse the core parts of this project (e.g. the transfer engine, jobs, and UI) so implement them correctly, cleanly, and with proper documentation in order to save time later. Ask questions in the online classroom on via email if you are struggling with any part of the assignment.
Refer to Project 1 for information on the ftp4j library and the FTP site information for testing will be provided to you
All code must be properly documented with JavaDoc style class, method, and field comments and inline code comments. All code must be properly formatted and indented for readability. Java style guidelines and conventions must be used for class, method, field, and variable naming
Demonstrate that your code compiles and runs without issue using the command line JDK tools (i.e. javac and java). You can use screen captures to demonstrate this functionality in a Word document. Be sure to include enough cases to verify functionality and to represent adequate testing of the application
The Word document must also include a “Lessons Learned” section in which you provide lessons learned while developing the application including (but not limited to):• What was the most challenging part?• What are the limitations of the current implementation?• What improvements or new features could be added?• How might you add features like remote file deletion and directory listing?• How could the assignment be improved?• What are the key lessons learned that you would take into future assignments?
Your completed assignment should consist of all the “.java” implementation files and the “.doc(x)” documentation file. Do not include the ftp4j “.jar” library file or any “.class” compile files. Do not copy and paste your Java code into the Word document. Submit these files to your project 2 assignment area no later than the due date listed in the syllabus