[Notice that the below proposal emulates the uncertainty (mine and what will be yours) prior to doing a project]

Dr. I's Project Proposal

Description of Project:

The "Announcements:" section of the class home pages which I make and you use are constantly changed with no record of what was previously there. Obviously, there are times when it would be helpful to both of us to be able to see what was there at some time in the past.

One solution to this problem is to make the "Announcements:" section a scrolling region which gets larger and larger during the semester. Conventions like adding new material at the top could be used to make the most current the first viewed. Although a large scrolling region is possible, it seems like it would become more and more difficult to work with as the semester goes on.

A second possibility would be to allow for saving the contents of the "Announcements:" section at selected times during the semester. Possibly a drop down list for access to these saved contents in addition to the normal section would be a reasonable solution.

Related to this situation, but not an overall solution, is the possibility of time-dating each announcement. Although this kind of additional information may get in the way at times, it may also help to give context to the announcements at other times. Additionally, the time-date information may be useful for naming during the saving and retrieving of previous contents of the "Announcements:" section.

To make the job of managing the saved announcements easier, a Java windows application will be created. It will allow viewing, editing, and writing of the current "Announcements:" section. Also, it will allow the current contents of the "Announcements:" section to be save to a file. This will require the new file name to be added to the drop down list and the contents of the "Announcements:" section cleared out.

Possible enhancements would be to allow viewing of the current "Announcements:" section content as it would appear on a webpage and/or make the viewer/editor a simple web editior. However, for this project, I will simply enter normal HTML and view its effect after writing it over the network to the webpage.

How Project Meets "must use" Requirements:

[NOTE: these ways to satisfy the requirements are tentative and subject to change during the project]
* You must use encapsulation, inheritance, and composition
 > satisfied by Java enforcing all data and methods in classes, view class(es) inheriting from abstract view class, and a file entry class in files class
* You must javadoc all classes, methods, and fields
 > satisfied by placing javadoc ("/** */") comments immediately before each class, method,and field
* You must use appropriate modifiers, access, data types, and control structures
 > satisfied by constants being final and static, fields being private or protected, methods being public or occassionally private, etc.
* You must use extends (classes) and implements (listeners)
 > satisfied by extending JFrame, JPanel, and Observable and implementing ActionListener and Observer minimally
* You must use one and two dimensional array(s)
 > satisfied by a one dimensional array for the filenames of the saved annoumentes and a two dimensional array for the FTP GUI files
* You must use at least one package you create
 > satisfied by placing the files of the MVC in a package
* You must use event handling for all normal situations
 > satisfied by actionPerformed methods for ActionListeners and update for Observers
* You must use file I/O (suggest text but you may choose object)
 > satisfied by the main application writing and reading the saved announcements files
* You must implement a main menu in part of the overall application
 > satisfied by the main application using a main menu
* You must use normal menus including file and help menus (including exit, help and about menu items)
 > satisfied by the main application using both file and help menus with at least exit, help and about menu items
* You must use swing GUI(s) in part of the overall application (including a variety of Swing components)
 > satisfied by the FTP part of the application being a windows GUI application
* You must use explicit layouts and containers
 > satisfied by the GridLayout and BorderLayouts and the JPanels for the FTP GUI
* You must use dialog(s)
 > satisfied by the about dialog and the open/save file dialogs
* You must use thread(s)
 > satisfied by the "animation" on the main application splash page
* You must use MVC (model-view-controller) in part of the overall application
 > satisfied by main application using MVC
* You must use some form of network programming (sockets, servlets, JSP, or RMI)
 > satisfied by reading the main class webpage, writing the changed page, and writing the saved page (considering using JSP for the page changes but not certain yet)
* You must use some form of graphics (images, drawing, polygons, etc.)
 > satisfied by an image on the about dialog
* You must use utility class(es)
 > satisfied by using the Date class (and Observable for the MVC)
* You must use collection class(es)
 > satisfied by using the Hashtable class
* You must use inner class(es)
 > satisfied by the closing of the main application's frame minimally
* You must use webpage(s)
 > satisfied by the existing class home webpage and the changes proposed to that page

* You may use explicit security manager(s)
* You may use polymorphism
* You may use abstract class(es)
 > may use the abstract class for the MVC view
* You may use applet(s)
* You may use animation
 > may use a simple animation for the main application splash screen
* You may use JDBC
* You may use JavaBeans
* You may use audio / video
* You may use synchronization
* You may use advanced Swing components
* You may use 2D or 3D graphics
* You may use XML