Cookbook for Developers of ArgoUML

An introduction to Developing ArgoUML

Edited by

Linus Tolke

Markus Klink

Copyright (c) 1996-2005 The Regents of the University of California. All Rights Reserved. Permission to use, copy, modify, and distribute this software and its documentation without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph appear in all copies. This software program and documentation are copyrighted by The Regents of the University of California. The software program and documentation are supplied "AS IS", without any accompanying services from The Regents. The Regents does not warrant that the operation of the program will be uninterrupted or error-free. The end-user understands that the program was developed for research purposes and is advised not to rely exclusively on the program for any reason. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

Abstract

The purpose of this Cookbook is to help in coordinating and documenting the development of ArgoUML.

This version of the cookbook is loosely connected to the version 0.17.5 of ArgoUML.


Table of Contents

1. Change Log
1. Introduction
1.1. Thanks
1.2. About the project
1.3. How to contribute
1.4. About this Cookbook
1.4.1. In this Cookbook, you will find...
1.4.2. In this Cookbook, you will not find...
1.5. Mailing Lists
2. Building from source
2.1. Getting started
2.1.1. Which tools do I need to build ArgoUML?
2.1.2. Which tools are part of the ArgoUML development environment?
2.1.3. What libraries are needed and used by ArgoUML?
2.2. Download from the CVS repository
2.3. Build Process
2.3.1. How ANT is run from the ArgoUML development environment
2.3.2. Generating documentation
2.3.3. Troubleshooting the development build
2.4. The JUnit test cases
2.4.1. How to write a test case
2.5. Manual Test Cases
2.5.1. Running the manual tests
2.5.2. Writing the manual tests
2.5.3. The list of tests
2.6. Making a release
2.6.1. The release did not work
3. ArgoUML requirements
3.1. Requirements for Look and feel
3.1.1. When multiple visual components are showing the same model element they shall be updated in a consistent manner throughout the application.
3.1.2. All views of a model element shall be update as soon as the model element is updated.
3.1.3. Editable views of the model should update the model on each keystroke and mouse click.
3.1.4. Any text fields that require validation should not be editable directly from a view.
3.1.5. With dialogs, the model is not updated until the dialog is accepted by the user with valid fields.
3.1.6. The user shall receive some visual feedback during the edit process of textual UML to indicate whether the text represents valid UML syntax.
3.1.7. There shall be no indication of an exception on the screen or in the log if it has occured merely because of a user mistyping or not being aware of UML syntax.
3.1.8. All text fields shall have context sensitive help.
3.2. Requirements for UML
3.2.1. ArgoUML shall be a correct implementation of the UML 1.3 model.
3.2.2. ArgoUML shall implement everything in the UML 1.3 model.
3.3. Requirements on java and jvm
3.3.1. Choice of JRE: ArgoUML will support any JRE compatible with a Sun specification of any JRE from Sun that has not begun the Sun End of Life (EOL) process.
3.3.2. Download and start
3.3.3. Console output: Logging or tracing information shall not be written to the console or to any file unless explicitly turned on by the user.
3.4. Requirements set up for the benefit of the development of ArgoUML
3.4.1. Logging: The code shall contain entries logging important information for the purpose of helping Developers of ArgoUML in finding problems in ArgoUML itself.
4. ArgoUML Design, The Big Picture
4.1. Definition of subsystem
4.2. Relationship of the subsystems
4.3. Low-level subsystems
4.4. Model subsystems
4.5. View and Control subsystems
4.6. Loadable subsystems
5. Inside the subsystems
5.1. Model
5.1.1. Factories
5.1.2. Helpers
5.1.3. The model event pump
5.1.4. How to work against the model
5.1.5. How do I...?
5.2. Critics and other cognitive tools
5.2.1. Main classes
5.2.2. How do I ...?
5.2.3. org.argouml.cognitive.critics.* class diagram
5.3. Diagrams
5.3.1. Multi editor pane
5.3.2. How do I add a new element to a diagram?
5.3.3. How to add a new Fig
5.4. Property panels
5.4.1. Adding the property panel
5.5. Persistence
5.6. Reverse Engineering Subsystem
5.7. Code Generation Subsystem
5.8. Java - Code generations and Reverse Engineering
5.8.1. How do I ...?
5.8.2. Which sources are involved?
5.8.3. How is the grammar of the target language implemented?
5.8.4. Which model/diagram elements are generated?
5.8.5. Which layout algorithm is used?
5.9. Other languages
5.10. The GUI Framework
5.11. Application
5.11.1. What is loaded/initialized?
5.11.2. Details pane
5.12. Help System
5.13. Internationalization
5.13.1. Organizing translators
5.13.2. Ambitions for localization
5.13.3. How do I ...?
5.14. Logging
5.14.1. What to Log in ArgoUML
5.14.2. How to Create Log Entries...
5.14.3. How to Enable Logging...
5.14.4. How to Customize Logging...
5.14.5. References
5.15. JRE with utils
5.16. To do items
5.17. Explorer
5.17.1. Requirements
5.17.2. Public APIs and SPIs
5.17.3. Details of the Explorer Implementation
5.17.4. How do I ...?
5.18. Module loader
5.18.1. What the ModuleLoader does
5.18.2. Design of the new Module Loader
5.19. OCL
6. Extending ArgoUML
6.1. How do I ...?
6.2. Modules and PlugIns
6.2.1. Differences between modules and plugins
6.2.2. Modules
6.2.3. Plugins
6.2.4. Tip for creating new modules (from Florent de Lamotte)
6.3. How are modules organized in the java code
6.3.1. Requirements on modules
6.3.2. How do I ...?
7. Organization of ArgoUML documentation
7.1. Overview
7.2. User Manual Plans
7.2.1. Target Audiences for the User Manual
7.2.2. Goals for the User Manual
7.2.3. Suggested Manual Structure
7.2.4. Actions, Priorities and Questions
8. CVS in the ArgoUML project
8.1. How to work against the CVS repository
8.2. Creating and using branches
8.2.1. How do I ...?
8.3. Other CVS comments
8.4. CVS repository contents
9. Standards for coding in ArgoUML
9.1. Rules for writing Java code
9.2. Rules for the building process
9.3. Checklist for using subproducts
9.4. Settings for Eclipse 2
9.5. Settings for NetBeans
9.6. Settings for Emacs
9.7. How to work with Eclipse 3
9.7.1. Checking out through Eclipse
9.7.2. Eclipse to help with the ArgoUML coding style
9.7.3. Eclipse to automatically find problems in the code
9.7.4. Settings for checkclipse
9.7.5. Run the JUnit tests
10. Standards For Documentation Writing
10.1. Introduction
10.2. Style
10.3. Document Conventions
10.4. DocBook Conventions
10.5. For Emacs Users
11. Further Reading
11.1. Jason Robbins Dissertation
11.1.1. Abstract
11.1.2. Where to find it
11.2. Martin Skinners Dissertation
11.2.1. Abstract
11.2.2. Where to find it
12. Processes for the ArgoUML project
12.1. The big picture for Issues
12.2. Attributes of an issue
12.2.1. Priorities
12.2.2. Resolutions
12.3. Roles Of The Workers
12.3.1. The Reporter
12.3.2. The Resolver
12.3.3. The Verifier
12.4. How to resolve an Issue
12.5. How to verify an Issue that is FIXED
12.6. How to verify an Issue that is rejected
12.7. How to Close an Issue
12.8. How to relate issues to problems in subproducts
Index

List of Tables

1. Changes done
5.1. How to work against the model
7.1. Bits of documentation

List of Examples

2.1. An example without javadoc comments
5.1. For log4j version 1.2.x
5.2. Improving on speed/performance
5.3. Various URLs
5.4. Command Line for argouml.jar
5.5. Modification of build.xml
5.6. External Execution Property (Arguments)