You are required to develop and document a Java application as follows.
The application allows the user to load and view images from files. The user should be presented with a
button or similar mechanism to allow them to select an image from the disk. If the selected file cannot be loaded as an image, the user should be informed with a warning message. Once the image is loaded it should be displayed in the UI, with the UI resizing itself to fit the image. The user should be able to click on the image and add an annotation to that particular location on the image. The annotation should indicate the location and have a short text label. Any number of annotations can be added to the image. The user should be able to click on an existing annotation and remove it. This implies that while adding and removing annotations, the annotations should be drawn as overlays on top of the unchanged image. Finally, the application should allow the annotated image to be saved to a new image file. The saved file should be an ordinary image with the annotations now embedded as a part of the image – reloading it would not allow annotations to be removed after saving.
You are expected to use the Swing UI toolkit. You should use a good Object-oriented approach to the design of the application, using dedicated classes as appropriate, for example, to represent annotations and to create modular custom components to provide the UI.
You must provide:
1) A written description of your design with a clear rationale for the way the application’s functionality has been accomplished.
2) A UML class diagram that depicts the classes your design consists of, the relationships between them and all non-private method specifications.
3) A descriptive narrative of your source code, including fragments of your source code with the written narrative as appropriate.
4) A critical appraisal of your design and implementation.
5) A discussion of how the MVC architecture could be related to your design, describing how the various parts of your code would be refactored into an MVC architecture (or how they represent an MVC architecture if that should be the case).
6) The source-code of your application in a suitable form to be compiled and run.
You will need to submit two files:
1) A written report in a word-processor document
2) A separate zip archive containing only the Java source code in its package hierarchy.