mirror of https://github.com/dspinellis/UMLGraph
692 lines
19 KiB
HTML
692 lines
19 KiB
HTML
<?xml version="1.0" encoding="us-ascii"?>
|
|
<!DOCTYPE html
|
|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<!-- No not edit this page in the web directory. -->
|
|
<head>
|
|
<title>UMLGraph - Declarative Drawing of UML diagrams</title>
|
|
<meta name="AUTHOR" content="Diomidis Spinellis" />
|
|
</head>
|
|
<body>
|
|
<h1 align="right"><tt><font color="#ff0000">UMLGraph dds</font></tt></h1>
|
|
<h2>UMLGraph - Declarative Drawing of UML diagrams</h2>
|
|
<!-- Introduction {{{1 -->
|
|
UMLGraph allows the declarative specification and drawing of
|
|
a number of UML diagrams.
|
|
You specify your design using the Java syntax complemented by
|
|
<a href="http://java.sun.com/j2se/javadoc/"><em>javadoc</em></a>
|
|
tags.
|
|
Running the UmlGraph doclet on your specification will generate
|
|
a
|
|
<a href="http://www.research.att.com/sw/tools/graphviz/">Graphviz</a>
|
|
diagram specification that can be automatically processed to
|
|
create Postscript, GIF, SVG, JPEG, fig, or Framemaker drawings.
|
|
<p />
|
|
The following is an example of a specification and the resulting UML
|
|
diagram:
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
class Person {
|
|
String Name;
|
|
}
|
|
|
|
class Employee extends Person {}
|
|
|
|
class Client extends Person {}
|
|
</pre>
|
|
</td><td>
|
|
<img src="simple.gif" alt="Simple UML class diagram" />
|
|
</td></tr></table>
|
|
<p />
|
|
<b>See also</b>
|
|
<ul>
|
|
<li> <a name="Spi03e"> </a>Diomidis Spinellis.
|
|
<a href="../../pubs/jrnl/2003-IEEESW-umlgraph/html/article.html">On the declarative specification of models</a>.
|
|
<cite>IEEE Software</cite>, 20(2):94-96, March/April 2003.
|
|
</li>
|
|
<li> Diomidis Spinellis.
|
|
<a href="http://www.spinellis.gr/codereading">Code Reading: The Open Source Perspective</a>.
|
|
Addison Wesley, 2003.
|
|
</li>
|
|
<li> Adam Feuer's
|
|
<a href="http://www.zipcon.net/~adamf/software/PyUMLGraph/">PyUMLGraph</a>
|
|
extending the concept to Python programs.
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<h3>Operation</h3> <!-- {{{1 -->
|
|
To use UMLGraph you need to have
|
|
<a href="http://java.sun.com/j2se/javadoc/"><em>javadoc</em></a>
|
|
and
|
|
<a href="http://www.research.att.com/sw/tools/graphviz/">Graphviz</a>
|
|
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 <em>javadoc</em>
|
|
<code>@hidden</code> 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.
|
|
<p />
|
|
UMLGraph is implemented as a <em>javadoc</em> doclet (a program satisfying the
|
|
doclet API that specifies the content and format of the output
|
|
generated by the <em>javadoc</em> tool).
|
|
<em>Javadoc</em> is part of the Sun JDK, so a typical JDK installation will also
|
|
include <em>javadoc</em>.
|
|
Before running <em>javadoc</em> you need to place the <code>UmlGraph.jar</code>
|
|
file in a location accessible by <em>javadoc</em>
|
|
(e.g. the Java class path or the current directory).
|
|
You then run <em>javadoc</em> with arguments <code>-doclet UmlGraph</code>
|
|
<code>-docletpath /path/to/UmlGraph.jar</code>
|
|
and append at the end the file(s) that contain your diagram
|
|
specification.
|
|
You can of course use any of the <em>javadoc</em> general options;
|
|
<code>-private</code> is usually needed to avoid having to explicitly
|
|
specify public elements.
|
|
Example:
|
|
<pre>
|
|
javadoc -docletpath UmlGraph.jar -doclet UmlGraph -private Simple.java
|
|
</pre>
|
|
<em>javadoc</em> will create by default a file named <code>graph.dot</code>
|
|
in the current directory;
|
|
this is a text file that can be processed by the <em>Graphviz</em>
|
|
<em>dot</em> program to layout and draw the graph.
|
|
A command line like the following will convert the <code>graph.dot</code>
|
|
file into Postscript:
|
|
<pre>
|
|
dot -Tps -ograph.ps graph.dot
|
|
</pre>
|
|
Refer to the <em>dot</em> documentation for information on creating other file formats
|
|
or adjusting the UMLGraph output.
|
|
<h3>Modelling</h3> <!-- {{{1 -->
|
|
UMLGraph allows you to model
|
|
<ul>
|
|
<li>classes (specified as Java classes)
|
|
</li>
|
|
<li>attributes (specified as Java class fields)
|
|
</li>
|
|
<li>operations (specified as Java class methods)
|
|
</li>
|
|
<li>stereotypes (using the <code>@stereotype</code> <em>name</em> tag)
|
|
</li>
|
|
<li>tagged values (using the <code>@tagvalue</code> <em>name</em> <em>value</em> tag)
|
|
</li>
|
|
<li>implementation relationships (specified using the Java <code>implements</code> declaration)
|
|
</li>
|
|
<li>generalization relationships (specified using the Java <code>extends</code> declaration or (for multiple inheritance) the <em>javadoc</em> <code>@extends</code> tag)
|
|
</li>
|
|
<li>association relationships (specified using the <em>javadoc</em> <code>@assoc</code> tag)
|
|
</li>
|
|
<li>navigatable (directed) association relationships (specified using the <em>javadoc</em> <code>@navassoc</code> tag)
|
|
</li>
|
|
<li>aggregation relationships (specified using the <em>javadoc</em> <code>@has</code> tag)
|
|
</li>
|
|
<li>composition relationships (specified using the <em>javadoc</em> <code>@composed</code> tag)
|
|
</li>
|
|
<li>dependency relationships (specified using the <em>javadoc</em> <code>@depend</code> tag)
|
|
</li>
|
|
</ul>
|
|
All relationship tags appart from <code>@extends</code> take four arguments:
|
|
<ol>
|
|
<li> The source adornments (role, multiplicity, and visibility)
|
|
</li>
|
|
<li> The relationship name
|
|
</li>
|
|
<li> The target adornments (role, multiplicity, and visibility)
|
|
</li>
|
|
<li> The target class
|
|
</li>
|
|
</ol>
|
|
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:
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
class Tyre {}
|
|
class Engine {}
|
|
class Body {}
|
|
|
|
/**
|
|
* @composed 1 - 4 Tyre
|
|
* @composed 1 - 1 Engine
|
|
* @composed 1 - 1 Body
|
|
*/
|
|
class Car {}
|
|
</pre>
|
|
</td><td>
|
|
<img src="car.gif" alt="UML relationship diagram" />
|
|
</td></tr></table>
|
|
|
|
<h3>Program Options</h3> <!-- {{{1 -->
|
|
A number of command-line options contol the operation of UMLGraph:
|
|
<dl>
|
|
<dt>-output</dt><dd>Specify the output file name (default <code>graph.dot</code>).
|
|
</dd>
|
|
<dt>-qualify</dt><dd>Produce fully-qualified class names.
|
|
</dd>
|
|
<dt>-horizontal</dt><dd>Layout the graph in the horizontal direction.
|
|
</dd>
|
|
<dt>-attributes</dt><dd>Show class attributes (Java fields)
|
|
</dd>
|
|
<dt>-operations</dt><dd>Show class operations (Java methods)
|
|
</dd>
|
|
<dt>-visibility</dt><dd>Adorn class elements according to their
|
|
visibility (private, public, protected)
|
|
</dd>
|
|
<dt>-types</dt><dd>Add type information to attributes and operations
|
|
</dd>
|
|
<dt>-all</dt><dd>Same as
|
|
<code>-attributes</code>
|
|
<code>-operations</code>
|
|
<code>-visibility</code>
|
|
<code>-types</code>
|
|
</dd>
|
|
<dt>-nodefillcolor</dt><dd>Specify the color to use to fill the shapes.
|
|
</dd>
|
|
<dt>-nodefontname</dt><dd>Specify the font name to use inside nodes.
|
|
</dd>
|
|
<dt>-nodefontabstractname</dt><dd>Specify the font name to use
|
|
inside abstract class nodes.
|
|
</dd>
|
|
<dt>-nodefontsize</dt><dd>Specify the font size to use inside nodes.
|
|
</dd>
|
|
<dt>-nodefontcolor</dt><dd>Specify the font color to use inside nodes.
|
|
</dd>
|
|
<dt>-edgefontname</dt><dd>Specify the font name to use for edge labels.
|
|
</dd>
|
|
<dt>-edgefontsize</dt><dd>Specify the font size to use for edge labels.
|
|
</dd>
|
|
<dt>-edgefontcolor</dt><dd>Specify the font color to use for edge labels.
|
|
</dd>
|
|
<dt>-edgecolor</dt><dd>Specify the color for drawing edges.
|
|
</dd>
|
|
<dt>-bgcolor</dt><dd>Specify the graph's background color.
|
|
</dd>
|
|
<dt>-hide</dt><dd>Specify entities to hide from the graph.
|
|
Matching is done against the end of each entity's name.
|
|
For instance, "<code>-hide Widget</code>" would hide "<code>com.foo.widgets.Widget</code>" and
|
|
"<code>com.foo.widgets.BigWidget</code>".
|
|
</dd>
|
|
</dl>
|
|
<p />
|
|
All colors can be either a symbolic name (e.g. blue),
|
|
a tripple specifying hue-saturation-brightness as values 0-1
|
|
(e.g. ".13 0.9 1"),
|
|
or a tripple specifying red-green-blue values as hexadecimal
|
|
digits prefixed by a # (e.g. "#ff8020").
|
|
The symbolic color names are derived from the X Windows System;
|
|
you can find a complete list in the Graphviz documentation.
|
|
<p />
|
|
Font names are passed directly to the dot graph generation back-end.
|
|
In general the Postcript standard names Times, Helvetica, Courier, and
|
|
Symbol are safe to use.
|
|
<p />
|
|
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 <em>javadoc</em> <code>@opt</code> tags in front
|
|
of a class named <code>UMLOptions</code>, as in the following example:
|
|
<pre>
|
|
/**
|
|
* @opt horizontal
|
|
* @opt all
|
|
* @hidden
|
|
*/
|
|
class UMLOptions {}
|
|
</pre>
|
|
|
|
You can also change the UMLGraph operation on a per-class basis by
|
|
using <code>@opt</code> attributes on individual classes.
|
|
In this case the <code>@opt</code> specification temporarily overrides
|
|
the particular global setting for the class being processed.
|
|
|
|
<h3>Download</h3> <!-- {{{1 -->
|
|
UMLGraph is hereby made freely available as Open Source Software.
|
|
You can download it in source and compiled format from the following links:
|
|
<ul>
|
|
<li> <a href="UmlGraph.java">UmlGraph.java (source code)</a>
|
|
</li>
|
|
<li> <a href="UmlGraph.jar">UmlGraph.jar (compiled archive)</a>
|
|
</li>
|
|
<li> <a href="makefile">Makefile example</a> (GNU make)
|
|
</li>
|
|
<li> <a href="build.xml">build.xml</a> (to use with <a href="http://ant.apache.org">ant</a>)
|
|
</li>
|
|
</ul>
|
|
|
|
<h3>Version History</h3> <!-- {{{1 -->
|
|
<dl>
|
|
<dt>Version 1.24 2003/07/30</dt><dd>
|
|
Changes by Art Hampton (thanks):
|
|
<ul>
|
|
<li> Create the appropriate label for relationship tags when referring to
|
|
classes which were not parsed by javadoc.
|
|
</li>
|
|
<li> New "-hide <matchstring>" option, where <matchstring>
|
|
matches the end of the name of an entity.
|
|
Matched entities are removed from the graph.
|
|
A regular expression matching facility will be added when Java 1.4
|
|
becomes more widespread.
|
|
</li>
|
|
</ul>
|
|
|
|
</dd>
|
|
<dt>Version 1.23 2003/05/7</dt><dd>
|
|
Added <code>-output</code> command-line option, and an <em>ant</em>-based
|
|
build file.
|
|
Modified the dot output to avoid triggering a graphviz bug that made escape codes visible.
|
|
|
|
</dd>
|
|
<dt>Version 1.20 2003/04/25</dt><dd>
|
|
Fixes by Nick Efthymiou (thanks):
|
|
will generate SVG hyperlinks to Javadoc documentation,
|
|
better handling of abstract class fonts,
|
|
and correct listing of interfaces.
|
|
</dd>
|
|
<dt>Version 1.19 2002/09/20</dt><dd>
|
|
New options:
|
|
nodefontname,
|
|
nodefontabstractname,
|
|
nodefontsize,
|
|
nodefontcolor,
|
|
edgefontname,
|
|
edgefontsize,
|
|
edgefontcolor,
|
|
edgecolor,
|
|
bgcolor.
|
|
|
|
</dd>
|
|
<dt>Version 1.18 2002/08/26</dt><dd>
|
|
<ul>
|
|
<li> Can now specify class-local options.
|
|
</li>
|
|
<li> Support for the @tagvalue tag.
|
|
</li>
|
|
<li> Support for the @stereotype tag.
|
|
</li>
|
|
<li> Added nodefillcolor option.
|
|
</li>
|
|
</ul>
|
|
|
|
</dd>
|
|
<dt>Version 1.15 2002/07/26</dt><dd>First public release.
|
|
</dd>
|
|
</dl>
|
|
|
|
<h3>More Examples</h3> <!-- {{{1 -->
|
|
<h3>Generalisation Relationships</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/*
|
|
* 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 {}
|
|
</pre>
|
|
</td><td>
|
|
<img src="general.gif" alt="UML diagram showing generalization relationships" />
|
|
</td></tr></table>
|
|
Download the <a href="general.java">declarative specification</a>, the generated <a href="general.dot">dot code</a>.
|
|
<h3>Advanced Relationships</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/*
|
|
* 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 - <friend> - SetTopController */
|
|
class ChannelIterator {}
|
|
|
|
interface URLStreamHandler {
|
|
void OpenConnection();
|
|
void parseURL();
|
|
void setURL();
|
|
void toExternalForm();
|
|
}
|
|
</pre>
|
|
</td><td>
|
|
<img src="advrel.gif" alt="UML diagram showing dependency and navigation relationships" />
|
|
</td></tr></table>
|
|
Download the <a href="advrel.java">declarative specification</a>, the generated <a href="advrel.dot">dot code</a>.
|
|
<h3>Schema</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/*
|
|
* 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;
|
|
}
|
|
</pre>
|
|
</td><td>
|
|
<img src="schema.gif" alt="UML diagram showing a database scheme model" />
|
|
</td></tr></table>
|
|
Download the <a href="schema.java">declarative specification</a>, the generated <a href="schema.dot">dot code</a>.
|
|
<h3>Element Visibility</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/**
|
|
* 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() {}
|
|
}
|
|
</pre>
|
|
</td><td>
|
|
<img src="vis.gif" alt="UML diagram showing attribute and operation visility" />
|
|
</td></tr></table>
|
|
Download the <a href="vis.java">declarative specification</a>, the generated <a href="vis.dot">dot code</a>.
|
|
<h3>Association Types</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/**
|
|
* 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{}
|
|
</pre>
|
|
</td><td>
|
|
<img src="assoc.gif" alt="UML diagram showing association types" />
|
|
</td></tr></table>
|
|
Download the <a href="assoc.java">declarative specification</a>, the generated <a href="assoc.dot">dot code</a>.
|
|
<h3>Real Example (Catalina Classes)</h3> <!-- {{{2 -->
|
|
<pre>
|
|
/*
|
|
* 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 {}
|
|
</pre>
|
|
<img src="catalina.gif" alt="UML diagram of representative Cataline classes" /><br />
|
|
Download the <a href="catalina.java">declarative specification</a>, the generated <a href="catalina.dot">dot code</a>.
|
|
<h3>Class Stereotypes and Tagged Values</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/*
|
|
* Class stereotypes and tagged values
|
|
* UML User Guide p. 439
|
|
*/
|
|
|
|
/**
|
|
* @opt attributes
|
|
* @opt operations
|
|
* @opt types
|
|
* @hidden
|
|
*/
|
|
class UMLOptions {}
|
|
|
|
/** @hidden */
|
|
class Action {}
|
|
|
|
/**
|
|
* @stereotype container
|
|
* @tagvalue version 3.2
|
|
*/
|
|
class ActionQueue {
|
|
void add(Action a) {};
|
|
/** @tagvalue version 1.0 */
|
|
void add(Action a, int n) {};
|
|
void remove(int n) {};
|
|
/** @stereotype query */
|
|
int length() {};
|
|
/** @stereotype "helper functions" */
|
|
void reorder() {};
|
|
}
|
|
</pre>
|
|
</td><td>
|
|
<img src="classadd.gif" alt="UML diagram of class stereotypes and tagged values" />
|
|
</td></tr></table>
|
|
Download the <a href="classadd.java">declarative specification</a>, the generated <a href="classadd.dot">dot code</a>.
|
|
<h3>Colors, Global and Local Options</h3> <!-- {{{2 -->
|
|
<table>
|
|
<tr><td>
|
|
<pre>
|
|
/**
|
|
* @opt edgecolor "yellow"
|
|
* @opt nodefontname "Times"
|
|
* @opt bgcolor ".7 .9 1"
|
|
* @opt nodefillcolor "#a0a0a0"
|
|
* @opt nodefontsize 14
|
|
* @hidden
|
|
*/
|
|
class UMLOptions{}
|
|
|
|
/**
|
|
* @opt nodefontname "Helvetica-Bold"
|
|
* @opt nodefontcolor "white"
|
|
* @composed - - - Red
|
|
* @composed - - - Green
|
|
* @composed - - - Blue
|
|
* @opt attributes
|
|
* @opt visibility
|
|
* @opt types
|
|
*/
|
|
class Pixel {
|
|
private int x, y;
|
|
public void setColor(ColorValue v) {}
|
|
}
|
|
|
|
/** @opt nodefillcolor red */
|
|
class Red {}
|
|
|
|
/** @opt nodefillcolor green */
|
|
class Green {}
|
|
|
|
/** @opt nodefillcolor blue */
|
|
class Blue {}
|
|
|
|
/** @hidden */
|
|
class ColorValue{}
|
|
</pre>
|
|
</td><td>
|
|
<img src="color.gif" alt="UML diagram demonstrating the use of colors" />
|
|
</td></tr></table>
|
|
Download the <a href="color.java">declarative specification</a>, the generated <a href="color.dot">dot code</a>.
|
|
<!-- End matter {{{1 -->
|
|
<p />
|
|
<a href="../../">Diomidis Spinellis home page</a>
|
|
<hr />
|
|
<table>
|
|
<tr><td>
|
|
<a href="http://validator.w3.org/check/referer"><img src="../../valid-xhtml10.png" border="0" alt="Valid XHTML 1.0!" height="31" width="88" /></a>
|
|
<a href="http://www.w3.org/WAI/WCAG1AAA-Conformance" title="Explanation of Level Triple-A Conformance"><img border="0" height="32" width="88" src="../../wcag1AAA.gif" alt="Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0" /></a>
|
|
</td><td>
|
|
<font size="-2">
|
|
(C) Copyright 2002-2003 D. Spinellis.
|
|
May be freely uploaded by WWW viewers and similar programs.
|
|
All other rights reserved.
|
|
<br />
|
|
Last modified: $Date$
|
|
</font>
|
|
</td></tr>
|
|
</table>
|
|
</body>
|
|
</html>
|