diff --git a/index.html b/index.html
new file mode 100644
index 0000000..d177444
--- /dev/null
+++ b/index.html
@@ -0,0 +1,440 @@
+
+
+
+UMLGraph- Declarative Drawing of UML diagrams
+
+
+UMLGraph- Declarative Drawing of UML diagrams
+
+UMLGraph allows the declarative specification and drawing of
+a number of UML diagrams.
+You specify your design using the Java syntax complemented by
+javadoc
+tags.
+Running the UmlGraph doclet on your specification will generate
+a
+Graphviz
+diagram specification that can be automatically processed to
+create Postscript, GIF, SVG, JPEG, fig, or Framemaker drawings.
+
+The following is an example of a specification and the resulting UML
+diagram:
+
+
+
+class Person {
+ String Name;
+}
+
+class Employee extends Person {}
+
+class Client extends Person {}
+
+ |
+
+ |
+
+
Operation
+To use UMLGraph you need to have
+javadoc
+and
+Graphviz
+installed on your computer.
+Both programs are freely available, from Sun and AT&T respectively,
+for many platforms including Unix and Windows.
+UMLGraph's input follows the Java syntax and semantics.
+However,
+since the main purpose of UMLGraph is the declarative specification of
+UML diagrams there is no need to flesh-out each class's methods,
+to completely specify each class, or to specify package information.
+You only specify the details you want to appear on the graph.
+If you wish your (Java) implementation to evolve together with the
+design feel free to include code or additional details.
+You can hide these details from the UML diagram using the javadoc
+@hide tag applied to classes, methods, and fields.
+In theory you can also use UMLGraph to reverse engineer existing
+Java code.
+Note however that UMLGraph is not designed for this purpose;
+the resulting graphs may be large and unwieldy.
+
+UMLGraph is implemented as a javadoc doclet (a program satisfying the
+doclet API that specifies the content and format of the output
+generated by the javadoc tool).
+Javadoc is part of the Sun JDK, so a typical JDK installation will also
+include javadoc.
+Before running javadoc you need to place the UmlGraph.class
+file in a location accessible by javadoc (the Java class path or the
+current directory).
+You then run javadoc with the argument -doclet UmlGraph
+and append at the end the file(s) that contain your diagram
+specification.
+You can of course use any of the javadoc general options;
+-private is usually needed to avoid having to explicitly
+specify public elements.
+Example:
+
+javadoc -doclet UmlGraph -private Simple.java
+
+javadoc will create a file named graph.dot
+in the current directory;
+this is a text file that can be processed by the Graphviz
+ dot program to layout and draw the graph.
+A command line like the following will convert the graph.dot
+file into Postscript:
+
+dot -Tps -ograph.ps graph.dot
+
+Refer to the dot documentation for information on creating other file formats
+or adjusting the UMLGraph output.
+Modelling
+UMLGraph allows you to model
+
+- classes (specified as Java classes)
+
- attributes (specified as Java fields)
+
- operations (specified as Java methods)
+
- implementation relationships (specified using the Java
implements declaration)
+ - generalization relationships (specified using the Java
extends declaration or (for multiple inheritance) the javadoc @extends tag)
+ - association relationships (specified using the javadoc
@assoc tag)
+ - navigatable (directed) association relationships (specified using the javadoc
@navassoc tag)
+ - aggregation relationships (specified using the javadoc
@has tag)
+ - composition relationships (specified using the javadoc
@composed tag)
+ - dependency relationships (specified using the javadoc
@depend tag)
+
+All relationship tags appart from @extends take four arguments:
+
+- The source adornments (role, multiplicity, and visibility)
+
- The relationship name
+
- The target adornments (role, multiplicity, and visibility)
+
- The target class
+
+Arguments can be space-separated, or enclosed in quotes if they
+need to contain the space character.
+The - character is used as a placeholder to denote empty arguments.
+You can use the \n sequence to separate the first three adornments
+in separate centered lines;
+the \l and \r sequences can also be used to generate left and right
+aligned lines.
+You can use the < and > characters in the relationship name
+to enclose stereotype names.
+These will be automatically enclosed in guillemots.
+Note that a relationship's target class is not implicitly
+defined; it should also be specified using the Java class syntax.
+The following is an example of a relationship
+specification and the resulting UML diagram:
+
+
+
+class Tyre {}
+class Engine {}
+class Body {}
+
+/**
+ * @composed 1 - 4 Tyre
+ * @composed 1 - 1 Engine
+ * @composed 1 - 1 Body
+ */
+class Car {}
+
+ |
+
+ |
+
+Program Options
+A number of command-line options contol the operation of UMLGraph:
+
+- -qualify
- Produce fully-qualified class names.
+
- -horizontal
- Layout the graph in the horizontal direction.
+
- -attributes
- Show class attributes (Java fields)
+
- -operations
- Show class operations (Java methods)
+
- -visibility
- Adorn class elements according to their
+visibility (private, public, protected)
+
- -types
- Add type information to attributes and operations
+
- -all
- Same as
+
-horizontal
+-attributes
+-operations
+-visibility
+-types
+
+
+Since the options are really a part of the generated graph you
+want in many cases to include them in the diagram specification.
+You can do that by adding javadoc @opt tags in front
+of a class named UMLOptions, as in the following example:
+
+/**
+ * @opt horizontal
+ * @opt all
+ * @hidden
+ */
+class UMLOptions {}
+
+
+Availability
+UMLGraph is freely available as Open Source Software.
+You can download it in source and compiled format from the following links:
+
+
+More Examples
+Generalisation Relationships
+
+
+
+/*
+ * Generalisation
+ * UML User Guide p. 141
+ */
+
+/* Basic categorisations */
+class Asset {}
+class InterestBearingItem {}
+class InsurableItem {}
+
+/* Asset types */
+/**
+ * @extends InsurableItem
+ * @extends InterestBearingItem
+ */
+class BankAccount extends Asset {}
+/** @extends InsurableItem */
+class RealEstate extends Asset {}
+class Security extends Asset {}
+
+/* Securities */
+class Stock extends Security {}
+class Bond extends Security {}
+
+/* Bank accounts */
+class CheckingAccount extends BankAccount {}
+class SavingsAccount extends BankAccount {}
+
+ |
+
+ |
+Download the dot code
+Advanced Relationships
+
+
+
+/*
+ * Advanced relationships
+ * UML User Guide p. 137
+ */
+
+/**
+ * @opt attributes
+ * @opt operations
+ * @hidden
+ */
+class UMLOptions {}
+
+class Controller {}
+class EmbeddedAgent {}
+class PowerManager {}
+
+/**
+ * @extends Controller
+ * @extends EmbeddedAgent
+ * @navassoc - - - PowerManager
+ */
+class SetTopController implements URLStreamHandler {
+ int authorizationLevel;
+ void startUp() {}
+ void shutDown() {}
+ void connect() {}
+}
+
+/** @depend - - SetTopController */
+class ChannelIterator {}
+
+interface URLStreamHandler {
+ void OpenConnection();
+ void parseURL();
+ void setURL();
+ void toExternalForm();
+}
+
+ |
+
+ |
+Download the dot code
+Schema
+
+
+
+/*
+ * Schema model
+ * UML User Guide p. 112
+ */
+
+/**
+ * @opt operations
+ * @opt attributes
+ * @opt types
+ * @hidden
+ */
+class UMLOptions {}
+
+/* Define some types we use */
+/** @hidden */
+class Name {}
+/** @hidden */
+class Number {}
+
+/**
+ * @has 1..* Member * Student
+ * @composed 1..* Has 1..* Department
+ */
+class School {
+ Name name;
+ String address;
+ Number phone;
+ void addStudent() {}
+ void removeStudent() {}
+ void getStudent() {}
+ void getAllStudents() {}
+ void addDepartment() {}
+ void removeDepartment() {}
+ void getDepartment() {}
+ void getAllDepartments() {}
+}
+
+/**
+ * @has 1..* AssignedTo 1..* Instructor
+ * @assoc 1..* - 1..* Course
+ * @assoc 0..* - "0..1 chairperson" Instructor
+ */
+class Department {
+ Name name;
+ void addInstructor() {}
+ void removeInstructor() {}
+ void getInstructor() {}
+ void getAllInstructors() {}
+}
+
+/**
+ * @assoc * Attends * Course
+ */
+class Student {
+ Name name;
+ Number studentID;
+}
+
+class Course {
+ Name name;
+ Number courseID;
+}
+
+/**
+ * @assoc 1..* Teaches * Course
+ */
+class Instructor {
+ Name name;
+}
+
+ |
+
+ |
+Download the dot code
+Element Visibility
+
+
+
+/**
+ * Attribute and operation visility
+ * UML User Guide p. 123
+ *
+ * @opt operations
+ * @opt attributes
+ * @opt types
+ * @opt visibility
+ * @hidden
+ */
+class UMLOptions {}
+
+/** @hidden */
+class Tool {}
+
+class Toolbar {
+ protected Tool currentSelection;
+ protected Integer toolCount;
+ public void pickItem(Integer i) {}
+ public void addTool(Tool t) {}
+ public void removeTool(Integer i) {}
+ public Tool getTool() {}
+ protected void checkOrphans() {}
+ private void compact() {}
+}
+
+ |
+
+ |
+Download the dot code
+Association Types
+
+
+
+/**
+ * Associations with visibility
+ * UML User Guide p. 145
+ *
+ * @opt horizontal
+ * @hidden
+ */
+class UMLOptions {}
+
+/** @assoc * - "*\n\n+user " User */
+class UserGroup {}
+
+/** @navassoc "1\n\n+owner\r" - "*\n\n+key" Password */
+class User{}
+
+class Password{}
+
+ |
+
+ |
+Download the dot code
+Real Example (Catalina Classes)
+
+/*
+ * Interface and generalization relationships in Jakarta Catalina
+ */
+
+class HttpResponseBase
+ extends ResponseBase
+ implements HttpResponse, HttpServletResponse {}
+
+abstract class HttpResponseWrapper
+ extends ResponseWrapper
+ implements HttpResponse {}
+
+class HttpResponseFacade
+ extends ResponseFacade
+ implements HttpServletResponse {}
+
+abstract class ResponseWrapper implements Response {}
+abstract interface HttpResponse extends Response {}
+abstract class ResponseBase implements Response, ServletResponse {}
+abstract interface HttpServletResponse {}
+class ResponseFacade implements ServletResponse {}
+
+abstract interface ServletResponse {}
+abstract interface Response {}
+
+
+Download the dot code
+
+
+Diomidis Spinellis home page.
+
+$Id$
+(C) Copyright 2002 Diomidis D. Spinellis.
+May be freely uploaded by WWW viewers and similar programs.
+All other rights reserved.
+
+
diff --git a/web/index.html b/web/index.html
new file mode 100644
index 0000000..d177444
--- /dev/null
+++ b/web/index.html
@@ -0,0 +1,440 @@
+
+
+
+UMLGraph- Declarative Drawing of UML diagrams
+
+
+UMLGraph- Declarative Drawing of UML diagrams
+
+UMLGraph allows the declarative specification and drawing of
+a number of UML diagrams.
+You specify your design using the Java syntax complemented by
+javadoc
+tags.
+Running the UmlGraph doclet on your specification will generate
+a
+Graphviz
+diagram specification that can be automatically processed to
+create Postscript, GIF, SVG, JPEG, fig, or Framemaker drawings.
+
+The following is an example of a specification and the resulting UML
+diagram:
+
+
+
+class Person {
+ String Name;
+}
+
+class Employee extends Person {}
+
+class Client extends Person {}
+
+ |
+
+ |
+
+
Operation
+To use UMLGraph you need to have
+javadoc
+and
+Graphviz
+installed on your computer.
+Both programs are freely available, from Sun and AT&T respectively,
+for many platforms including Unix and Windows.
+UMLGraph's input follows the Java syntax and semantics.
+However,
+since the main purpose of UMLGraph is the declarative specification of
+UML diagrams there is no need to flesh-out each class's methods,
+to completely specify each class, or to specify package information.
+You only specify the details you want to appear on the graph.
+If you wish your (Java) implementation to evolve together with the
+design feel free to include code or additional details.
+You can hide these details from the UML diagram using the javadoc
+@hide tag applied to classes, methods, and fields.
+In theory you can also use UMLGraph to reverse engineer existing
+Java code.
+Note however that UMLGraph is not designed for this purpose;
+the resulting graphs may be large and unwieldy.
+
+UMLGraph is implemented as a javadoc doclet (a program satisfying the
+doclet API that specifies the content and format of the output
+generated by the javadoc tool).
+Javadoc is part of the Sun JDK, so a typical JDK installation will also
+include javadoc.
+Before running javadoc you need to place the UmlGraph.class
+file in a location accessible by javadoc (the Java class path or the
+current directory).
+You then run javadoc with the argument -doclet UmlGraph
+and append at the end the file(s) that contain your diagram
+specification.
+You can of course use any of the javadoc general options;
+-private is usually needed to avoid having to explicitly
+specify public elements.
+Example:
+
+javadoc -doclet UmlGraph -private Simple.java
+
+javadoc will create a file named graph.dot
+in the current directory;
+this is a text file that can be processed by the Graphviz
+ dot program to layout and draw the graph.
+A command line like the following will convert the graph.dot
+file into Postscript:
+
+dot -Tps -ograph.ps graph.dot
+
+Refer to the dot documentation for information on creating other file formats
+or adjusting the UMLGraph output.
+Modelling
+UMLGraph allows you to model
+
+- classes (specified as Java classes)
+
- attributes (specified as Java fields)
+
- operations (specified as Java methods)
+
- implementation relationships (specified using the Java
implements declaration)
+ - generalization relationships (specified using the Java
extends declaration or (for multiple inheritance) the javadoc @extends tag)
+ - association relationships (specified using the javadoc
@assoc tag)
+ - navigatable (directed) association relationships (specified using the javadoc
@navassoc tag)
+ - aggregation relationships (specified using the javadoc
@has tag)
+ - composition relationships (specified using the javadoc
@composed tag)
+ - dependency relationships (specified using the javadoc
@depend tag)
+
+All relationship tags appart from @extends take four arguments:
+
+- The source adornments (role, multiplicity, and visibility)
+
- The relationship name
+
- The target adornments (role, multiplicity, and visibility)
+
- The target class
+
+Arguments can be space-separated, or enclosed in quotes if they
+need to contain the space character.
+The - character is used as a placeholder to denote empty arguments.
+You can use the \n sequence to separate the first three adornments
+in separate centered lines;
+the \l and \r sequences can also be used to generate left and right
+aligned lines.
+You can use the < and > characters in the relationship name
+to enclose stereotype names.
+These will be automatically enclosed in guillemots.
+Note that a relationship's target class is not implicitly
+defined; it should also be specified using the Java class syntax.
+The following is an example of a relationship
+specification and the resulting UML diagram:
+
+
+
+class Tyre {}
+class Engine {}
+class Body {}
+
+/**
+ * @composed 1 - 4 Tyre
+ * @composed 1 - 1 Engine
+ * @composed 1 - 1 Body
+ */
+class Car {}
+
+ |
+
+ |
+
+Program Options
+A number of command-line options contol the operation of UMLGraph:
+
+- -qualify
- Produce fully-qualified class names.
+
- -horizontal
- Layout the graph in the horizontal direction.
+
- -attributes
- Show class attributes (Java fields)
+
- -operations
- Show class operations (Java methods)
+
- -visibility
- Adorn class elements according to their
+visibility (private, public, protected)
+
- -types
- Add type information to attributes and operations
+
- -all
- Same as
+
-horizontal
+-attributes
+-operations
+-visibility
+-types
+
+
+Since the options are really a part of the generated graph you
+want in many cases to include them in the diagram specification.
+You can do that by adding javadoc @opt tags in front
+of a class named UMLOptions, as in the following example:
+
+/**
+ * @opt horizontal
+ * @opt all
+ * @hidden
+ */
+class UMLOptions {}
+
+
+Availability
+UMLGraph is freely available as Open Source Software.
+You can download it in source and compiled format from the following links:
+
+
+More Examples
+Generalisation Relationships
+
+
+
+/*
+ * Generalisation
+ * UML User Guide p. 141
+ */
+
+/* Basic categorisations */
+class Asset {}
+class InterestBearingItem {}
+class InsurableItem {}
+
+/* Asset types */
+/**
+ * @extends InsurableItem
+ * @extends InterestBearingItem
+ */
+class BankAccount extends Asset {}
+/** @extends InsurableItem */
+class RealEstate extends Asset {}
+class Security extends Asset {}
+
+/* Securities */
+class Stock extends Security {}
+class Bond extends Security {}
+
+/* Bank accounts */
+class CheckingAccount extends BankAccount {}
+class SavingsAccount extends BankAccount {}
+
+ |
+
+ |
+Download the dot code
+Advanced Relationships
+
+
+
+/*
+ * Advanced relationships
+ * UML User Guide p. 137
+ */
+
+/**
+ * @opt attributes
+ * @opt operations
+ * @hidden
+ */
+class UMLOptions {}
+
+class Controller {}
+class EmbeddedAgent {}
+class PowerManager {}
+
+/**
+ * @extends Controller
+ * @extends EmbeddedAgent
+ * @navassoc - - - PowerManager
+ */
+class SetTopController implements URLStreamHandler {
+ int authorizationLevel;
+ void startUp() {}
+ void shutDown() {}
+ void connect() {}
+}
+
+/** @depend - - SetTopController */
+class ChannelIterator {}
+
+interface URLStreamHandler {
+ void OpenConnection();
+ void parseURL();
+ void setURL();
+ void toExternalForm();
+}
+
+ |
+
+ |
+Download the dot code
+Schema
+
+
+
+/*
+ * Schema model
+ * UML User Guide p. 112
+ */
+
+/**
+ * @opt operations
+ * @opt attributes
+ * @opt types
+ * @hidden
+ */
+class UMLOptions {}
+
+/* Define some types we use */
+/** @hidden */
+class Name {}
+/** @hidden */
+class Number {}
+
+/**
+ * @has 1..* Member * Student
+ * @composed 1..* Has 1..* Department
+ */
+class School {
+ Name name;
+ String address;
+ Number phone;
+ void addStudent() {}
+ void removeStudent() {}
+ void getStudent() {}
+ void getAllStudents() {}
+ void addDepartment() {}
+ void removeDepartment() {}
+ void getDepartment() {}
+ void getAllDepartments() {}
+}
+
+/**
+ * @has 1..* AssignedTo 1..* Instructor
+ * @assoc 1..* - 1..* Course
+ * @assoc 0..* - "0..1 chairperson" Instructor
+ */
+class Department {
+ Name name;
+ void addInstructor() {}
+ void removeInstructor() {}
+ void getInstructor() {}
+ void getAllInstructors() {}
+}
+
+/**
+ * @assoc * Attends * Course
+ */
+class Student {
+ Name name;
+ Number studentID;
+}
+
+class Course {
+ Name name;
+ Number courseID;
+}
+
+/**
+ * @assoc 1..* Teaches * Course
+ */
+class Instructor {
+ Name name;
+}
+
+ |
+
+ |
+Download the dot code
+Element Visibility
+
+
+
+/**
+ * Attribute and operation visility
+ * UML User Guide p. 123
+ *
+ * @opt operations
+ * @opt attributes
+ * @opt types
+ * @opt visibility
+ * @hidden
+ */
+class UMLOptions {}
+
+/** @hidden */
+class Tool {}
+
+class Toolbar {
+ protected Tool currentSelection;
+ protected Integer toolCount;
+ public void pickItem(Integer i) {}
+ public void addTool(Tool t) {}
+ public void removeTool(Integer i) {}
+ public Tool getTool() {}
+ protected void checkOrphans() {}
+ private void compact() {}
+}
+
+ |
+
+ |
+Download the dot code
+Association Types
+
+
+
+/**
+ * Associations with visibility
+ * UML User Guide p. 145
+ *
+ * @opt horizontal
+ * @hidden
+ */
+class UMLOptions {}
+
+/** @assoc * - "*\n\n+user " User */
+class UserGroup {}
+
+/** @navassoc "1\n\n+owner\r" - "*\n\n+key" Password */
+class User{}
+
+class Password{}
+
+ |
+
+ |
+Download the dot code
+Real Example (Catalina Classes)
+
+/*
+ * Interface and generalization relationships in Jakarta Catalina
+ */
+
+class HttpResponseBase
+ extends ResponseBase
+ implements HttpResponse, HttpServletResponse {}
+
+abstract class HttpResponseWrapper
+ extends ResponseWrapper
+ implements HttpResponse {}
+
+class HttpResponseFacade
+ extends ResponseFacade
+ implements HttpServletResponse {}
+
+abstract class ResponseWrapper implements Response {}
+abstract interface HttpResponse extends Response {}
+abstract class ResponseBase implements Response, ServletResponse {}
+abstract interface HttpServletResponse {}
+class ResponseFacade implements ServletResponse {}
+
+abstract interface ServletResponse {}
+abstract interface Response {}
+
+
+Download the dot code
+
+
+Diomidis Spinellis home page.
+
+$Id$
+(C) Copyright 2002 Diomidis D. Spinellis.
+May be freely uploaded by WWW viewers and similar programs.
+All other rights reserved.
+
+