mirror of https://github.com/dspinellis/UMLGraph
Merge branch 'master' of github.com:dspinellis/UMLGraph
This commit is contained in:
commit
09576db5ae
58
README.md
58
README.md
|
|
@ -2,15 +2,14 @@
|
|||
|
||||
[](https://travis-ci.org/dspinellis/UMLGraph)
|
||||
|
||||
*UMLGraph* allows the declarative specification and drawing of
|
||||
UML diagrams.
|
||||
*UMLGraph* allows the declarative specification and drawing of UML diagrams.
|
||||
You can browse the system's documentation
|
||||
through [this link](http://www.spinellis.gr/umlgraph/doc/index.html),
|
||||
or print it through [this link](http://www.spinellis.gr/umlgraph/doc/indexw.html).
|
||||
|
||||
To install the elements required to run *UMLGraph*, simply copy
|
||||
the contents of the *lib* directory to a location consistent with
|
||||
your installation's conventions (for example to `/usr/local/lib`).
|
||||
In order to run *UMLGraph*, you need to have [GraphViz](https://www.graphviz.org/)
|
||||
installed in your system path. On most Linux distributions, this can be easily
|
||||
installed using the regular package manager.
|
||||
|
||||
To compile the Java doclet from the source code run *ant* on the
|
||||
*build.xml* file.
|
||||
|
|
@ -19,3 +18,52 @@ If you change the source code, you can run regression tests by
|
|||
executing *ant test*.
|
||||
|
||||
Visit the project's [home page](http://www.spinellis.gr/umlgraph) for more information.
|
||||
|
||||
## Compatibility
|
||||
|
||||
Currently, only Java 8 is supported by the Doclet.
|
||||
|
||||
In Java 9 the JavaDoc Doclet API changed substantially, and the doclet therefore
|
||||
needs to be largely rewritten.
|
||||
|
||||
Sorry, this has not happened yet - volunteers for this task are welcome.
|
||||
|
||||
## Development versions
|
||||
|
||||
In order to use development versions, you can use [JitPack](https://jitpack.io/#dspinellis/UMLGraph/master-SNAPSHOT).
|
||||
Note that as this is compiled on demand, you may sometimes see a "Read timed out" when the package is recompiled,
|
||||
and it should be fine a few seconds later. And because the master branch can change any time, you may want to use
|
||||
a versioned snapshot instead (see the Jitpack documentation for details).
|
||||
|
||||
**Gradle**:
|
||||
```
|
||||
repositories { maven { url 'https://jitpack.io' } }
|
||||
configurations { umlgraph }
|
||||
dependencies { umlgraph 'com.github.dspinellis:UMLGraph:master-SNAPSHOT' }
|
||||
javadoc {
|
||||
doclet = 'org.umlgraph.doclet.UmlGraphDoc'
|
||||
docletpath = configurations.umlgraph.files.asType(List)
|
||||
tags("hidden:X", "opt:X", "has:X", "navhas:X", "assoc:X", "navassoc:X",
|
||||
"composed:X", "navcomposed:X", "stereotype:X", "depend:X")
|
||||
}
|
||||
```
|
||||
|
||||
**Maven**:
|
||||
```
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
...
|
||||
<dependency>
|
||||
<groupId>com.github.dspinellis</groupId>
|
||||
<artifactId>UMLGraph</artifactId>
|
||||
<version>master-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
**Jar download**: <https://jitpack.io/com/github/dspinellis/UMLGraph/master-SNAPSHOT/UMLGraph-master-SNAPSHOT.jar>
|
||||
|
||||
|
|
|
|||
2
TODO
2
TODO
|
|
@ -1,5 +1,3 @@
|
|||
When UMLGraph 2.29 comes out use <i></i> for italic fonts?
|
||||
|
||||
http://stackoverflow.com/questions/8609546/umlgraph-not-automatic-integrated-in-javadoc
|
||||
|
||||
Support for all UML diagrams: state, use-case, etc.
|
||||
|
|
|
|||
52
build.xml
52
build.xml
|
|
@ -64,6 +64,14 @@
|
|||
<!-- import environment variables -->
|
||||
<property environment="env"/>
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="${build}"/>
|
||||
<delete dir="${lib}"/>
|
||||
<delete dir="testdata/dot-out"/>
|
||||
<delete dir="${javadoc}"/>
|
||||
<delete dir="${dist}/lib"/>
|
||||
</target>
|
||||
|
||||
<target name="init">
|
||||
<!-- Create the time stamp -->
|
||||
<tstamp/>
|
||||
|
|
@ -119,36 +127,44 @@ class Version { public static String VERSION = "${VERSION}";}
|
|||
|
||||
<target name="test" depends="compile,testcompile"
|
||||
description="run the regression tests" >
|
||||
<java classname="org.umlgraph.test.BasicTest" fork="true">
|
||||
<classpath>
|
||||
<pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
|
||||
<pathelement location="${build}"/>
|
||||
<pathelement location="${lib}/UmlGraph.jar"/>
|
||||
</classpath>
|
||||
</java>
|
||||
<java classname="org.umlgraph.test.UmlDocTest" fork="true">
|
||||
<classpath>
|
||||
<pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
|
||||
<pathelement location="${build}"/>
|
||||
<pathelement location="${lib}/UmlGraph.jar"/>
|
||||
</classpath>
|
||||
</java>
|
||||
<!-- postpone failures, so we get to see the pngs -->
|
||||
<java classname="org.umlgraph.test.BasicTest" fork="true" resultproperty="BasicTest.exit">
|
||||
<classpath>
|
||||
<pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
|
||||
<pathelement location="${build}"/>
|
||||
<pathelement location="${lib}/UmlGraph.jar"/>
|
||||
</classpath>
|
||||
</java>
|
||||
<java classname="org.umlgraph.test.UmlDocTest" fork="true" resultproperty="UmlDocTest.exit">
|
||||
<classpath>
|
||||
<pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
|
||||
<pathelement location="${build}"/>
|
||||
<pathelement location="${lib}/UmlGraph.jar"/>
|
||||
</classpath>
|
||||
</java>
|
||||
<apply executable="dot" dest="${testout}" parallel="false">
|
||||
<arg value="-Tpng"/>
|
||||
<arg value="-o"/>
|
||||
<targetfile/>
|
||||
<srcfile/>
|
||||
<fileset dir="${testout}" includes="*.dot"/>
|
||||
<mapper type="glob" from="*.dot" to="*.png"/>
|
||||
<fileset dir="${testout}" includes="*.dot"/>
|
||||
<mapper type="glob" from="*.dot" to="*.png"/>
|
||||
</apply>
|
||||
<apply executable="dot" dest="${testref}" parallel="false">
|
||||
<arg value="-Tpng"/>
|
||||
<arg value="-o"/>
|
||||
<targetfile/>
|
||||
<srcfile/>
|
||||
<fileset dir="${testref}" includes="*.dot"/>
|
||||
<mapper type="glob" from="*.dot" to="*.png"/>
|
||||
<fileset dir="${testref}" includes="*.dot"/>
|
||||
<mapper type="glob" from="*.dot" to="*.png"/>
|
||||
</apply>
|
||||
<!-- postponed failure, so we get to see the pngs -->
|
||||
<fail message="BasicTest failed">
|
||||
<condition><not><equals arg1="0" arg2="${BasicTest.exit}"/></not></condition>
|
||||
</fail>
|
||||
<fail message="UmlDocTest failed">
|
||||
<condition><not><equals arg1="0" arg2="${UmlDocTest.exit}"/></not></condition>
|
||||
</fail>
|
||||
</target>
|
||||
|
||||
<target name="javadocs" depends="compile">
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class SetTopController implements URLStreamHandler {
|
|||
void connect() {}
|
||||
}
|
||||
|
||||
/** @depend - <friend> - SetTopController */
|
||||
/** @depend - <friend> - SetTopController */
|
||||
class ChannelIterator {}
|
||||
|
||||
interface URLStreamHandler {
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class UMLOptions {}
|
|||
|
||||
class Person {
|
||||
House[] houses;
|
||||
List<Dog> dogs;
|
||||
List<Dog> dogs;
|
||||
|
||||
public Room getFavouriteRoom(House house) {}
|
||||
}
|
||||
|
|
@ -29,7 +29,7 @@ class Person {
|
|||
* @opt inferreltype composed
|
||||
*/
|
||||
class House {
|
||||
Map<String, Room> nameRoomMap;
|
||||
Map<String, Room> nameRoomMap;
|
||||
}
|
||||
|
||||
class Room {}
|
||||
|
|
@ -37,7 +37,6 @@ class Room {}
|
|||
class Dog {
|
||||
Person owner;
|
||||
}
|
||||
|
||||
</fmtcode>
|
||||
</td><td>
|
||||
<img src="infer.png" alt="UML diagram with relationship inference" />
|
||||
|
|
|
|||
|
|
@ -93,18 +93,18 @@ clean:
|
|||
|
||||
build/%.dot : %.java
|
||||
mkdir -p $(dir $@)
|
||||
$(jd) $(jd_flags) $(detailed_flags) -output $@ $<
|
||||
$(jd) $(jd_flags) $(detailed_flags) -output $@ $<
|
||||
|
||||
build/%-small.dot : %.java
|
||||
mkdir -p $(dir $@)
|
||||
$(jd) $(jd_flags) -output $@ $<
|
||||
$(jd) $(jd_flags) -output $@ $<
|
||||
|
||||
%.png : %.dot
|
||||
dot -Nheight=0.2 -Elabelfontcolor=DarkSlateBlue -Elabelfontsize=8 -Tpng -o $@ $<
|
||||
dot -Nheight=0.2 -Elabelfontcolor=DarkSlateBlue -Elabelfontsize=8 -Tpng -o $@ $<
|
||||
|
||||
build/%.png : %.fig
|
||||
mkdir -p $(dir $@)
|
||||
fig2dev -L png -S 4 $< $@
|
||||
fig2dev -L png -S 4 $< $@
|
||||
|
||||
dot: $(dot_files)
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ png: $(png_files)
|
|||
|
||||
build/%.png : %.png
|
||||
mkdir -p $(dir $@)
|
||||
cp $< $@
|
||||
cp $< $@
|
||||
|
||||
# Example usage:
|
||||
# make debug-java_files
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ async(); message(S,W,"liftReceiver"); sync();
|
|||
active(S);
|
||||
message(W,S,"setDialTone()");
|
||||
async(); message(S,W,"*dialDigit(d)"); sync();
|
||||
lconstraint(W,"{dialing.executionTime < 30s}");
|
||||
lconstraint(W,"{dialing.executionTime < 30s}");
|
||||
active(W);
|
||||
message(W,W,"routeCalls(s,n)");
|
||||
inactive(W);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ this works well with <code>-qualify -postfixpackage</code> (and <code>-!qualifyG
|
|||
To get the old <code>-qualify</code> behavior, you need to add <code>-qualifyGenerics</code>,
|
||||
the default is off, and it will not inherit from <code>-qualify</code>.</li>
|
||||
<li>Better handling of complex names with generics and inner classes such as <code>pkg.Outer<T>.Inner</code>.</li>
|
||||
<li>Use <i> tags for italic, because the old font naming approach does not work with SVG anymore.
|
||||
Replace <code>-nodefontabstractname</code> and <code>-nodefontclassabstractname</code>
|
||||
with a simple flag <code>-nodefontabstractitalic</code> instead.</li>
|
||||
<li>Added <code>-hideprivateinner</code> to hide all private inner classes.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -20,7 +20,6 @@
|
|||
package org.umlgraph.doclet;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
@ -32,7 +31,7 @@ import java.util.Map;
|
|||
class ClassInfo {
|
||||
private static int classNumber;
|
||||
/** Alias name for the class */
|
||||
String name;
|
||||
final String name;
|
||||
/** True if the class class node has been printed */
|
||||
boolean nodePrinted;
|
||||
/** True if the class class node is hidden */
|
||||
|
|
@ -44,10 +43,9 @@ class ClassInfo {
|
|||
*/
|
||||
Map<String, RelationPattern> relatedClasses = new HashMap<String, RelationPattern>();
|
||||
|
||||
ClassInfo(boolean p, boolean h) {
|
||||
nodePrinted = p;
|
||||
ClassInfo(boolean h) {
|
||||
hidden = h;
|
||||
name = "c" + (new Integer(classNumber)).toString();
|
||||
name = "c" + classNumber;
|
||||
classNumber++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,9 +67,9 @@ public class ContextMatcher implements ClassMatcher {
|
|||
this.root = root;
|
||||
this.keepParentHide = keepParentHide;
|
||||
opt = (Options) options.clone();
|
||||
opt.setOption(new String[] { "-!hide" });
|
||||
opt.setOption(new String[] { "-!attributes" });
|
||||
opt.setOption(new String[] { "-!operations" });
|
||||
opt.setOption(new String[] { "!hide" });
|
||||
opt.setOption(new String[] { "!attributes" });
|
||||
opt.setOption(new String[] { "!operations" });
|
||||
this.cg = new ClassGraphHack(root, opt);
|
||||
|
||||
setContextCenter(pattern);
|
||||
|
|
@ -97,26 +97,23 @@ public class ContextMatcher implements ClassMatcher {
|
|||
|
||||
/**
|
||||
* Adds the specified class to the internal class graph along with its
|
||||
* relations and depencies, eventually inferring them, according to the
|
||||
* relations and dependencies, eventually inferring them, according to the
|
||||
* Options specified for this matcher
|
||||
* @param cd
|
||||
*/
|
||||
private void addToGraph(ClassDoc cd) {
|
||||
// avoid adding twice the same class, but don't rely on cg.getClassInfo
|
||||
// since there
|
||||
// are other ways to add a classInfor than printing the class
|
||||
// since there are other ways to add a classInfor than printing the class
|
||||
if (visited.contains(cd.toString()))
|
||||
return;
|
||||
|
||||
visited.add(cd.toString());
|
||||
cg.printClass(cd, false);
|
||||
cg.printRelations(cd);
|
||||
if (opt.inferRelationships) {
|
||||
if (opt.inferRelationships)
|
||||
cg.printInferredRelations(cd);
|
||||
}
|
||||
if (opt.inferDependencies) {
|
||||
if (opt.inferDependencies)
|
||||
cg.printInferredDependencies(cd);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -144,10 +141,8 @@ public class ContextMatcher implements ClassMatcher {
|
|||
return true;
|
||||
|
||||
for (ClassDoc mcd : matched) {
|
||||
String mcName = mcd.toString();
|
||||
ClassInfo ciMatched = cg.getClassInfo(mcName);
|
||||
RelationPattern rp = ciMatched.getRelation(name);
|
||||
if (ciMatched != null && rp != null && opt.contextRelationPattern.matchesOne(rp))
|
||||
RelationPattern rp = cg.getClassInfo(mcd, true).getRelation(name);
|
||||
if (rp != null && opt.contextRelationPattern.matchesOne(rp))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public class ContextView implements OptionProvider {
|
|||
private Options hideOptions;
|
||||
private Options centerOptions;
|
||||
private Options packageOptions;
|
||||
private static final String[] HIDE_OPTIONS = new String[] { "-hide" };
|
||||
private static final String[] HIDE_OPTIONS = new String[] { "hide" };
|
||||
|
||||
public ContextView(String outputFolder, ClassDoc cd, RootDoc root, Options parent)
|
||||
throws IOException {
|
||||
|
|
@ -42,7 +42,7 @@ public class ContextView implements OptionProvider {
|
|||
this.packageOptions.showQualified = false;
|
||||
|
||||
this.myGlobalOptions = parent.getGlobalOptions();
|
||||
this.myGlobalOptions.setOption(new String[] { "-output", outputPath });
|
||||
this.myGlobalOptions.setOption(new String[] { "output", outputPath });
|
||||
this.myGlobalOptions.setOption(HIDE_OPTIONS);
|
||||
|
||||
this.hideOptions = parent.getGlobalOptions();
|
||||
|
|
@ -52,7 +52,7 @@ public class ContextView implements OptionProvider {
|
|||
this.centerOptions.nodeFillColor = "lemonChiffon";
|
||||
this.centerOptions.showQualified = false;
|
||||
|
||||
this.matcher = new ContextMatcher(root, Pattern.compile(cd.qualifiedName()),
|
||||
this.matcher = new ContextMatcher(root, Pattern.compile(Pattern.quote(cd.toString())),
|
||||
myGlobalOptions, true);
|
||||
|
||||
}
|
||||
|
|
@ -61,8 +61,8 @@ public class ContextView implements OptionProvider {
|
|||
this.cd = contextCenter;
|
||||
String outputPath = cd.containingPackage().name().replace('.', '/') + "/" + cd.name()
|
||||
+ ".dot";
|
||||
this.myGlobalOptions.setOption(new String[] { "-output", outputPath });
|
||||
matcher.setContextCenter(Pattern.compile(cd.toString()));
|
||||
this.myGlobalOptions.setOption(new String[] { "output", outputPath });
|
||||
matcher.setContextCenter(Pattern.compile(Pattern.quote(cd.toString())));
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
|
|
@ -91,7 +91,7 @@ public class ContextView implements OptionProvider {
|
|||
}
|
||||
|
||||
public Options getOptionsFor(String name) {
|
||||
Options opt;
|
||||
Options opt;
|
||||
if (!matcher.matches(name))
|
||||
opt = hideOptions;
|
||||
else if (name.equals(cd.name()))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
package org.umlgraph.doclet;
|
||||
|
||||
/**
|
||||
* Class to represent a font for graphviz.
|
||||
* <p>
|
||||
* This is a fairly complicated model, because it is rather an API into graphviz
|
||||
* formatting strings rather than a standalone thing. <p Some fonts (edge, node,
|
||||
* abstract) are set on the top level elements, whereas others (class name, tag,
|
||||
* package) are inserted as {@code <font>} tags, and these can be omitted if not
|
||||
* set. Inheritance of properties then happens in graphviz.
|
||||
*
|
||||
* @author Erich Schubert
|
||||
*/
|
||||
public enum Font {
|
||||
/** Edge label font */
|
||||
EDGE, //
|
||||
/** Node basic */
|
||||
NODE, //
|
||||
/** Normal operation font */
|
||||
NORMAL, //
|
||||
/** Abstract operation font */
|
||||
ABSTRACT, //
|
||||
/** Class name. Inherits from null. */
|
||||
CLASS, //
|
||||
/** Class name of abstract classes (usually italic) */
|
||||
CLASS_ABSTRACT, //
|
||||
/** Package names Inherits from null. */
|
||||
PACKAGE, //
|
||||
/** Tags Inherits from null. */
|
||||
TAG;
|
||||
|
||||
public static final String DEFAULT_FONT;
|
||||
|
||||
// Static initialization of further values.
|
||||
static {
|
||||
// use an appropriate font depending on the current operating system
|
||||
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
|
||||
DEFAULT_FONT = "Arial";
|
||||
} else {
|
||||
DEFAULT_FONT = "Helvetica"; // TODO: can we use just "sans"?
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps the text with the appropriate font according to the specified font type
|
||||
*
|
||||
* @param opt Options
|
||||
* @param text Text to wrap
|
||||
* @return Wrapped text
|
||||
*/
|
||||
public String wrap(Options opt, String text) {
|
||||
if (text.isEmpty() || this == NORMAL)
|
||||
return text;
|
||||
String face = null;
|
||||
double size = -1;
|
||||
boolean italic = false;
|
||||
switch (this) {
|
||||
case EDGE:
|
||||
case NODE:
|
||||
// Not used with the wrap function.
|
||||
throw new UnsupportedOperationException();
|
||||
case ABSTRACT:
|
||||
italic = opt.nodeFontAbstractItalic;
|
||||
case NORMAL:
|
||||
break;
|
||||
case CLASS_ABSTRACT:
|
||||
italic = opt.nodeFontAbstractItalic;
|
||||
case CLASS:
|
||||
face = opt.nodeFontClassName;
|
||||
size = opt.nodeFontClassSize;
|
||||
break;
|
||||
case PACKAGE:
|
||||
face = opt.nodeFontPackageName;
|
||||
size = opt.nodeFontPackageSize;
|
||||
break;
|
||||
case TAG:
|
||||
face = opt.nodeFontTagName;
|
||||
size = opt.nodeFontTagSize;
|
||||
break;
|
||||
}
|
||||
if (face == null && size < 0 && !italic)
|
||||
return text;
|
||||
StringBuilder buf = new StringBuilder(text.length() + 100);
|
||||
if (face != null || size > 0) {
|
||||
buf.append("<font");
|
||||
if (face != null)
|
||||
buf.append(" face=\"").append(face).append('"');
|
||||
if (size > 0)
|
||||
buf.append(" point-size=\"").append(size).append('"');
|
||||
buf.append('>');
|
||||
}
|
||||
if (italic)
|
||||
buf.append("<i>");
|
||||
buf.append(text);
|
||||
if (italic)
|
||||
buf.append("</i>");
|
||||
if (face != null || size > 0)
|
||||
buf.append("</font>");
|
||||
return buf.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -26,23 +26,17 @@ public class InterfaceMatcher implements ClassMatcher {
|
|||
|
||||
// for each interface, recurse, since classes and interfaces
|
||||
// are treated the same in the doclet API
|
||||
for (ClassDoc iface : cd.interfaces()) {
|
||||
for (ClassDoc iface : cd.interfaces())
|
||||
if(matches(iface))
|
||||
return true;
|
||||
}
|
||||
|
||||
// recurse on supeclass, if available
|
||||
if(cd.superclass() != null)
|
||||
return matches(cd.superclass());
|
||||
|
||||
return false;
|
||||
return cd.superclass() == null ? false : matches(cd.superclass());
|
||||
}
|
||||
|
||||
public boolean matches(String name) {
|
||||
ClassDoc cd = root.classNamed(name);
|
||||
if(cd == null)
|
||||
return false;
|
||||
return matches(cd);
|
||||
return cd == null ? false : matches(cd);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,69 +48,54 @@ import com.sun.javadoc.Tag;
|
|||
* @author <a href="http://www.spinellis.gr">Diomidis Spinellis</a>
|
||||
*/
|
||||
public class Options implements Cloneable, OptionProvider {
|
||||
// dot's font platform dependence workaround
|
||||
private static String defaultFont;
|
||||
private static String defaultItalicFont;
|
||||
// reused often, especially in UmlGraphDoc, worth creating just once and reusing
|
||||
private static final Pattern allPattern = Pattern.compile(".*");
|
||||
protected static final String DEFAULT_EXTERNAL_APIDOC = "http://docs.oracle.com/javase/7/docs/api/";
|
||||
|
||||
static {
|
||||
// use an appropriate font depending on the current operating system
|
||||
// (on windows graphviz is unable to locate "Helvetica-Oblique"
|
||||
if(System.getProperty("os.name").toLowerCase().contains("windows")) {
|
||||
defaultFont = "arial";
|
||||
defaultItalicFont = "arial italic";
|
||||
} else {
|
||||
defaultFont = "Helvetica";
|
||||
defaultItalicFont = "Helvetica-Oblique";
|
||||
}
|
||||
}
|
||||
|
||||
// instance fields
|
||||
List<Pattern> hidePatterns;
|
||||
List<Pattern> includePatterns;
|
||||
boolean showQualified;
|
||||
boolean showQualifiedGenerics;
|
||||
boolean showAttributes;
|
||||
boolean showEnumerations;
|
||||
boolean showEnumConstants;
|
||||
boolean showOperations;
|
||||
boolean showConstructors;
|
||||
boolean showVisibility;
|
||||
List<Pattern> hidePatterns = new ArrayList<Pattern>();
|
||||
List<Pattern> includePatterns = new ArrayList<Pattern>();
|
||||
boolean showQualified = false;
|
||||
boolean showQualifiedGenerics = false;
|
||||
boolean hideGenerics = false;
|
||||
boolean showAttributes = false;
|
||||
boolean showEnumerations = false;
|
||||
boolean showEnumConstants = false;
|
||||
boolean showOperations = false;
|
||||
boolean showConstructors = false;
|
||||
boolean showVisibility = false;
|
||||
boolean horizontal;
|
||||
boolean showType;
|
||||
boolean showComment;
|
||||
boolean autoSize;
|
||||
String edgeFontName;
|
||||
String edgeFontColor;
|
||||
String edgeColor;
|
||||
double edgeFontSize;
|
||||
String nodeFontName;
|
||||
String nodeFontAbstractName;
|
||||
String nodeFontColor;
|
||||
double nodeFontSize;
|
||||
String nodeFillColor;
|
||||
double nodeFontClassSize;
|
||||
String nodeFontClassName;
|
||||
String nodeFontClassAbstractName;
|
||||
double nodeFontTagSize;
|
||||
String nodeFontTagName;
|
||||
double nodeFontPackageSize;
|
||||
String nodeFontPackageName;
|
||||
Shape shape;
|
||||
String bgColor;
|
||||
public String outputFileName;
|
||||
String outputEncoding;
|
||||
Map<Pattern, String> apiDocMap;
|
||||
String apiDocRoot;
|
||||
boolean postfixPackage;
|
||||
boolean useGuillemot;
|
||||
boolean findViews;
|
||||
String viewName;
|
||||
double nodeSep;
|
||||
double rankSep;
|
||||
public String outputDirectory;
|
||||
boolean showType = false;
|
||||
boolean showComment = false;
|
||||
boolean autoSize = true;
|
||||
String edgeFontName = Font.DEFAULT_FONT;
|
||||
String edgeFontColor = "black";
|
||||
String edgeColor = "black";
|
||||
double edgeFontSize = 10;
|
||||
String nodeFontName = Font.DEFAULT_FONT;
|
||||
boolean nodeFontAbstractItalic = true;
|
||||
String nodeFontColor = "black";
|
||||
double nodeFontSize = 10;
|
||||
String nodeFillColor = null;
|
||||
double nodeFontClassSize = -1;
|
||||
String nodeFontClassName = null;
|
||||
double nodeFontTagSize = -1;
|
||||
String nodeFontTagName = null;
|
||||
double nodeFontPackageSize = -1;
|
||||
String nodeFontPackageName = null;
|
||||
Shape shape = Shape.CLASS;
|
||||
String bgColor = null;
|
||||
public String outputFileName = "graph.dot";
|
||||
String outputEncoding = "ISO-8859-1"; // TODO: default to UTF-8 now?
|
||||
Map<Pattern, String> apiDocMap = new HashMap<Pattern, String>();
|
||||
String apiDocRoot = null;
|
||||
boolean postfixPackage = false;
|
||||
boolean useGuillemot = true;
|
||||
boolean findViews = false;
|
||||
String viewName = null;
|
||||
double nodeSep = 0.25;
|
||||
double rankSep = 0.5;
|
||||
public String outputDirectory = null;
|
||||
/*
|
||||
* Numeric values are preferable to symbolic here.
|
||||
* Symbolic reportedly fail on MacOSX, and also are
|
||||
|
|
@ -120,81 +105,28 @@ public class Options implements Cloneable, OptionProvider {
|
|||
String guilOpen = "«"; // « \u00ab
|
||||
/** Guillemot right (close) */
|
||||
String guilClose = "»"; // » \u00bb
|
||||
boolean inferRelationships;
|
||||
boolean inferDependencies;
|
||||
boolean collapsibleDiagrams;
|
||||
RelationPattern contextRelationPattern;
|
||||
boolean useImports;
|
||||
Visibility inferDependencyVisibility;
|
||||
boolean inferDepInPackage;
|
||||
RelationType inferRelationshipType;
|
||||
private List<Pattern> collPackages;
|
||||
boolean compact;
|
||||
boolean inferRelationships = false;
|
||||
boolean inferDependencies = false;
|
||||
boolean collapsibleDiagrams = false;
|
||||
RelationPattern contextRelationPattern = new RelationPattern(RelationDirection.BOTH);
|
||||
boolean useImports = false;
|
||||
Visibility inferDependencyVisibility = Visibility.PRIVATE;
|
||||
boolean inferDepInPackage = false;
|
||||
RelationType inferRelationshipType = RelationType.NAVASSOC;
|
||||
private List<Pattern> collPackages = new ArrayList<Pattern>();
|
||||
boolean compact = false;
|
||||
boolean hidePrivateInner = false;
|
||||
// internal option, used by UMLDoc to generate relative links between classes
|
||||
boolean relativeLinksForSourcePackages;
|
||||
boolean relativeLinksForSourcePackages = false;
|
||||
// internal option, used by UMLDoc to force strict matching on the class names
|
||||
// and avoid problems with packages in the template declaration making UmlGraph hide
|
||||
// classes outside of them (for example, class gr.spinellis.Foo<T extends java.io.Serializable>
|
||||
// would have been hidden by the hide pattern "java.*"
|
||||
// TODO: consider making this standard behaviour
|
||||
boolean strictMatching;
|
||||
String dotExecutable;
|
||||
boolean strictMatching = false;
|
||||
String dotExecutable = "dot";
|
||||
|
||||
Options() {
|
||||
showQualified = false;
|
||||
showQualifiedGenerics = false;
|
||||
showAttributes = false;
|
||||
showEnumConstants = false;
|
||||
showOperations = false;
|
||||
showVisibility = false;
|
||||
showEnumerations = false;
|
||||
showConstructors = false;
|
||||
showType = false;
|
||||
autoSize = true;
|
||||
showComment = false;
|
||||
edgeFontName = defaultFont;
|
||||
edgeFontColor = "black";
|
||||
edgeColor = "black";
|
||||
edgeFontSize = 10;
|
||||
nodeFontColor = "black";
|
||||
nodeFontName = defaultFont;
|
||||
nodeFontAbstractName = defaultItalicFont;
|
||||
nodeFontSize = 10;
|
||||
nodeFontClassSize = -1;
|
||||
nodeFontClassName = null;
|
||||
nodeFontClassAbstractName = null;
|
||||
nodeFontTagSize = -1;
|
||||
nodeFontTagName = null;
|
||||
nodeFontPackageSize = -1;
|
||||
nodeFontPackageName = null;
|
||||
nodeFillColor = null;
|
||||
bgColor = null;
|
||||
shape = new Shape();
|
||||
outputFileName = "graph.dot";
|
||||
outputDirectory= null;
|
||||
outputEncoding = "ISO-8859-1";
|
||||
hidePatterns = new ArrayList<Pattern>();
|
||||
includePatterns = new ArrayList<Pattern>();
|
||||
apiDocMap = new HashMap<Pattern, String>();
|
||||
apiDocRoot = null;
|
||||
postfixPackage = false;
|
||||
useGuillemot = true;
|
||||
findViews = false;
|
||||
viewName = null;
|
||||
contextRelationPattern = new RelationPattern(RelationDirection.BOTH);
|
||||
inferRelationships = false;
|
||||
inferDependencies = false;
|
||||
collapsibleDiagrams = false;
|
||||
inferDependencyVisibility = Visibility.PRIVATE;
|
||||
inferDepInPackage = false;
|
||||
useImports = false;
|
||||
inferRelationshipType = RelationType.NAVASSOC;
|
||||
collPackages = new ArrayList<Pattern>();
|
||||
compact = false;
|
||||
relativeLinksForSourcePackages = false;
|
||||
nodeSep = 0.25;
|
||||
rankSep = 0.5;
|
||||
dotExecutable = "dot";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -203,7 +135,7 @@ public class Options implements Cloneable, OptionProvider {
|
|||
try {
|
||||
clone = (Options) super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
// Should not happen
|
||||
throw new RuntimeException("Cannot clone?!?", e); // Should not happen
|
||||
}
|
||||
// deep clone the hide and collection patterns
|
||||
clone.hidePatterns = new ArrayList<Pattern>(hidePatterns);
|
||||
|
|
@ -224,71 +156,101 @@ public class Options implements Cloneable, OptionProvider {
|
|||
showType = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Match strings, ignoring leading <tt>-</tt>, <tt>-!</tt>, and <tt>!</tt>.
|
||||
*
|
||||
* @param given Given string
|
||||
* @param expect Expected string
|
||||
* @return {@code true} on success
|
||||
*/
|
||||
protected static boolean matchOption(String given, String expect) {
|
||||
return matchOption(given, expect, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Match strings, ignoring leading <tt>-</tt>, <tt>-!</tt>, and <tt>!</tt>.
|
||||
*
|
||||
* @param given Given string
|
||||
* @param expect Expected string
|
||||
* @param negative May be negative
|
||||
* @return {@code true} on success
|
||||
*/
|
||||
protected static boolean matchOption(String given, String expect, boolean negative) {
|
||||
int begin = 0, end = given.length();
|
||||
if (begin < end && given.charAt(begin) == '-')
|
||||
++begin;
|
||||
if (negative && begin < end && given.charAt(begin) == '!')
|
||||
++begin;
|
||||
return expect.length() == end - begin && expect.regionMatches(0, given, begin, end - begin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of arguments associated with the specified option.
|
||||
* The return value includes the actual option.
|
||||
* Will return 0 if the option is not supported.
|
||||
*/
|
||||
public static int optionLength(String option) {
|
||||
if(option.equals("-qualify") || option.equals("-!qualify") ||
|
||||
option.equals("-horizontal") || option.equals("-!horizontal") ||
|
||||
option.equals("-attributes") || option.equals("-!attributes") ||
|
||||
option.equals("-enumconstants") || option.equals("-!enumconstants") ||
|
||||
option.equals("-operations") || option.equals("-!operations") ||
|
||||
option.equals("-enumerations") || option.equals("-!enumerations") ||
|
||||
option.equals("-constructors") || option.equals("-!constructors") ||
|
||||
option.equals("-visibility") || option.equals("-!visibility") ||
|
||||
option.equals("-types") || option.equals("-!types") ||
|
||||
option.equals("-autosize") || option.equals("-!autosize") ||
|
||||
option.equals("-commentname") || option.equals("-!commentname") ||
|
||||
option.equals("-all") ||
|
||||
option.equals("-postfixpackage") ||
|
||||
option.equals("-noguillemot") ||
|
||||
option.equals("-views") ||
|
||||
option.equals("-inferrel") ||
|
||||
option.equals("-useimports") ||
|
||||
option.equals("-collapsible") ||
|
||||
option.equals("-inferdep") ||
|
||||
option.equals("-inferdepinpackage") ||
|
||||
option.equals("-compact"))
|
||||
if(matchOption(option, "qualify", true) ||
|
||||
matchOption(option, "qualifyGenerics", true) ||
|
||||
matchOption(option, "hideGenerics", true) ||
|
||||
matchOption(option, "horizontal", true) ||
|
||||
matchOption(option, "all") ||
|
||||
matchOption(option, "attributes", true) ||
|
||||
matchOption(option, "enumconstants", true) ||
|
||||
matchOption(option, "operations", true) ||
|
||||
matchOption(option, "enumerations", true) ||
|
||||
matchOption(option, "constructors", true) ||
|
||||
matchOption(option, "visibility", true) ||
|
||||
matchOption(option, "types", true) ||
|
||||
matchOption(option, "autosize", true) ||
|
||||
matchOption(option, "commentname", true) ||
|
||||
matchOption(option, "nodefontabstractitalic", true) ||
|
||||
matchOption(option, "postfixpackage", true) ||
|
||||
matchOption(option, "noguillemot", true) ||
|
||||
matchOption(option, "views", true) ||
|
||||
matchOption(option, "inferrel", true) ||
|
||||
matchOption(option, "useimports", true) ||
|
||||
matchOption(option, "collapsible", true) ||
|
||||
matchOption(option, "inferdep", true) ||
|
||||
matchOption(option, "inferdepinpackage", true) ||
|
||||
matchOption(option, "hideprivateinner", true) ||
|
||||
matchOption(option, "compact", true))
|
||||
|
||||
return 1;
|
||||
else if(option.equals("-nodefillcolor") ||
|
||||
option.equals("-nodefontcolor") ||
|
||||
option.equals("-nodefontsize") ||
|
||||
option.equals("-nodefontname") ||
|
||||
option.equals("-nodefontabstractname") ||
|
||||
option.equals("-nodefontclasssize") ||
|
||||
option.equals("-nodefontclassname") ||
|
||||
option.equals("-nodefontclassabstractname") ||
|
||||
option.equals("-nodefonttagsize") ||
|
||||
option.equals("-nodefonttagname") ||
|
||||
option.equals("-nodefontpackagesize") ||
|
||||
option.equals("-nodefontpackagename") ||
|
||||
option.equals("-edgefontcolor") ||
|
||||
option.equals("-edgecolor") ||
|
||||
option.equals("-edgefontsize") ||
|
||||
option.equals("-edgefontname") ||
|
||||
option.equals("-shape") ||
|
||||
option.equals("-output") ||
|
||||
option.equals("-outputencoding") ||
|
||||
option.equals("-bgcolor") ||
|
||||
option.equals("-hide") ||
|
||||
option.equals("-include") ||
|
||||
option.equals("-apidocroot") ||
|
||||
option.equals("-apidocmap") ||
|
||||
option.equals("-d") ||
|
||||
option.equals("-view") ||
|
||||
option.equals("-inferreltype") ||
|
||||
option.equals("-inferdepvis") ||
|
||||
option.equals("-collpackages") ||
|
||||
option.equals("-nodesep") ||
|
||||
option.equals("-ranksep") ||
|
||||
option.equals("-dotexecutable") ||
|
||||
option.equals("-link"))
|
||||
else if(matchOption(option, "nodefillcolor") ||
|
||||
matchOption(option, "nodefontcolor") ||
|
||||
matchOption(option, "nodefontsize") ||
|
||||
matchOption(option, "nodefontname") ||
|
||||
matchOption(option, "nodefontclasssize") ||
|
||||
matchOption(option, "nodefontclassname") ||
|
||||
matchOption(option, "nodefonttagsize") ||
|
||||
matchOption(option, "nodefonttagname") ||
|
||||
matchOption(option, "nodefontpackagesize") ||
|
||||
matchOption(option, "nodefontpackagename") ||
|
||||
matchOption(option, "edgefontcolor") ||
|
||||
matchOption(option, "edgecolor") ||
|
||||
matchOption(option, "edgefontsize") ||
|
||||
matchOption(option, "edgefontname") ||
|
||||
matchOption(option, "shape") ||
|
||||
matchOption(option, "output") ||
|
||||
matchOption(option, "outputencoding") ||
|
||||
matchOption(option, "bgcolor") ||
|
||||
matchOption(option, "hide") ||
|
||||
matchOption(option, "include") ||
|
||||
matchOption(option, "apidocroot") ||
|
||||
matchOption(option, "apidocmap") ||
|
||||
matchOption(option, "d") ||
|
||||
matchOption(option, "view") ||
|
||||
matchOption(option, "inferreltype") ||
|
||||
matchOption(option, "inferdepvis") ||
|
||||
matchOption(option, "collpackages") ||
|
||||
matchOption(option, "nodesep") ||
|
||||
matchOption(option, "ranksep") ||
|
||||
matchOption(option, "dotexecutable") ||
|
||||
matchOption(option, "link"))
|
||||
return 2;
|
||||
else if(option.equals("-contextPattern") ||
|
||||
option.equals("-linkoffline"))
|
||||
else if(matchOption(option, "contextPattern") ||
|
||||
matchOption(option, "linkoffline"))
|
||||
return 3;
|
||||
else
|
||||
return 0;
|
||||
|
|
@ -296,247 +258,168 @@ public class Options implements Cloneable, OptionProvider {
|
|||
|
||||
/** Set the options based on a single option and its arguments */
|
||||
void setOption(String[] opt) {
|
||||
if(!opt[0].equals("-hide") && optionLength(opt[0]) > opt.length) {
|
||||
if(!matchOption(opt[0], "hide") && optionLength(opt[0]) > opt.length) {
|
||||
System.err.println("Skipping option '" + opt[0] + "', missing argument");
|
||||
return;
|
||||
}
|
||||
boolean dash = opt[0].length() > 1 && opt[0].charAt(0) == '-';
|
||||
boolean positive = !(opt[0].length() > 1 && opt[0].charAt(dash ? 1 : 0) == '!');
|
||||
|
||||
if(opt[0].equals("-qualify")) {
|
||||
showQualified = true;
|
||||
} else if (opt[0].equals("-!qualify")) {
|
||||
showQualified = false;
|
||||
} else if(opt[0].equals("-qualifyGenerics")) {
|
||||
showQualifiedGenerics = true;
|
||||
} else if (opt[0].equals("-!qualifyGenerics")) {
|
||||
showQualifiedGenerics = false;
|
||||
} else if(opt[0].equals("-horizontal")) {
|
||||
horizontal = true;
|
||||
} else if (opt[0].equals("-!horizontal")) {
|
||||
horizontal = false;
|
||||
} else if(opt[0].equals("-attributes")) {
|
||||
showAttributes = true;
|
||||
} else if (opt[0].equals("-!attributes")) {
|
||||
showAttributes = false;
|
||||
} else if(opt[0].equals("-enumconstants")) {
|
||||
showEnumConstants = true;
|
||||
} else if (opt[0].equals("-!enumconstants")) {
|
||||
showEnumConstants = false;
|
||||
} else if(opt[0].equals("-operations")) {
|
||||
showOperations = true;
|
||||
} else if (opt[0].equals("-!operations")) {
|
||||
showOperations = false;
|
||||
} else if(opt[0].equals("-enumerations")) {
|
||||
showEnumerations = true;
|
||||
} else if (opt[0].equals("-!enumerations")) {
|
||||
showEnumerations = false;
|
||||
} else if(opt[0].equals("-constructors")) {
|
||||
showConstructors = true;
|
||||
} else if (opt[0].equals("-!constructors")) {
|
||||
showConstructors = false;
|
||||
} else if(opt[0].equals("-visibility")) {
|
||||
showVisibility = true;
|
||||
} else if (opt[0].equals("-!visibility")) {
|
||||
showVisibility = false;
|
||||
} else if(opt[0].equals("-types")) {
|
||||
showType = true;
|
||||
} else if (opt[0].equals("-!types")) {
|
||||
showType = false;
|
||||
} else if(opt[0].equals("-autoSize")) {
|
||||
autoSize = true;
|
||||
} else if (opt[0].equals("-!autoSize")) {
|
||||
autoSize = false;
|
||||
} else if(opt[0].equals("-commentname")) {
|
||||
showComment = true;
|
||||
} else if (opt[0].equals("-!commentname")) {
|
||||
showComment = false;
|
||||
} else if(opt[0].equals("-all")) {
|
||||
if(matchOption(opt[0], "qualify", true)) {
|
||||
showQualified = positive;
|
||||
} else if(matchOption(opt[0], "qualifyGenerics", true)) {
|
||||
showQualifiedGenerics = positive;
|
||||
} else if(matchOption(opt[0], "hideGenerics", true)) {
|
||||
hideGenerics = positive;
|
||||
} else if(matchOption(opt[0], "horizontal", true)) {
|
||||
horizontal = positive;
|
||||
} else if(matchOption(opt[0], "attributes", true)) {
|
||||
showAttributes = positive;
|
||||
} else if(matchOption(opt[0], "enumconstants", true)) {
|
||||
showEnumConstants = positive;
|
||||
} else if(matchOption(opt[0], "operations", true)) {
|
||||
showOperations = positive;
|
||||
} else if(matchOption(opt[0], "enumerations", true)) {
|
||||
showEnumerations = positive;
|
||||
} else if(matchOption(opt[0], "constructors", true)) {
|
||||
showConstructors = positive;
|
||||
} else if(matchOption(opt[0], "visibility", true)) {
|
||||
showVisibility = positive;
|
||||
} else if(matchOption(opt[0], "types", true)) {
|
||||
showType = positive;
|
||||
} else if(matchOption(opt[0], "autoSize", true)) {
|
||||
autoSize = positive;
|
||||
} else if(matchOption(opt[0], "commentname", true)) {
|
||||
showComment = positive;
|
||||
} else if(matchOption(opt[0], "all")) {
|
||||
setAll();
|
||||
} else if(opt[0].equals("-bgcolor")) {
|
||||
bgColor = opt[1];
|
||||
} else if (opt[0].equals("-!bgcolor")) {
|
||||
bgColor = null;
|
||||
} else if(opt[0].equals("-edgecolor")) {
|
||||
edgeColor = opt[1];
|
||||
} else if (opt[0].equals("-!edgecolor")) {
|
||||
edgeColor = "black";
|
||||
} else if(opt[0].equals("-edgefontcolor")) {
|
||||
edgeFontColor = opt[1];
|
||||
} else if (opt[0].equals("-!edgefontcolor")) {
|
||||
edgeFontColor = "black";
|
||||
} else if(opt[0].equals("-edgefontname")) {
|
||||
edgeFontName = opt[1];
|
||||
} else if (opt[0].equals("-!edgefontname")) {
|
||||
edgeFontName = defaultFont;
|
||||
} else if(opt[0].equals("-edgefontsize")) {
|
||||
edgeFontSize = Integer.parseInt(opt[1]);
|
||||
} else if (opt[0].equals("-!edgefontsize")) {
|
||||
edgeFontSize = 10;
|
||||
} else if(opt[0].equals("-nodefontcolor")) {
|
||||
nodeFontColor = opt[1];
|
||||
} else if (opt[0].equals("-!nodefontcolor")) {
|
||||
nodeFontColor = "black";
|
||||
} else if(opt[0].equals("-nodefontname")) {
|
||||
nodeFontName = opt[1];
|
||||
} else if (opt[0].equals("-!nodefontname")) {
|
||||
nodeFontName = defaultFont;
|
||||
} else if(opt[0].equals("-nodefontabstractname")) {
|
||||
nodeFontAbstractName = opt[1];
|
||||
} else if (opt[0].equals("-!nodefontabstractname")) {
|
||||
nodeFontAbstractName = defaultItalicFont;
|
||||
} else if(opt[0].equals("-nodefontsize")) {
|
||||
nodeFontSize = Integer.parseInt(opt[1]);
|
||||
} else if (opt[0].equals("-!nodefontsize")) {
|
||||
nodeFontSize = 10;
|
||||
} else if(opt[0].equals("-nodefontclassname")) {
|
||||
nodeFontClassName = opt[1];
|
||||
} else if (opt[0].equals("-!nodefontclassname")) {
|
||||
nodeFontClassName = null;
|
||||
} else if(opt[0].equals("-nodefontclassabstractname")) {
|
||||
nodeFontClassAbstractName = opt[1];
|
||||
} else if (opt[0].equals("-!nodefontclassabstractname")) {
|
||||
nodeFontClassAbstractName = null;
|
||||
} else if(opt[0].equals("-nodefontclasssize")) {
|
||||
nodeFontClassSize = Integer.parseInt(opt[1]);
|
||||
} else if (opt[0].equals("-!nodefontclasssize")) {
|
||||
nodeFontClassSize = -1;
|
||||
} else if(opt[0].equals("-nodefonttagname")) {
|
||||
nodeFontTagName = opt[1];
|
||||
} else if (opt[0].equals("-!nodefonttagname")) {
|
||||
nodeFontTagName = null;
|
||||
} else if(opt[0].equals("-nodefonttagsize")) {
|
||||
nodeFontTagSize = Integer.parseInt(opt[1]);
|
||||
} else if (opt[0].equals("-!nodefonttagsize")) {
|
||||
nodeFontTagSize = -1;
|
||||
} else if(opt[0].equals("-nodefontpackagename")) {
|
||||
nodeFontPackageName = opt[1];
|
||||
} else if (opt[0].equals("-!nodefontpackagename")) {
|
||||
nodeFontPackageName = null;
|
||||
} else if(opt[0].equals("-nodefontpackagesize")) {
|
||||
nodeFontPackageSize = Integer.parseInt(opt[1]);
|
||||
} else if (opt[0].equals("-!nodefontpackagesize")) {
|
||||
nodeFontPackageSize = -1;
|
||||
} else if(opt[0].equals("-nodefillcolor")) {
|
||||
nodeFillColor = opt[1];
|
||||
} else if (opt[0].equals("-!nodefillcolor")) {
|
||||
nodeFillColor = null;
|
||||
} else if(opt[0].equals("-shape")) {
|
||||
shape = new Shape(opt[1]);
|
||||
} else if (opt[0].equals("-!shape")) {
|
||||
shape = new Shape();
|
||||
} else if(opt[0].equals("-output")) {
|
||||
outputFileName = opt[1];
|
||||
} else if (opt[0].equals("-!output")) {
|
||||
outputFileName = "graph.dot";
|
||||
} else if(opt[0].equals("-outputencoding")) {
|
||||
outputEncoding = opt[1];
|
||||
} else if (opt[0].equals("-!outputencoding")) {
|
||||
outputEncoding = "ISO-8859-1";
|
||||
} else if(opt[0].equals("-hide")) {
|
||||
if(opt.length == 1) {
|
||||
} else if(matchOption(opt[0], "bgcolor", true)) {
|
||||
bgColor = positive ? opt[1] : null;
|
||||
} else if(matchOption(opt[0], "edgecolor", true)) {
|
||||
edgeColor = positive ? opt[1] : "black";
|
||||
} else if(matchOption(opt[0], "edgefontcolor", true)) {
|
||||
edgeFontColor = positive ? opt[1] : "black";
|
||||
} else if(matchOption(opt[0], "edgefontname", true)) {
|
||||
edgeFontName = positive ? opt[1] : Font.DEFAULT_FONT;
|
||||
} else if(matchOption(opt[0], "edgefontsize", true)) {
|
||||
edgeFontSize = positive ? Double.parseDouble(opt[1]) : 10;
|
||||
} else if(matchOption(opt[0], "nodefontcolor", true)) {
|
||||
nodeFontColor = positive ? opt[1] : "black";
|
||||
} else if(matchOption(opt[0], "nodefontname", true)) {
|
||||
nodeFontName = positive ? opt[1] : Font.DEFAULT_FONT;
|
||||
} else if(matchOption(opt[0], "nodefontabstractitalic", true)) {
|
||||
nodeFontAbstractItalic = positive;
|
||||
} else if(matchOption(opt[0], "nodefontsize", true)) {
|
||||
nodeFontSize = positive ? Double.parseDouble(opt[1]) : 10;
|
||||
} else if(matchOption(opt[0], "nodefontclassname", true)) {
|
||||
nodeFontClassName = positive ? opt[1] : null;
|
||||
} else if(matchOption(opt[0], "nodefontclasssize", true)) {
|
||||
nodeFontClassSize = positive ? Double.parseDouble(opt[1]) : -1;
|
||||
} else if(matchOption(opt[0], "nodefonttagname", true)) {
|
||||
nodeFontTagName = positive ? opt[1] : null;
|
||||
} else if(matchOption(opt[0], "nodefonttagsize", true)) {
|
||||
nodeFontTagSize = positive ? Double.parseDouble(opt[1]) : -1;
|
||||
} else if(matchOption(opt[0], "nodefontpackagename", true)) {
|
||||
nodeFontPackageName = positive ? opt[1] : null;
|
||||
} else if(matchOption(opt[0], "nodefontpackagesize", true)) {
|
||||
nodeFontPackageSize = positive ? Double.parseDouble(opt[1]) : -1;
|
||||
} else if(matchOption(opt[0], "nodefillcolor", true)) {
|
||||
nodeFillColor = positive ? opt[1] : null;
|
||||
} else if(matchOption(opt[0], "shape", true)) {
|
||||
shape = positive ? Shape.of(opt[1]) : Shape.CLASS;
|
||||
} else if(matchOption(opt[0], "output", true)) {
|
||||
outputFileName = positive ? opt[1] : "graph.dot";
|
||||
} else if(matchOption(opt[0], "outputencoding", true)) {
|
||||
outputEncoding = positive ? opt[1] : "ISO-8859-1";
|
||||
} else if(matchOption(opt[0], "hide", true)) {
|
||||
if (positive) {
|
||||
if (opt.length == 1) {
|
||||
hidePatterns.clear();
|
||||
hidePatterns.add(allPattern);
|
||||
} else {
|
||||
try {
|
||||
hidePatterns.add(Pattern.compile(opt[1]));
|
||||
} catch (PatternSyntaxException e) {
|
||||
System.err.println("Skipping invalid pattern " + opt[1]);
|
||||
}
|
||||
}
|
||||
} else
|
||||
hidePatterns.clear();
|
||||
hidePatterns.add(allPattern);
|
||||
} else {
|
||||
} else if(matchOption(opt[0], "include", true)) {
|
||||
if (positive) {
|
||||
try {
|
||||
hidePatterns.add(Pattern.compile(opt[1]));
|
||||
includePatterns.add(Pattern.compile(opt[1]));
|
||||
} catch (PatternSyntaxException e) {
|
||||
System.err.println("Skipping invalid pattern " + opt[1]);
|
||||
}
|
||||
}
|
||||
} else if (opt[0].equals("-!hide")) {
|
||||
hidePatterns.clear();
|
||||
} else if(opt[0].equals("-include")) {
|
||||
try {
|
||||
includePatterns.add(Pattern.compile(opt[1]));
|
||||
} catch (PatternSyntaxException e) {
|
||||
System.err.println("Skipping invalid pattern " + opt[1]);
|
||||
}
|
||||
} else if (opt[0].equals("-!include")) {
|
||||
includePatterns.clear();
|
||||
} else if(opt[0].equals("-apidocroot")) {
|
||||
apiDocRoot = fixApiDocRoot(opt[1]);
|
||||
} else if (opt[0].equals("-!apidocroot")) {
|
||||
apiDocRoot = null;
|
||||
} else if(opt[0].equals("-apidocmap")) {
|
||||
setApiDocMapFile(opt[1]);
|
||||
} else if (opt[0].equals("-!apidocmap")) {
|
||||
apiDocMap.clear();
|
||||
} else if(opt[0].equals("-noguillemot")) {
|
||||
guilOpen = "<<";
|
||||
guilClose = ">>";
|
||||
} else if (opt[0].equals("-!noguillemot")) {
|
||||
guilOpen = "\u00ab";
|
||||
guilClose = "\u00bb";
|
||||
} else if (opt[0].equals("-view")) {
|
||||
viewName = opt[1];
|
||||
} else if (opt[0].equals("-!view")) {
|
||||
viewName = null;
|
||||
} else if (opt[0].equals("-views")) {
|
||||
findViews = true;
|
||||
} else if (opt[0].equals("-!views")) {
|
||||
findViews = false;
|
||||
} else if (opt[0].equals("-d")) {
|
||||
outputDirectory = opt[1];
|
||||
} else if (opt[0].equals("-!d")) {
|
||||
outputDirectory = null;
|
||||
} else if(opt[0].equals("-inferrel")) {
|
||||
inferRelationships = true;
|
||||
} else if(opt[0].equals("-!inferrel")) {
|
||||
inferRelationships = false;
|
||||
} else if(opt[0].equals("-inferreltype")) {
|
||||
} else
|
||||
includePatterns.clear();
|
||||
} else if(matchOption(opt[0], "apidocroot", true)) {
|
||||
apiDocRoot = positive ? fixApiDocRoot(opt[1]) : null;
|
||||
} else if(matchOption(opt[0], "apidocmap", true)) {
|
||||
if (positive)
|
||||
setApiDocMapFile(opt[1]);
|
||||
else
|
||||
apiDocMap.clear();
|
||||
} else if(matchOption(opt[0], "noguillemot", true)) {
|
||||
guilOpen = positive ? "<<" : "\u00ab";
|
||||
guilClose = positive ? ">>" : "\u00bb";
|
||||
} else if (matchOption(opt[0], "view", true)) {
|
||||
viewName = positive ? opt[1] : null;
|
||||
} else if (matchOption(opt[0], "views", true)) {
|
||||
findViews = positive;
|
||||
} else if (matchOption(opt[0], "d", true)) {
|
||||
outputDirectory = positive ? opt[1] : null;
|
||||
} else if(matchOption(opt[0], "inferrel", true)) {
|
||||
inferRelationships = positive;
|
||||
} else if(matchOption(opt[0], "inferreltype", true)) {
|
||||
if (positive) {
|
||||
try {
|
||||
inferRelationshipType = RelationType.valueOf(opt[1].toUpperCase());
|
||||
} catch(IllegalArgumentException e) {
|
||||
System.err.println("Unknown association type " + opt[1]);
|
||||
}
|
||||
} else if(opt[0].equals("-!inferreltype")) {
|
||||
inferRelationshipType = RelationType.NAVASSOC;
|
||||
} else if(opt[0].equals("-inferdepvis")) {
|
||||
try {
|
||||
Visibility vis = Visibility.valueOf(opt[1].toUpperCase());
|
||||
inferDependencyVisibility = vis;
|
||||
} catch(IllegalArgumentException e) {
|
||||
System.err.println("Ignoring invalid visibility specification for " +
|
||||
"dependency inference: " + opt[1]);
|
||||
}
|
||||
} else if(opt[0].equals("-!inferdepvis")) {
|
||||
inferDependencyVisibility = Visibility.PRIVATE;
|
||||
} else if(opt[0].equals("-collapsible")) {
|
||||
collapsibleDiagrams = true;
|
||||
} else if(opt[0].equals("-!collapsible")) {
|
||||
collapsibleDiagrams = false;
|
||||
} else if(opt[0].equals("-inferdep")) {
|
||||
inferDependencies = true;
|
||||
} else if(opt[0].equals("-!inferdep")) {
|
||||
inferDependencies = false;
|
||||
} else if(opt[0].equals("-inferdepinpackage")) {
|
||||
inferDepInPackage = true;
|
||||
} else if(opt[0].equals("-!inferdepinpackage")) {
|
||||
inferDepInPackage = false;
|
||||
} else if(opt[0].equals("-useimports")) {
|
||||
useImports = true;
|
||||
} else if(opt[0].equals("-!useimports")) {
|
||||
useImports = false;
|
||||
} else if (opt[0].equals("-collpackages")) {
|
||||
try {
|
||||
collPackages.add(Pattern.compile(opt[1]));
|
||||
} catch (PatternSyntaxException e) {
|
||||
System.err.println("Skipping invalid pattern " + opt[1]);
|
||||
}
|
||||
} else if (opt[0].equals("-!collpackages")) {
|
||||
collPackages.clear();
|
||||
} else if (opt[0].equals("-compact")) {
|
||||
compact = true;
|
||||
} else if (opt[0].equals("-!compact")) {
|
||||
compact = false;
|
||||
} else if (opt[0].equals("-postfixpackage")) {
|
||||
postfixPackage = true;
|
||||
} else if (opt[0].equals("-!postfixpackage")) {
|
||||
postfixPackage = false;
|
||||
} else if (opt[0].equals("-link")) {
|
||||
} else
|
||||
inferRelationshipType = RelationType.NAVASSOC;
|
||||
} else if(matchOption(opt[0], "inferdepvis", true)) {
|
||||
if (positive) {
|
||||
try {
|
||||
Visibility vis = Visibility.valueOf(opt[1].toUpperCase());
|
||||
inferDependencyVisibility = vis;
|
||||
} catch(IllegalArgumentException e) {
|
||||
System.err.println("Ignoring invalid visibility specification for " +
|
||||
"dependency inference: " + opt[1]);
|
||||
}
|
||||
} else
|
||||
inferDependencyVisibility = Visibility.PRIVATE;
|
||||
} else if(matchOption(opt[0], "collapsible", true)) {
|
||||
collapsibleDiagrams = positive;
|
||||
} else if(matchOption(opt[0], "inferdep", true)) {
|
||||
inferDependencies = positive;
|
||||
} else if(matchOption(opt[0], "inferdepinpackage", true)) {
|
||||
inferDepInPackage = positive;
|
||||
} else if (matchOption(opt[0], "hideprivateinner", true)) {
|
||||
hidePrivateInner = positive;
|
||||
} else if(matchOption(opt[0], "useimports", true)) {
|
||||
useImports = positive;
|
||||
} else if (matchOption(opt[0], "collpackages", true)) {
|
||||
if (positive) {
|
||||
try {
|
||||
collPackages.add(Pattern.compile(opt[1]));
|
||||
} catch (PatternSyntaxException e) {
|
||||
System.err.println("Skipping invalid pattern " + opt[1]);
|
||||
}
|
||||
} else
|
||||
collPackages.clear();
|
||||
} else if (matchOption(opt[0], "compact", true)) {
|
||||
compact = positive;
|
||||
} else if (matchOption(opt[0], "postfixpackage", true)) {
|
||||
postfixPackage = positive;
|
||||
} else if (matchOption(opt[0], "link")) {
|
||||
addApiDocRoots(opt[1]);
|
||||
} else if (opt[0].equals("-linkoffline")) {
|
||||
} else if (matchOption(opt[0], "linkoffline")) {
|
||||
addApiDocRootsOffline(opt[1], opt[2]);
|
||||
} else if(opt[0].equals("-contextPattern")) {
|
||||
} else if(matchOption(opt[0], "contextPattern")) {
|
||||
RelationDirection d; RelationType rt;
|
||||
try {
|
||||
d = RelationDirection.valueOf(opt[2].toUpperCase());
|
||||
|
|
@ -550,27 +433,22 @@ public class Options implements Cloneable, OptionProvider {
|
|||
|
||||
}
|
||||
|
||||
} else if (opt[0].equals("-nodesep")) {
|
||||
} else if (matchOption(opt[0], "nodesep", true)) {
|
||||
try {
|
||||
nodeSep = Double.parseDouble(opt[1]);
|
||||
nodeSep = positive ? Double.parseDouble(opt[1]) : 0.25;
|
||||
} catch (NumberFormatException e) {
|
||||
System.err.println("Skipping invalid nodesep " + opt[1]);
|
||||
}
|
||||
} else if (opt[0].equals("-!nodesep")) {
|
||||
nodeSep = 0.25;
|
||||
} else if (opt[0].equals("-ranksep")) {
|
||||
} else if (matchOption(opt[0], "ranksep", true)) {
|
||||
try {
|
||||
rankSep = Double.parseDouble(opt[1]);
|
||||
rankSep = positive ? Double.parseDouble(opt[1]) : 0.5;
|
||||
} catch (NumberFormatException e) {
|
||||
System.err.println("Skipping invalid ranksep " + opt[1]);
|
||||
}
|
||||
} else if (opt[0].equals("-!ranksep")) {
|
||||
rankSep = 0.5;
|
||||
} else if (opt[0].equals("-dotexecutable")) {
|
||||
dotExecutable = opt[1];
|
||||
} else if (matchOption(opt[0], "dotexecutable")) {
|
||||
dotExecutable = opt[1];
|
||||
} else
|
||||
; // Do nothing, javadoc will handle the option or complain, if
|
||||
// needed.
|
||||
; // Do nothing, javadoc will handle the option or complain, if needed.
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -642,11 +520,10 @@ public class Options implements Cloneable, OptionProvider {
|
|||
userMap.load(is);
|
||||
for (Map.Entry<?, ?> mapEntry : userMap.entrySet()) {
|
||||
try {
|
||||
Pattern regex = Pattern.compile((String) mapEntry.getKey());
|
||||
String thisRoot = (String) mapEntry.getValue();
|
||||
if (thisRoot != null) {
|
||||
thisRoot = fixApiDocRoot(thisRoot);
|
||||
apiDocMap.put(regex, thisRoot);
|
||||
apiDocMap.put(Pattern.compile((String) mapEntry.getKey()), thisRoot);
|
||||
} else {
|
||||
System.err.println("No URL for pattern " + mapEntry.getKey());
|
||||
}
|
||||
|
|
@ -667,7 +544,7 @@ public class Options implements Cloneable, OptionProvider {
|
|||
* match the class name against the regular expressions specified in the
|
||||
* <code>apiDocMap</code>; if a match is found, the associated URL
|
||||
* will be returned.
|
||||
*
|
||||
* <p>
|
||||
* <b>NOTE:</b> The match order of the match attempts is the one specified by the
|
||||
* constructor of the api doc root, so it depends on the order of "-link" and "-apiDocMap"
|
||||
* parameters.
|
||||
|
|
@ -677,9 +554,7 @@ public class Options implements Cloneable, OptionProvider {
|
|||
apiDocMap.put(Pattern.compile(".*"), DEFAULT_EXTERNAL_APIDOC);
|
||||
|
||||
for (Map.Entry<Pattern, String> mapEntry : apiDocMap.entrySet()) {
|
||||
Pattern regex = mapEntry.getKey();
|
||||
Matcher matcher = regex.matcher(className);
|
||||
if (matcher.matches())
|
||||
if (mapEntry.getKey().matcher(className).matches())
|
||||
return mapEntry.getValue();
|
||||
}
|
||||
return null;
|
||||
|
|
@ -687,16 +562,15 @@ public class Options implements Cloneable, OptionProvider {
|
|||
|
||||
/** Trim and append a file separator to the string */
|
||||
private String fixApiDocRoot(String str) {
|
||||
String fixed = null;
|
||||
if (str != null) {
|
||||
fixed = str.trim();
|
||||
if (fixed.length() > 0) {
|
||||
if (!File.separator.equals("/"))
|
||||
fixed = fixed.replace(File.separator.charAt(0), '/');
|
||||
if (!fixed.endsWith("/"))
|
||||
fixed = fixed + "/";
|
||||
}
|
||||
}
|
||||
if (str == null)
|
||||
return null;
|
||||
String fixed = str.trim();
|
||||
if (fixed.isEmpty())
|
||||
return "";
|
||||
if (File.separatorChar != '/')
|
||||
fixed = fixed.replace(File.separatorChar, '/');
|
||||
if (!fixed.endsWith("/"))
|
||||
fixed = fixed + "/";
|
||||
return fixed;
|
||||
}
|
||||
|
||||
|
|
@ -712,11 +586,8 @@ public class Options implements Cloneable, OptionProvider {
|
|||
if (p == null)
|
||||
return;
|
||||
|
||||
for (Tag tag : p.tags("opt")) {
|
||||
String[] opt = StringUtil.tokenize(tag.text());
|
||||
opt[0] = "-" + opt[0];
|
||||
setOption(opt);
|
||||
}
|
||||
for (Tag tag : p.tags("opt"))
|
||||
setOption(StringUtil.tokenize(tag.text()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -731,13 +602,8 @@ public class Options implements Cloneable, OptionProvider {
|
|||
return true;
|
||||
|
||||
Matcher m = hidePattern.matcher(s);
|
||||
if (strictMatching) {
|
||||
if (m.matches()) {
|
||||
return true;
|
||||
}
|
||||
} else if (m.find()) {
|
||||
if (strictMatching ? m.matches() : m.find())
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -750,13 +616,8 @@ public class Options implements Cloneable, OptionProvider {
|
|||
public boolean matchesIncludeExpression(String s) {
|
||||
for (Pattern includePattern : includePatterns) {
|
||||
Matcher m = includePattern.matcher(s);
|
||||
if (strictMatching) {
|
||||
if (m.matches()) {
|
||||
return true;
|
||||
}
|
||||
} else if (m.find()) {
|
||||
if (strictMatching ? m.matches() : m.find())
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -769,13 +630,8 @@ public class Options implements Cloneable, OptionProvider {
|
|||
public boolean matchesCollPackageExpression(String s) {
|
||||
for (Pattern collPattern : collPackages) {
|
||||
Matcher m = collPattern.matcher(s);
|
||||
if (strictMatching) {
|
||||
if (m.matches()) {
|
||||
return true;
|
||||
}
|
||||
} else if (m.find()) {
|
||||
if (strictMatching ? m.matches() : m.find())
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,9 @@ public class PackageMatcher implements ClassMatcher {
|
|||
}
|
||||
|
||||
public boolean matches(String name) {
|
||||
for (ClassDoc cd : packageDoc.allClasses()) {
|
||||
for (ClassDoc cd : packageDoc.allClasses())
|
||||
if (cd.qualifiedName().equals(name))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import com.sun.javadoc.RootDoc;
|
|||
*/
|
||||
public class PackageView implements OptionProvider {
|
||||
|
||||
private static final String[] HIDE = new String[] { "-hide" };
|
||||
private static final String[] HIDE = new String[] { "hide" };
|
||||
private PackageDoc pd;
|
||||
private OptionProvider parent;
|
||||
private ClassMatcher matcher;
|
||||
|
|
@ -40,7 +40,7 @@ public class PackageView implements OptionProvider {
|
|||
public Options getGlobalOptions() {
|
||||
Options go = parent.getGlobalOptions();
|
||||
|
||||
go.setOption(new String[] { "-output", outputPath });
|
||||
go.setOption(new String[] { "output", outputPath });
|
||||
go.setOption(HIDE);
|
||||
|
||||
return go;
|
||||
|
|
@ -63,8 +63,8 @@ public class PackageView implements OptionProvider {
|
|||
boolean inPackage = matcher.matches(cd);
|
||||
if (inPackage)
|
||||
opt.showQualified = false;
|
||||
if (!(inPackage || this.opt.matchesIncludeExpression(cd.qualifiedName()))
|
||||
|| this.opt.matchesHideExpression(cd.qualifiedName()))
|
||||
boolean included = inPackage || this.opt.matchesIncludeExpression(cd.qualifiedName());
|
||||
if (!included || this.opt.matchesHideExpression(cd.qualifiedName()))
|
||||
opt.setOption(HIDE);
|
||||
}
|
||||
|
||||
|
|
@ -73,8 +73,8 @@ public class PackageView implements OptionProvider {
|
|||
boolean inPackage = matcher.matches(className);
|
||||
if (inPackage)
|
||||
opt.showQualified = false;
|
||||
if (!(inPackage || this.opt.matchesIncludeExpression(className))
|
||||
|| this.opt.matchesHideExpression(className))
|
||||
boolean included = inPackage || this.opt.matchesIncludeExpression(className);
|
||||
if (!included || this.opt.matchesHideExpression(className))
|
||||
opt.setOption(HIDE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
*/
|
||||
package org.umlgraph.doclet;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.sun.javadoc.ClassDoc;
|
||||
|
|
@ -38,8 +37,7 @@ public class PatternMatcher implements ClassMatcher {
|
|||
}
|
||||
|
||||
public boolean matches(String name) {
|
||||
Matcher matcher = pattern.matcher(name);
|
||||
return matcher.matches();
|
||||
return pattern.matcher(name).matches();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,12 +13,9 @@ public enum RelationDirection {
|
|||
* @return
|
||||
*/
|
||||
public RelationDirection sum(RelationDirection d) {
|
||||
if (this == NONE)
|
||||
return d;
|
||||
|
||||
if ((this == IN && d == OUT) || (this == OUT && d == IN) || this == BOTH || d == BOTH)
|
||||
return BOTH;
|
||||
return this;
|
||||
// Handle same and nones first:
|
||||
return (this == d || d == NONE) ? this : //
|
||||
this == NONE ? d : BOTH; // They are different and not none.
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -28,10 +25,7 @@ public enum RelationDirection {
|
|||
* @return
|
||||
*/
|
||||
public boolean contains(RelationDirection d) {
|
||||
if (this == BOTH)
|
||||
return true;
|
||||
else
|
||||
return d == this;
|
||||
return this == BOTH ? true : (d == this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -40,12 +34,7 @@ public enum RelationDirection {
|
|||
* @return
|
||||
*/
|
||||
public RelationDirection inverse() {
|
||||
if (this == IN)
|
||||
return OUT;
|
||||
else if (this == OUT)
|
||||
return IN;
|
||||
else
|
||||
return this;
|
||||
return this == IN ? OUT : this == OUT ? IN : this;
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,16 +1,34 @@
|
|||
package org.umlgraph.doclet;
|
||||
|
||||
/**
|
||||
* The type of relation that links two entities
|
||||
* @author wolf
|
||||
* The type of relation that links two entities, and the graphviz format
|
||||
*
|
||||
* @author Erich Schubert
|
||||
*/
|
||||
public enum RelationType {
|
||||
ASSOC(), NAVASSOC(), HAS(), NAVHAS(), COMPOSED(), NAVCOMPOSED(), DEPEND(), EXTENDS(), IMPLEMENTS();
|
||||
DEPEND("arrowhead=open,style=dashed,weight=0", false), // Weakest
|
||||
NAVASSOC("arrowhead=open,weight=1", false), //
|
||||
ASSOC("arrowhead=none,weight=2", false), //
|
||||
NAVHAS("arrowhead=open,arrowtail=ediamond,dir=both,weight=3", false), //
|
||||
HAS("arrowhead=none,arrowtail=ediamond,dir=back,weight=4", false), //
|
||||
NAVCOMPOSED("arrowhead=open,arrowtail=diamond,dir=both,weight=5", false), //
|
||||
COMPOSED("arrowhead=none,arrowtail=diamond,dir=back,weight=6", false), //
|
||||
IMPLEMENTS("arrowtail=empty,style=dashed,dir=back,weight=9", true), //
|
||||
EXTENDS("arrowtail=empty,dir=back,weight=10", true);
|
||||
|
||||
/** Lower case version of the label */
|
||||
public final String lower;
|
||||
|
||||
private RelationType() {
|
||||
this.lower = toString().toLowerCase();
|
||||
/** Graphviz style */
|
||||
public final String style;
|
||||
|
||||
/** Backwards edges with respect to node ranking */
|
||||
public final boolean backorder;
|
||||
|
||||
/** Enum constructors must be private */
|
||||
private RelationType(String style, boolean backorder) {
|
||||
this.lower = toString().toLowerCase();
|
||||
this.style = style;
|
||||
this.backorder = backorder;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,80 +18,66 @@
|
|||
|
||||
package org.umlgraph.doclet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.javadoc.ClassDoc;
|
||||
import com.sun.javadoc.Doc;
|
||||
import com.sun.javadoc.LanguageVersion;
|
||||
import com.sun.javadoc.RootDoc;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Properties of node shapes
|
||||
*
|
||||
* @version $Revision$
|
||||
* @author <a href="http://www.spinellis.gr">Diomidis Spinellis</a>
|
||||
* @author Erich Schubert
|
||||
*/
|
||||
public class Shape {
|
||||
public enum Shape {
|
||||
CLASS(""), //
|
||||
NOTE(", shape=note"), //
|
||||
NODE(", shape=box3d"), //
|
||||
COMPONENT(", shape=component"), //
|
||||
PACKAGE(", shape=tab"), //
|
||||
COLLABORATION(", shape=ellipse, style=dashed"), //
|
||||
USECASE(", shape=ellipse"), //
|
||||
ACTIVECLASS("");
|
||||
|
||||
/** Shape's UMLGraph name */
|
||||
private String name;
|
||||
/** Graphviz style */
|
||||
public final String style;
|
||||
|
||||
/** Construct a default (class) Shape */
|
||||
public Shape() {
|
||||
name = "class";
|
||||
}
|
||||
/** Map for valid shape names */
|
||||
private static final HashMap<String, Shape> index = new HashMap<String, Shape>(16);
|
||||
|
||||
/** Construct a Shape through the specified UMLGraph name */
|
||||
public Shape(String n) {
|
||||
name = n;
|
||||
if (graphvizAttribute() == null) {
|
||||
System.err.println("Ignoring invalid shape " + n);
|
||||
name = "class";
|
||||
/** Initialize the lookup index */
|
||||
static {
|
||||
for (Shape s : Shape.values()) {
|
||||
index.put(s.name(), s);
|
||||
index.put(s.name().toLowerCase(Locale.ROOT), s);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the GraphViz shape name corresponding to the shape
|
||||
* Get the shape from a string. This allows both the uppercase and the lowercase
|
||||
* name. Prefer this to {{@link #valueOf(String)} which only accepts uppercase.
|
||||
*
|
||||
* @param s String
|
||||
* @return Shape
|
||||
*/
|
||||
public String graphvizAttribute() {
|
||||
if (name.equals("class"))
|
||||
return ""; // Default; plaintext
|
||||
else if (name.equals("note"))
|
||||
return ", shape=note";
|
||||
else if (name.equals("node"))
|
||||
return ", shape=box3d";
|
||||
else if (name.equals("component"))
|
||||
return ", shape=component";
|
||||
else if (name.equals("package"))
|
||||
return ", shape=tab";
|
||||
else if (name.equals("collaboration"))
|
||||
return ", shape=ellipse, style=dashed";
|
||||
else if (name.equals("usecase"))
|
||||
return ", shape=ellipse";
|
||||
else if (name.equals("activeclass"))
|
||||
return ""; // Default; plaintext
|
||||
else
|
||||
return null;
|
||||
public static Shape of(String s) {
|
||||
Shape shp = index.get(s);
|
||||
if (shp != null)
|
||||
return shp;
|
||||
System.err.println("Ignoring invalid shape: " + s);
|
||||
return CLASS;
|
||||
}
|
||||
|
||||
/** Return the shape's GraphViz landing port */
|
||||
String landingPort() {
|
||||
if (name.equals("class") || name.equals("activeclass"))
|
||||
return ":p";
|
||||
else
|
||||
return "";
|
||||
/** Enum constructor, must be private! */
|
||||
private Shape(String style) {
|
||||
this.style = style;
|
||||
}
|
||||
|
||||
/** Return the table border required for the shape */
|
||||
String extraColumn(int nRows) {
|
||||
return name.equals("activeclass") ? ("<td rowspan=\"" + nRows + "\"></td>") : "";
|
||||
public String extraColumn() {
|
||||
return this == Shape.ACTIVECLASS ? ("<td rowspan=\"10\"></td>") : "";
|
||||
}
|
||||
|
||||
/** Return the cell border required for the shape */
|
||||
String cellBorder() {
|
||||
return (name.equals("class") || name.equals("activeclass")) ? "1" : "0";
|
||||
public String cellBorder() {
|
||||
return this == CLASS || this == ACTIVECLASS ? "1" : "0";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,11 @@
|
|||
package org.umlgraph.doclet;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* String utility functions
|
||||
*
|
||||
* @version $Revision$
|
||||
* @author <a href="http://www.spinellis.gr">Diomidis Spinellis</a>
|
||||
*/
|
||||
|
|
@ -62,4 +64,168 @@ class StringUtil {
|
|||
return r.toArray(new String[0]);
|
||||
}
|
||||
|
||||
private final static Pattern ESCAPE_BASIC_XML = Pattern.compile("[&<>]");
|
||||
|
||||
/**
|
||||
* Escape <, >, and & characters in the string with the corresponding
|
||||
* HTML entity code.
|
||||
*/
|
||||
public static String escape(String s) {
|
||||
if (ESCAPE_BASIC_XML.matcher(s).find()) {
|
||||
StringBuilder sb = new StringBuilder(s);
|
||||
for (int i = 0; i < sb.length();) {
|
||||
switch (sb.charAt(i)) {
|
||||
case '&':
|
||||
sb.replace(i, i + 1, "&");
|
||||
i += "&".length();
|
||||
break;
|
||||
case '<':
|
||||
sb.replace(i, i + 1, "<");
|
||||
i += "<".length();
|
||||
break;
|
||||
case '>':
|
||||
sb.replace(i, i + 1, ">");
|
||||
i += ">".length();
|
||||
break;
|
||||
default:
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
} else
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert embedded newlines into HTML line breaks
|
||||
*/
|
||||
public static String htmlNewline(String s) {
|
||||
if (s.indexOf('\n') == -1)
|
||||
return s;
|
||||
|
||||
StringBuilder sb = new StringBuilder(s);
|
||||
for (int i = 0; i < sb.length();) {
|
||||
if (sb.charAt(i) == '\n') {
|
||||
sb.replace(i, i + 1, "<br/>");
|
||||
i += "<br/>".length();
|
||||
} else
|
||||
i++;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert < and > characters in the string to the respective guillemot
|
||||
* characters.
|
||||
*/
|
||||
public static String guillemize(Options opt, String s) {
|
||||
StringBuilder r = new StringBuilder(s);
|
||||
for (int i = 0; i < r.length();)
|
||||
switch (r.charAt(i)) {
|
||||
case '<':
|
||||
r.replace(i, i + 1, opt.guilOpen);
|
||||
i += opt.guilOpen.length();
|
||||
break;
|
||||
case '>':
|
||||
r.replace(i, i + 1, opt.guilClose);
|
||||
i += opt.guilClose.length();
|
||||
break;
|
||||
default:
|
||||
i++;
|
||||
break;
|
||||
}
|
||||
return r.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps a string in Guillemot (or an ASCII substitute) characters.
|
||||
*
|
||||
* @param str the <code>String</code> to be wrapped.
|
||||
* @return the wrapped <code>String</code>.
|
||||
*/
|
||||
public static String guilWrap(Options opt, String str) {
|
||||
return opt.guilOpen + str + opt.guilClose;
|
||||
}
|
||||
|
||||
/** Removes the template specs from a class name. */
|
||||
public static String removeTemplate(String name) {
|
||||
int openIdx = name.indexOf('<');
|
||||
if (openIdx == -1)
|
||||
return name;
|
||||
StringBuilder buf = new StringBuilder(name.length());
|
||||
for (int i = 0, depth = 0; i < name.length(); i++) {
|
||||
char c = name.charAt(i);
|
||||
if (c == '<')
|
||||
depth++;
|
||||
else if (c == '>')
|
||||
depth--;
|
||||
else if (depth == 0)
|
||||
buf.append(c);
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public static String buildRelativePathFromClassNames(String contextPackageName, String classPackageName) {
|
||||
// path, relative to the root, of the destination class
|
||||
String[] contextClassPath = contextPackageName.split("\\.");
|
||||
String[] currClassPath = classPackageName.split("\\.");
|
||||
|
||||
// compute relative path between the context and the destination
|
||||
// ... first, compute common part
|
||||
int i = 0, e = Math.min(contextClassPath.length, currClassPath.length);
|
||||
while (i < e && contextClassPath[i].equals(currClassPath[i]))
|
||||
i++;
|
||||
// ... go up with ".." to reach the common root
|
||||
StringBuilder buf = new StringBuilder(classPackageName.length());
|
||||
for (int j = i; j < contextClassPath.length; j++)
|
||||
buf.append("../");
|
||||
// ... go down from the common root to the destination
|
||||
for (int j = i; j < currClassPath.length; j++)
|
||||
buf.append(currClassPath[j]).append('/'); // Always use HTML seperators
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* We can't just always use the last dot, because there are inner classes. And
|
||||
* these may have frequent names. But the prime example is
|
||||
* {@link java.util.Map.Entry}, which we want to show up as package
|
||||
* <tt>java.util</tt> and class <tt>Map.Entry</tt>.
|
||||
* <p>
|
||||
* Note: this is only a heuristic. We only have the string here, and must assume
|
||||
* users adhere to Java conventions, of beginning package names with a lowercase
|
||||
* letter.
|
||||
*
|
||||
* @param className
|
||||
* @return Splitting point (Either referring to a dot, or -1)
|
||||
*/
|
||||
public static int splitPackageClass(String className) {
|
||||
int gen = className.indexOf('<'); // Begin before generics.
|
||||
int end = gen >= 0 ? gen : className.length();
|
||||
int start = className.lastIndexOf('.', end);
|
||||
// No package name special cases:
|
||||
if (start < 0)
|
||||
return gen >= 0 || className.isEmpty() ? -1 //
|
||||
: Character.isLowerCase(className.charAt(0)) ? end : -1;
|
||||
int split = end;
|
||||
while (true) {
|
||||
if (Character.isLowerCase(className.charAt(start + 1)))
|
||||
return split;
|
||||
split = start; // Continue, this looks like a class name.
|
||||
if (start < 0)
|
||||
return -1;
|
||||
start = className.lastIndexOf('.', start - 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a double to a string.
|
||||
* <p>
|
||||
* Avoids printing "10.0" for exact values like 10.
|
||||
*
|
||||
* @param val Value
|
||||
* @return Formatted value
|
||||
*/
|
||||
public static String fmt(double val) {
|
||||
return val == Math.round(val) ? Long.toString((long) val) : Double.toString(val);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,17 +25,12 @@ public class SubclassMatcher implements ClassMatcher {
|
|||
return true;
|
||||
|
||||
// recurse on supeclass, if available
|
||||
if(cd.superclass() != null)
|
||||
return matches(cd.superclass());
|
||||
|
||||
return false;
|
||||
return cd.superclass() == null ? false : matches(cd.superclass());
|
||||
}
|
||||
|
||||
public boolean matches(String name) {
|
||||
ClassDoc cd = root.classNamed(name);
|
||||
if(cd == null)
|
||||
return false;
|
||||
return matches(cd);
|
||||
return cd == null ? false : matches(cd);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ public class UmlGraph {
|
|||
commentOptions = new Options();
|
||||
commentOptions.setOptions(root.options());
|
||||
commentOptions.setOptions(findClass(root, "UMLNoteOptions"));
|
||||
commentOptions.shape = new Shape("note");
|
||||
commentOptions.shape = Shape.NOTE;
|
||||
|
||||
Options opt = new Options();
|
||||
opt.setOptions(root.options());
|
||||
|
|
@ -113,14 +113,16 @@ public class UmlGraph {
|
|||
|
||||
ClassGraph c = new ClassGraph(root, op, contextDoc);
|
||||
c.prologue();
|
||||
for (int i = 0; i < classes.length; i++)
|
||||
c.printClass(classes[i], true);
|
||||
for (int i = 0; i < classes.length; i++)
|
||||
c.printRelations(classes[i]);
|
||||
for (ClassDoc cd : classes)
|
||||
c.printClass(cd, true);
|
||||
for (ClassDoc cd : classes)
|
||||
c.printRelations(cd);
|
||||
if(opt.inferRelationships)
|
||||
c.printInferredRelations(classes);
|
||||
for (ClassDoc cd : classes)
|
||||
c.printInferredRelations(cd);
|
||||
if(opt.inferDependencies)
|
||||
c.printInferredDependencies(classes);
|
||||
for (ClassDoc cd : classes)
|
||||
c.printInferredDependencies(cd);
|
||||
|
||||
c.printExtraClasses(root);
|
||||
c.epilogue();
|
||||
|
|
|
|||
|
|
@ -62,12 +62,10 @@ public class UmlGraphDoc {
|
|||
opt.strictMatching = true;
|
||||
// root.printNotice(opt.toString());
|
||||
|
||||
root = new WrappedRootDoc(root);
|
||||
generatePackageDiagrams(root, opt, outputFolder);
|
||||
generateContextDiagrams(root, opt, outputFolder);
|
||||
} catch(Throwable t) {
|
||||
root.printWarning("Error!");
|
||||
root.printWarning(t.toString());
|
||||
root.printWarning("Error: " + t.toString());
|
||||
t.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
|
@ -117,14 +115,18 @@ public class UmlGraphDoc {
|
|||
|
||||
ContextView view = null;
|
||||
for (ClassDoc classDoc : classDocs) {
|
||||
if(view == null)
|
||||
view = new ContextView(outputFolder, classDoc, root, opt);
|
||||
else
|
||||
view.setContextCenter(classDoc);
|
||||
UmlGraph.buildGraph(root, view, classDoc);
|
||||
runGraphviz(opt.dotExecutable, outputFolder, classDoc.containingPackage().name(), classDoc.name(), root);
|
||||
alterHtmlDocs(opt, outputFolder, classDoc.containingPackage().name(), classDoc.name(),
|
||||
classDoc.name() + ".html", Pattern.compile(".*(Class|Interface|Enum) " + classDoc.name() + ".*") , root);
|
||||
try {
|
||||
if(view == null)
|
||||
view = new ContextView(outputFolder, classDoc, root, opt);
|
||||
else
|
||||
view.setContextCenter(classDoc);
|
||||
UmlGraph.buildGraph(root, view, classDoc);
|
||||
runGraphviz(opt.dotExecutable, outputFolder, classDoc.containingPackage().name(), classDoc.name(), root);
|
||||
alterHtmlDocs(opt, outputFolder, classDoc.containingPackage().name(), classDoc.name(),
|
||||
classDoc.name() + ".html", Pattern.compile(".*(Class|Interface|Enum) " + classDoc.name() + ".*") , root);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error generating " + classDoc.name(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* Automatically generated file */
|
||||
package org.umlgraph.doclet;
|
||||
class Version { public static String VERSION = "R5_7_2-49-ge25953";}
|
||||
class Version { public static String VERSION = "R5_7_2-60-g0e99a6";}
|
||||
|
||||
|
|
@ -140,36 +140,30 @@ public class View implements OptionProvider {
|
|||
|
||||
boolean outputSet = false;
|
||||
for (String[] opts : globalOptions) {
|
||||
if (opts[0].equals("-output"))
|
||||
if (Options.matchOption(opts[0], "output"))
|
||||
outputSet = true;
|
||||
go.setOption(opts);
|
||||
}
|
||||
if (!outputSet)
|
||||
go.setOption(new String[] { "-output", viewDoc.name() + ".dot" });
|
||||
go.setOption(new String[] { "output", viewDoc.name() + ".dot" });
|
||||
|
||||
return go;
|
||||
}
|
||||
|
||||
public void overrideForClass(Options opt, ClassDoc cd) {
|
||||
provider.overrideForClass(opt, cd);
|
||||
for (ClassMatcher cm : optionOverrides.keySet()) {
|
||||
if(cm.matches(cd)) {
|
||||
for (String[] override : optionOverrides.get(cm)) {
|
||||
for (ClassMatcher cm : optionOverrides.keySet())
|
||||
if(cm.matches(cd))
|
||||
for (String[] override : optionOverrides.get(cm))
|
||||
opt.setOption(override);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void overrideForClass(Options opt, String className) {
|
||||
provider.overrideForClass(opt, className);
|
||||
for (ClassMatcher cm : optionOverrides.keySet()) {
|
||||
if(cm.matches(className)) {
|
||||
for (String[] override : optionOverrides.get(cm)) {
|
||||
for (ClassMatcher cm : optionOverrides.keySet())
|
||||
if(cm.matches(className))
|
||||
for (String[] override : optionOverrides.get(cm))
|
||||
opt.setOption(override);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,15 @@ import com.sun.javadoc.ProgramElementDoc;
|
|||
* Enumerates the possible visibilities in a Java program. For brevity, package
|
||||
* private visibility is referred as PACKAGE.
|
||||
* @author wolf
|
||||
*
|
||||
*/
|
||||
public enum Visibility {
|
||||
PRIVATE, PACKAGE, PROTECTED, PUBLIC;
|
||||
PRIVATE("- "), PACKAGE("~ "), PROTECTED("# "), PUBLIC("+ ");
|
||||
|
||||
final public String symbol;
|
||||
|
||||
private Visibility(String symbol) {
|
||||
this.symbol = symbol;
|
||||
}
|
||||
|
||||
public static Visibility get(ProgramElementDoc doc) {
|
||||
if (doc.isPrivate())
|
||||
|
|
@ -38,6 +43,5 @@ public enum Visibility {
|
|||
return PROTECTED;
|
||||
else
|
||||
return PUBLIC;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,369 +0,0 @@
|
|||
/*
|
||||
* Create a graphviz graph based on the classes in the specified java
|
||||
* source files.
|
||||
*
|
||||
* (C) Copyright 2002-2005 Diomidis Spinellis
|
||||
*
|
||||
* Permission to use, copy, and distribute this software and its
|
||||
* documentation for any purpose and without fee is hereby granted,
|
||||
* provided that the above copyright notice appear in all copies and that
|
||||
* both that copyright notice and this permission notice appear in
|
||||
* supporting documentation.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
package org.umlgraph.doclet;
|
||||
|
||||
import com.sun.javadoc.AnnotatedType;
|
||||
import com.sun.javadoc.AnnotationDesc;
|
||||
import com.sun.javadoc.AnnotationTypeDoc;
|
||||
import com.sun.javadoc.ClassDoc;
|
||||
import com.sun.javadoc.ConstructorDoc;
|
||||
import com.sun.javadoc.FieldDoc;
|
||||
import com.sun.javadoc.MethodDoc;
|
||||
import com.sun.javadoc.PackageDoc;
|
||||
import com.sun.javadoc.ParamTag;
|
||||
import com.sun.javadoc.ParameterizedType;
|
||||
import com.sun.javadoc.SeeTag;
|
||||
import com.sun.javadoc.SourcePosition;
|
||||
import com.sun.javadoc.Tag;
|
||||
import com.sun.javadoc.Type;
|
||||
import com.sun.javadoc.TypeVariable;
|
||||
import com.sun.javadoc.WildcardType;
|
||||
|
||||
/**
|
||||
* A ClassDoc wrapper that caches answer to the most common requests performed
|
||||
* by UMLGraph, considerably improving the overall UMLDoc performance (ClassDoc
|
||||
* computes most of the results for more fine grained information at each call).
|
||||
* <p>
|
||||
* Unfortunately this has a side effect, since it breaks the equals() call between
|
||||
* plain ClassDoc instances and WrappedClassDoc ones, so use it with due care.
|
||||
* <p>
|
||||
* In particular, don't provide WrappedClassDoc instances to the standard doclet.
|
||||
* @author wolf
|
||||
*
|
||||
*/
|
||||
public class WrappedClassDoc implements ClassDoc {
|
||||
ClassDoc wrapped;
|
||||
String toString;
|
||||
String name;
|
||||
Tag[] tags;
|
||||
|
||||
public WrappedClassDoc(ClassDoc wrapped) {
|
||||
this.wrapped = wrapped;
|
||||
}
|
||||
|
||||
public AnnotationDesc[] annotations() {
|
||||
return wrapped.annotations();
|
||||
}
|
||||
|
||||
public AnnotationTypeDoc asAnnotationTypeDoc() {
|
||||
return wrapped.asAnnotationTypeDoc();
|
||||
}
|
||||
|
||||
public ClassDoc asClassDoc() {
|
||||
return wrapped.asClassDoc();
|
||||
}
|
||||
|
||||
public ParameterizedType asParameterizedType() {
|
||||
return wrapped.asParameterizedType();
|
||||
}
|
||||
|
||||
public TypeVariable asTypeVariable() {
|
||||
return wrapped.asTypeVariable();
|
||||
}
|
||||
|
||||
public WildcardType asWildcardType() {
|
||||
return wrapped.asWildcardType();
|
||||
}
|
||||
|
||||
public String commentText() {
|
||||
return wrapped.commentText();
|
||||
}
|
||||
|
||||
public int compareTo(Object arg0) {
|
||||
if (arg0 instanceof WrappedClassDoc) {
|
||||
WrappedClassDoc other = (WrappedClassDoc) arg0;
|
||||
return wrapped.compareTo(other.wrapped);
|
||||
}
|
||||
return wrapped.compareTo(arg0);
|
||||
}
|
||||
|
||||
public ConstructorDoc[] constructors() {
|
||||
return wrapped.constructors();
|
||||
}
|
||||
|
||||
public ConstructorDoc[] constructors(boolean arg0) {
|
||||
return wrapped.constructors(arg0);
|
||||
}
|
||||
|
||||
public ClassDoc containingClass() {
|
||||
return wrapped.containingClass();
|
||||
}
|
||||
|
||||
public PackageDoc containingPackage() {
|
||||
return wrapped.containingPackage();
|
||||
}
|
||||
|
||||
public boolean definesSerializableFields() {
|
||||
return wrapped.definesSerializableFields();
|
||||
}
|
||||
|
||||
public String dimension() {
|
||||
return wrapped.dimension();
|
||||
}
|
||||
|
||||
public FieldDoc[] enumConstants() {
|
||||
return wrapped.enumConstants();
|
||||
}
|
||||
|
||||
public FieldDoc[] fields() {
|
||||
return wrapped.fields();
|
||||
}
|
||||
|
||||
public FieldDoc[] fields(boolean arg0) {
|
||||
return wrapped.fields(arg0);
|
||||
}
|
||||
|
||||
public ClassDoc findClass(String arg0) {
|
||||
return wrapped.findClass(arg0);
|
||||
}
|
||||
|
||||
public Tag[] firstSentenceTags() {
|
||||
return wrapped.firstSentenceTags();
|
||||
}
|
||||
|
||||
public String getRawCommentText() {
|
||||
return wrapped.getRawCommentText();
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
public @Deprecated ClassDoc[] importedClasses() {
|
||||
return wrapped.importedClasses();
|
||||
}
|
||||
|
||||
/** @deprecated */
|
||||
public @Deprecated PackageDoc[] importedPackages() {
|
||||
return wrapped.importedPackages();
|
||||
}
|
||||
|
||||
public Tag[] inlineTags() {
|
||||
return wrapped.inlineTags();
|
||||
}
|
||||
|
||||
public ClassDoc[] innerClasses() {
|
||||
return wrapped.innerClasses();
|
||||
}
|
||||
|
||||
public ClassDoc[] innerClasses(boolean arg0) {
|
||||
return wrapped.innerClasses(arg0);
|
||||
}
|
||||
|
||||
public ClassDoc[] interfaces() {
|
||||
return wrapped.interfaces();
|
||||
}
|
||||
|
||||
public Type[] interfaceTypes() {
|
||||
return wrapped.interfaceTypes();
|
||||
}
|
||||
|
||||
public boolean isAbstract() {
|
||||
return wrapped.isAbstract();
|
||||
}
|
||||
|
||||
public boolean isAnnotationType() {
|
||||
return wrapped.isAnnotationType();
|
||||
}
|
||||
|
||||
public boolean isAnnotationTypeElement() {
|
||||
return wrapped.isAnnotationTypeElement();
|
||||
}
|
||||
|
||||
public boolean isClass() {
|
||||
return wrapped.isClass();
|
||||
}
|
||||
|
||||
public boolean isConstructor() {
|
||||
return wrapped.isConstructor();
|
||||
}
|
||||
|
||||
public boolean isEnum() {
|
||||
return wrapped.isEnum();
|
||||
}
|
||||
|
||||
public boolean isEnumConstant() {
|
||||
return wrapped.isEnumConstant();
|
||||
}
|
||||
|
||||
public boolean isError() {
|
||||
return wrapped.isError();
|
||||
}
|
||||
|
||||
public boolean isException() {
|
||||
return wrapped.isException();
|
||||
}
|
||||
|
||||
public boolean isExternalizable() {
|
||||
return wrapped.isExternalizable();
|
||||
}
|
||||
|
||||
public boolean isField() {
|
||||
return wrapped.isField();
|
||||
}
|
||||
|
||||
public boolean isFinal() {
|
||||
return wrapped.isFinal();
|
||||
}
|
||||
|
||||
public boolean isIncluded() {
|
||||
return wrapped.isIncluded();
|
||||
}
|
||||
|
||||
public boolean isInterface() {
|
||||
return wrapped.isInterface();
|
||||
}
|
||||
|
||||
public boolean isMethod() {
|
||||
return wrapped.isMethod();
|
||||
}
|
||||
|
||||
public boolean isOrdinaryClass() {
|
||||
return wrapped.isOrdinaryClass();
|
||||
}
|
||||
|
||||
public boolean isPackagePrivate() {
|
||||
return wrapped.isPackagePrivate();
|
||||
}
|
||||
|
||||
public boolean isPrimitive() {
|
||||
return wrapped.isPrimitive();
|
||||
}
|
||||
|
||||
public boolean isPrivate() {
|
||||
return wrapped.isPrivate();
|
||||
}
|
||||
|
||||
public boolean isProtected() {
|
||||
return wrapped.isProtected();
|
||||
}
|
||||
|
||||
public boolean isPublic() {
|
||||
return wrapped.isPublic();
|
||||
}
|
||||
|
||||
public boolean isSerializable() {
|
||||
return wrapped.isSerializable();
|
||||
}
|
||||
|
||||
public boolean isStatic() {
|
||||
return wrapped.isStatic();
|
||||
}
|
||||
|
||||
public MethodDoc[] methods() {
|
||||
return wrapped.methods();
|
||||
}
|
||||
|
||||
public MethodDoc[] methods(boolean arg0) {
|
||||
return wrapped.methods(arg0);
|
||||
}
|
||||
|
||||
public String modifiers() {
|
||||
return wrapped.modifiers();
|
||||
}
|
||||
|
||||
public int modifierSpecifier() {
|
||||
return wrapped.modifierSpecifier();
|
||||
}
|
||||
|
||||
public String name() {
|
||||
if (name == null)
|
||||
name = wrapped.name();
|
||||
return name;
|
||||
}
|
||||
|
||||
public SourcePosition position() {
|
||||
return wrapped.position();
|
||||
}
|
||||
|
||||
public String qualifiedName() {
|
||||
return wrapped.qualifiedName();
|
||||
}
|
||||
|
||||
public String qualifiedTypeName() {
|
||||
return wrapped.qualifiedTypeName();
|
||||
}
|
||||
|
||||
public SeeTag[] seeTags() {
|
||||
return wrapped.seeTags();
|
||||
}
|
||||
|
||||
public FieldDoc[] serializableFields() {
|
||||
return wrapped.serializableFields();
|
||||
}
|
||||
|
||||
public MethodDoc[] serializationMethods() {
|
||||
return wrapped.serializationMethods();
|
||||
}
|
||||
|
||||
public void setRawCommentText(String arg0) {
|
||||
wrapped.setRawCommentText(arg0);
|
||||
}
|
||||
|
||||
public String simpleTypeName() {
|
||||
return wrapped.simpleTypeName();
|
||||
}
|
||||
|
||||
public boolean subclassOf(ClassDoc arg0) {
|
||||
return wrapped.subclassOf(arg0);
|
||||
}
|
||||
|
||||
public ClassDoc superclass() {
|
||||
return wrapped.superclass();
|
||||
}
|
||||
|
||||
public Type superclassType() {
|
||||
return wrapped.superclassType();
|
||||
}
|
||||
|
||||
public Tag[] tags() {
|
||||
if (tags == null)
|
||||
tags = wrapped.tags();
|
||||
return tags;
|
||||
}
|
||||
|
||||
public Tag[] tags(String arg0) {
|
||||
return wrapped.tags(arg0);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
if (toString == null) {
|
||||
toString = wrapped.toString();
|
||||
}
|
||||
return toString;
|
||||
}
|
||||
|
||||
public String typeName() {
|
||||
return wrapped.typeName();
|
||||
}
|
||||
|
||||
public TypeVariable[] typeParameters() {
|
||||
return wrapped.typeParameters();
|
||||
}
|
||||
|
||||
public ParamTag[] typeParamTags() {
|
||||
return wrapped.typeParamTags();
|
||||
}
|
||||
|
||||
public AnnotatedType asAnnotatedType() {
|
||||
return wrapped.asAnnotatedType();
|
||||
}
|
||||
|
||||
public Type getElementType() {
|
||||
return wrapped.getElementType();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,191 +0,0 @@
|
|||
/*
|
||||
* Create a graphviz graph based on the classes in the specified java
|
||||
* source files.
|
||||
*
|
||||
* (C) Copyright 2002-2005 Diomidis Spinellis
|
||||
*
|
||||
* Permission to use, copy, and distribute this software and its
|
||||
* documentation for any purpose and without fee is hereby granted,
|
||||
* provided that the above copyright notice appear in all copies and that
|
||||
* both that copyright notice and this permission notice appear in
|
||||
* supporting documentation.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
package org.umlgraph.doclet;
|
||||
|
||||
import com.sun.javadoc.ClassDoc;
|
||||
import com.sun.javadoc.PackageDoc;
|
||||
import com.sun.javadoc.RootDoc;
|
||||
import com.sun.javadoc.SeeTag;
|
||||
import com.sun.javadoc.SourcePosition;
|
||||
import com.sun.javadoc.Tag;
|
||||
|
||||
/**
|
||||
* RootDoc wrapper that provides WrappedClassDoc instances instead of plain ClassDoc in order
|
||||
* to optimize the overall performance of UMLDoc.
|
||||
* @author wolf
|
||||
*/
|
||||
public class WrappedRootDoc implements RootDoc {
|
||||
RootDoc wrapped;
|
||||
WrappedClassDoc[] wrappedClassDocs;
|
||||
|
||||
public WrappedRootDoc(RootDoc wrapped) {
|
||||
this.wrapped = wrapped;
|
||||
ClassDoc[] classes = wrapped.classes();
|
||||
wrappedClassDocs = new WrappedClassDoc[classes.length];
|
||||
for (int i = 0; i < classes.length; i++) {
|
||||
wrappedClassDocs[i] = new WrappedClassDoc(classes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public ClassDoc[] classes() {
|
||||
return wrappedClassDocs;
|
||||
}
|
||||
|
||||
public ClassDoc classNamed(String arg0) {
|
||||
return wrapped.classNamed(arg0);
|
||||
}
|
||||
|
||||
public String commentText() {
|
||||
return wrapped.commentText();
|
||||
}
|
||||
|
||||
public int compareTo(Object arg0) {
|
||||
return wrapped.compareTo(arg0);
|
||||
}
|
||||
|
||||
public Tag[] firstSentenceTags() {
|
||||
return wrapped.firstSentenceTags();
|
||||
}
|
||||
|
||||
public String getRawCommentText() {
|
||||
return wrapped.getRawCommentText();
|
||||
}
|
||||
|
||||
public Tag[] inlineTags() {
|
||||
return wrapped.inlineTags();
|
||||
}
|
||||
|
||||
public boolean isAnnotationType() {
|
||||
return wrapped.isAnnotationType();
|
||||
}
|
||||
|
||||
public boolean isAnnotationTypeElement() {
|
||||
return wrapped.isAnnotationTypeElement();
|
||||
}
|
||||
|
||||
public boolean isClass() {
|
||||
return wrapped.isClass();
|
||||
}
|
||||
|
||||
public boolean isConstructor() {
|
||||
return wrapped.isConstructor();
|
||||
}
|
||||
|
||||
public boolean isEnum() {
|
||||
return wrapped.isEnum();
|
||||
}
|
||||
|
||||
public boolean isEnumConstant() {
|
||||
return wrapped.isEnumConstant();
|
||||
}
|
||||
|
||||
public boolean isError() {
|
||||
return wrapped.isError();
|
||||
}
|
||||
|
||||
public boolean isException() {
|
||||
return wrapped.isException();
|
||||
}
|
||||
|
||||
public boolean isField() {
|
||||
return wrapped.isField();
|
||||
}
|
||||
|
||||
public boolean isIncluded() {
|
||||
return wrapped.isIncluded();
|
||||
}
|
||||
|
||||
public boolean isInterface() {
|
||||
return wrapped.isInterface();
|
||||
}
|
||||
|
||||
public boolean isMethod() {
|
||||
return wrapped.isMethod();
|
||||
}
|
||||
|
||||
public boolean isOrdinaryClass() {
|
||||
return wrapped.isOrdinaryClass();
|
||||
}
|
||||
|
||||
public String name() {
|
||||
return wrapped.name();
|
||||
}
|
||||
|
||||
public String[][] options() {
|
||||
return wrapped.options();
|
||||
}
|
||||
|
||||
public PackageDoc packageNamed(String arg0) {
|
||||
return wrapped.packageNamed(arg0);
|
||||
}
|
||||
|
||||
public SourcePosition position() {
|
||||
return wrapped.position();
|
||||
}
|
||||
|
||||
public void printError(SourcePosition arg0, String arg1) {
|
||||
wrapped.printError(arg0, arg1);
|
||||
}
|
||||
|
||||
public void printError(String arg0) {
|
||||
wrapped.printError(arg0);
|
||||
}
|
||||
|
||||
public void printNotice(SourcePosition arg0, String arg1) {
|
||||
wrapped.printNotice(arg0, arg1);
|
||||
}
|
||||
|
||||
public void printNotice(String arg0) {
|
||||
wrapped.printNotice(arg0);
|
||||
}
|
||||
|
||||
public void printWarning(SourcePosition arg0, String arg1) {
|
||||
wrapped.printWarning(arg0, arg1);
|
||||
}
|
||||
|
||||
public void printWarning(String arg0) {
|
||||
wrapped.printWarning(arg0);
|
||||
}
|
||||
|
||||
public SeeTag[] seeTags() {
|
||||
return wrapped.seeTags();
|
||||
}
|
||||
|
||||
public void setRawCommentText(String arg0) {
|
||||
wrapped.setRawCommentText(arg0);
|
||||
}
|
||||
|
||||
public ClassDoc[] specifiedClasses() {
|
||||
return wrapped.specifiedClasses();
|
||||
}
|
||||
|
||||
public PackageDoc[] specifiedPackages() {
|
||||
return wrapped.specifiedPackages();
|
||||
}
|
||||
|
||||
public Tag[] tags() {
|
||||
return wrapped.tags();
|
||||
}
|
||||
|
||||
public Tag[] tags(String arg0) {
|
||||
return wrapped.tags(arg0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -64,6 +64,7 @@ public class BasicTest {
|
|||
pw.println();
|
||||
pw.println();
|
||||
pw.flush();
|
||||
System.exit(differences.size() > 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
private static void performViewTests(List<String> differences, File outFolder)
|
||||
|
|
|
|||
|
|
@ -166,16 +166,15 @@ public class DotDiff {
|
|||
int closedBracketIdx = line.lastIndexOf(']');
|
||||
int arrowIdx = line.indexOf("->");
|
||||
if (openBrackedIdx < 0 && closedBracketIdx < 0 || line.startsWith("edge")
|
||||
|| line.startsWith("node"))
|
||||
|| line.startsWith("node") || line.startsWith("graph"))
|
||||
extraLines.add(line);
|
||||
else if (arrowIdx > 0 && arrowIdx < openBrackedIdx) { // that's an arc
|
||||
arcLines.add(line);
|
||||
} else { // that's a node
|
||||
String attributes = line.substring(openBrackedIdx + 1, closedBracketIdx);
|
||||
Map<String, String> attMap = parseAttributes(attributes);
|
||||
String name = line.substring(0, openBrackedIdx - 1).trim();
|
||||
String label = attMap.get("label");
|
||||
DotNode node = new DotNode(name, label, attMap, line);
|
||||
String name = trim(line.substring(0, openBrackedIdx - 1));
|
||||
DotNode node = new DotNode(name, attMap.get("label"), attMap, line);
|
||||
nodes.put(name, node);
|
||||
nodeList.add(node);
|
||||
}
|
||||
|
|
@ -185,19 +184,21 @@ public class DotDiff {
|
|||
int closedBracketIdx = line.lastIndexOf(']');
|
||||
String attributes = line.substring(openBrackedIdx + 1, closedBracketIdx);
|
||||
String[] names = line.substring(0, openBrackedIdx).split("->");
|
||||
DotNode from = nodes.get(names[0].trim());
|
||||
DotNode to = nodes.get(names[1].trim());
|
||||
if (from == null) {
|
||||
from = new DotNode(names[0], "", new HashMap<String, String>(), "");
|
||||
}
|
||||
if (to == null) {
|
||||
to = new DotNode(names[1], "", new HashMap<String, String>(), "");
|
||||
}
|
||||
DotNode from = nodes.get(names[0] = trim(names[0]));
|
||||
DotNode to = nodes.get(names[1] = trim(names[1]));
|
||||
from = from != null ? from : new DotNode(names[0], "", new HashMap<String, String>(), "");
|
||||
to = to != null? to : new DotNode(names[1], "", new HashMap<String, String>(), "");
|
||||
arcs.add(new DotArc(from, to, parseAttributes(attributes), line));
|
||||
}
|
||||
return extraLines;
|
||||
}
|
||||
|
||||
// Trim space AND port.
|
||||
private String trim(String name) {
|
||||
name = name.trim();
|
||||
return name.endsWith(":p") ? name.substring(0, name.length() - 2) : name;
|
||||
}
|
||||
|
||||
private Map<String, String> parseAttributes(String attributes) throws IOException {
|
||||
Map<String, String> map = new HashMap<String, String>();
|
||||
|
||||
|
|
|
|||
|
|
@ -148,10 +148,11 @@ public class UmlDocTest {
|
|||
private static void runDoclet(String[] options) {
|
||||
pw.print("Run javadoc -doclet " + doclet);
|
||||
for (String o : options)
|
||||
pw.print(o + " ");
|
||||
pw.print(" " + o);
|
||||
pw.println();
|
||||
com.sun.tools.javadoc.Main.execute("UMLDoc test", pw, pw, pw,
|
||||
doclet, options);
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1 @@
|
|||
*.dot
|
||||
*.png
|
||||
|
|
|
|||
|
|
@ -5,21 +5,22 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// test.AbstractNode
|
||||
c1 [label=<<table title="test.AbstractNode" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="Helvetica-Oblique"> AbstractNode </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> abstractMethod() </font></td></tr><tr><td align="left" balign="left"> concreteMethod() </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// test.InnerNode
|
||||
c2 [label=<<table title="test.InnerNode" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InnerNode </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// test.Leaf
|
||||
c3 [label=<<table title="test.Leaf" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Leaf </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//test.InnerNode extends test.AbstractNode
|
||||
c1:p -> c2:p [dir=back,arrowtail=empty];
|
||||
// test.InnerNode COMPOSED test.AbstractNode
|
||||
c2:p -> c1:p [taillabel="1", label="has", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
//test.Leaf extends test.AbstractNode
|
||||
c1:p -> c3:p [dir=back,arrowtail=empty];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// test.AbstractNode
|
||||
c1 [label=<<table title="test.AbstractNode" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> AbstractNode </i></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i> abstractMethod() </i></td></tr><tr><td align="left" balign="left"> concreteMethod() </td></tr></table></td></tr></table>>];
|
||||
// test.InnerNode
|
||||
c2 [label=<<table title="test.InnerNode" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InnerNode </td></tr></table></td></tr></table>>];
|
||||
// test.Leaf
|
||||
c3 [label=<<table title="test.Leaf" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Leaf </td></tr></table></td></tr></table>>];
|
||||
// test.InnerNode extends test.AbstractNode
|
||||
c1 -> c2 [arrowtail=empty,dir=back,weight=10];
|
||||
// test.InnerNode composed test.AbstractNode
|
||||
c2 -> c1 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", label="has", headlabel="*"];
|
||||
// test.Leaf extends test.AbstractNode
|
||||
c1 -> c3 [arrowtail=empty,dir=back,weight=10];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,45 +5,46 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// A
|
||||
c66 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> first : B </td></tr><tr><td align="left" balign="left"> second : B </td></tr><tr><td align="left" balign="left"> third : C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// B
|
||||
c67 [label=<<table title="B" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> doSomething(b : B, c : C) : A </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// C
|
||||
c68 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> collectionOfA : List<A> </td></tr><tr><td align="left" balign="left"> collectionOfB : ArrayList<B> </td></tr><tr><td align="left" balign="left"> mapOfD : Map<String, D> </td></tr><tr><td align="left" balign="left"> childs : C[] </td></tr><tr><td align="left" balign="left"> anOpaqueList : List<> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// MyFunnyList<T, V>
|
||||
c69 [label=<<table title="MyFunnyList" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyFunnyList<T, V> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> myField : V </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// MyList
|
||||
c70 [label=<<table title="MyList" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyList </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// D
|
||||
c71 [label=<<table title="D" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> anotherListOfA : MyList </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//MyFunnyList<T, V> extends java.util.ArrayList<T>
|
||||
c72:p -> c69:p [dir=back,arrowtail=empty];
|
||||
//MyList extends MyFunnyList<A, B>
|
||||
c69:p -> c70:p [dir=back,arrowtail=empty];
|
||||
// A HAS B
|
||||
c66:p -> c67:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both];
|
||||
// A HAS C
|
||||
c66:p -> c68:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both];
|
||||
// C NAVASSOC B
|
||||
c68:p -> c67:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// C NAVASSOC D
|
||||
c68:p -> c71:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// C NAVASSOC C
|
||||
c68:p -> c68:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// C NAVASSOC java.util.List<E>
|
||||
c68:p -> c73:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// D NAVASSOC MyList
|
||||
c71:p -> c70:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// B DEPEND A
|
||||
c67:p -> c66:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
// java.util.List<E>
|
||||
c73 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> List<E> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> size() : int </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> isEmpty() : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> contains(arg0 : Object) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> iterator() : Iterator<E> </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> toArray() : Object[] </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> toArray(arg0 : T[]) : T[] </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> add(arg0 : E) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> remove(arg0 : Object) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> containsAll(arg0 : Collection<?>) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> addAll(arg0 : Collection<?>) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> addAll(arg0 : int, arg1 : Collection<?>) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> removeAll(arg0 : Collection<?>) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> retainAll(arg0 : Collection<?>) : boolean </font></td></tr><tr><td align="left" balign="left"> replaceAll(arg0 : UnaryOperator<E>) </td></tr><tr><td align="left" balign="left"> sort(arg0 : Comparator<?>) </td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> clear() </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> equals(arg0 : Object) : boolean </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> hashCode() : int </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> get(arg0 : int) : E </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> set(arg0 : int, arg1 : E) : E </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> add(arg0 : int, arg1 : E) </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> remove(arg0 : int) : E </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> indexOf(arg0 : Object) : int </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> lastIndexOf(arg0 : Object) : int </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> listIterator() : ListIterator<E> </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> listIterator(arg0 : int) : ListIterator<E> </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> subList(arg0 : int, arg1 : int) : List<E> </font></td></tr><tr><td align="left" balign="left"> spliterator() : Spliterator<E> </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// java.util.ArrayList<E>
|
||||
c72 [label=<<table title="java.util.ArrayList" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ArrayList<E> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> serialVersionUID : long </td></tr><tr><td align="left" balign="left"> DEFAULT_CAPACITY : int </td></tr><tr><td align="left" balign="left"> EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left"> DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left"> elementData : Object[] </td></tr><tr><td align="left" balign="left"> size : int </td></tr><tr><td align="left" balign="left"> MAX_ARRAY_SIZE : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> trimToSize() </td></tr><tr><td align="left" balign="left"> ensureCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left"> ensureCapacityInternal(arg0 : int) </td></tr><tr><td align="left" balign="left"> ensureExplicitCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left"> grow(arg0 : int) </td></tr><tr><td align="left" balign="left"> hugeCapacity(arg0 : int) : int </td></tr><tr><td align="left" balign="left"> size() : int </td></tr><tr><td align="left" balign="left"> isEmpty() : boolean </td></tr><tr><td align="left" balign="left"> contains(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> indexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> lastIndexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> clone() : Object </td></tr><tr><td align="left" balign="left"> toArray() : Object[] </td></tr><tr><td align="left" balign="left"> toArray(arg0 : T[]) : T[] </td></tr><tr><td align="left" balign="left"> elementData(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> get(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> set(arg0 : int, arg1 : E) : E </td></tr><tr><td align="left" balign="left"> add(arg0 : E) : boolean </td></tr><tr><td align="left" balign="left"> add(arg0 : int, arg1 : E) </td></tr><tr><td align="left" balign="left"> remove(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> remove(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> fastRemove(arg0 : int) </td></tr><tr><td align="left" balign="left"> clear() </td></tr><tr><td align="left" balign="left"> addAll(arg0 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> addAll(arg0 : int, arg1 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> removeRange(arg0 : int, arg1 : int) </td></tr><tr><td align="left" balign="left"> rangeCheck(arg0 : int) </td></tr><tr><td align="left" balign="left"> rangeCheckForAdd(arg0 : int) </td></tr><tr><td align="left" balign="left"> outOfBoundsMsg(arg0 : int) : String </td></tr><tr><td align="left" balign="left"> removeAll(arg0 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> retainAll(arg0 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> batchRemove(arg0 : Collection<?>, arg1 : boolean) : boolean </td></tr><tr><td align="left" balign="left"> writeObject(arg0 : ObjectOutputStream) </td></tr><tr><td align="left" balign="left"> readObject(arg0 : ObjectInputStream) </td></tr><tr><td align="left" balign="left"> listIterator(arg0 : int) : ListIterator<E> </td></tr><tr><td align="left" balign="left"> listIterator() : ListIterator<E> </td></tr><tr><td align="left" balign="left"> iterator() : Iterator<E> </td></tr><tr><td align="left" balign="left"> subList(arg0 : int, arg1 : int) : List<E> </td></tr><tr><td align="left" balign="left"> subListRangeCheck(arg0 : int, arg1 : int, arg2 : int) </td></tr><tr><td align="left" balign="left"> forEach(arg0 : Consumer<?>) </td></tr><tr><td align="left" balign="left"> spliterator() : Spliterator<E> </td></tr><tr><td align="left" balign="left"> removeIf(arg0 : Predicate<?>) : boolean </td></tr><tr><td align="left" balign="left"> replaceAll(arg0 : UnaryOperator<E>) </td></tr><tr><td align="left" balign="left"> sort(arg0 : Comparator<?>) </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// A
|
||||
c66 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> first : B </td></tr><tr><td align="left" balign="left"> second : B </td></tr><tr><td align="left" balign="left"> third : C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// B
|
||||
c67 [label=<<table title="B" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> doSomething(b : B, c : C) : A </td></tr></table></td></tr></table>>];
|
||||
// C
|
||||
c68 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> collectionOfA : List<A> </td></tr><tr><td align="left" balign="left"> collectionOfB : ArrayList<B> </td></tr><tr><td align="left" balign="left"> mapOfD : Map<String, D> </td></tr><tr><td align="left" balign="left"> childs : C[] </td></tr><tr><td align="left" balign="left"> anOpaqueList : List<> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// MyFunnyList<T, V>
|
||||
c69 [label=<<table title="MyFunnyList" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyFunnyList<T, V> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> myField : V </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// MyList
|
||||
c70 [label=<<table title="MyList" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> MyList </td></tr></table></td></tr></table>>];
|
||||
// D
|
||||
c71 [label=<<table title="D" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> anotherListOfA : MyList </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// MyFunnyList<T, V> extends java.util.ArrayList<T>
|
||||
c72 -> c69 [arrowtail=empty,dir=back,weight=10];
|
||||
// MyList extends MyFunnyList<A, B>
|
||||
c69 -> c70 [arrowtail=empty,dir=back,weight=10];
|
||||
// A has B
|
||||
c66 -> c67 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4];
|
||||
// A has C
|
||||
c66 -> c68 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4];
|
||||
// C navassoc B
|
||||
c68 -> c67 [arrowhead=open,weight=1,headlabel="*"];
|
||||
// C navassoc D
|
||||
c68 -> c71 [arrowhead=open,weight=1,headlabel="*"];
|
||||
// C navassoc C
|
||||
c68 -> c68 [arrowhead=open,weight=1,headlabel="*"];
|
||||
// C navassoc java.util.List<E>
|
||||
c68 -> c73 [arrowhead=open,weight=1];
|
||||
// D navassoc MyList
|
||||
c71 -> c70 [arrowhead=open,weight=1];
|
||||
// B depend A
|
||||
c67 -> c66 [arrowhead=open,style=dashed,weight=0];
|
||||
// java.util.List<E>
|
||||
c73 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> List<E> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i> size() : int </i></td></tr><tr><td align="left" balign="left"><i> isEmpty() : boolean </i></td></tr><tr><td align="left" balign="left"><i> contains(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i> iterator() : Iterator<E> </i></td></tr><tr><td align="left" balign="left"><i> toArray() : Object[] </i></td></tr><tr><td align="left" balign="left"><i> toArray(arg0 : T[]) : T[] </i></td></tr><tr><td align="left" balign="left"><i> add(arg0 : E) : boolean </i></td></tr><tr><td align="left" balign="left"><i> remove(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i> containsAll(arg0 : Collection<?>) : boolean </i></td></tr><tr><td align="left" balign="left"><i> addAll(arg0 : Collection<?>) : boolean </i></td></tr><tr><td align="left" balign="left"><i> addAll(arg0 : int, arg1 : Collection<?>) : boolean </i></td></tr><tr><td align="left" balign="left"><i> removeAll(arg0 : Collection<?>) : boolean </i></td></tr><tr><td align="left" balign="left"><i> retainAll(arg0 : Collection<?>) : boolean </i></td></tr><tr><td align="left" balign="left"> replaceAll(arg0 : UnaryOperator<E>) </td></tr><tr><td align="left" balign="left"> sort(arg0 : Comparator<?>) </td></tr><tr><td align="left" balign="left"><i> clear() </i></td></tr><tr><td align="left" balign="left"><i> equals(arg0 : Object) : boolean </i></td></tr><tr><td align="left" balign="left"><i> hashCode() : int </i></td></tr><tr><td align="left" balign="left"><i> get(arg0 : int) : E </i></td></tr><tr><td align="left" balign="left"><i> set(arg0 : int, arg1 : E) : E </i></td></tr><tr><td align="left" balign="left"><i> add(arg0 : int, arg1 : E) </i></td></tr><tr><td align="left" balign="left"><i> remove(arg0 : int) : E </i></td></tr><tr><td align="left" balign="left"><i> indexOf(arg0 : Object) : int </i></td></tr><tr><td align="left" balign="left"><i> lastIndexOf(arg0 : Object) : int </i></td></tr><tr><td align="left" balign="left"><i> listIterator() : ListIterator<E> </i></td></tr><tr><td align="left" balign="left"><i> listIterator(arg0 : int) : ListIterator<E> </i></td></tr><tr><td align="left" balign="left"><i> subList(arg0 : int, arg1 : int) : List<E> </i></td></tr><tr><td align="left" balign="left"> spliterator() : Spliterator<E> </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
|
||||
// java.util.ArrayList<E>
|
||||
c72 [label=<<table title="java.util.ArrayList" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ArrayList<E> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> serialVersionUID : long </td></tr><tr><td align="left" balign="left"> DEFAULT_CAPACITY : int </td></tr><tr><td align="left" balign="left"> EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left"> DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[] </td></tr><tr><td align="left" balign="left"> elementData : Object[] </td></tr><tr><td align="left" balign="left"> size : int </td></tr><tr><td align="left" balign="left"> MAX_ARRAY_SIZE : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> trimToSize() </td></tr><tr><td align="left" balign="left"> ensureCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left"> ensureCapacityInternal(arg0 : int) </td></tr><tr><td align="left" balign="left"> ensureExplicitCapacity(arg0 : int) </td></tr><tr><td align="left" balign="left"> grow(arg0 : int) </td></tr><tr><td align="left" balign="left"> hugeCapacity(arg0 : int) : int </td></tr><tr><td align="left" balign="left"> size() : int </td></tr><tr><td align="left" balign="left"> isEmpty() : boolean </td></tr><tr><td align="left" balign="left"> contains(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> indexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> lastIndexOf(arg0 : Object) : int </td></tr><tr><td align="left" balign="left"> clone() : Object </td></tr><tr><td align="left" balign="left"> toArray() : Object[] </td></tr><tr><td align="left" balign="left"> toArray(arg0 : T[]) : T[] </td></tr><tr><td align="left" balign="left"> elementData(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> get(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> set(arg0 : int, arg1 : E) : E </td></tr><tr><td align="left" balign="left"> add(arg0 : E) : boolean </td></tr><tr><td align="left" balign="left"> add(arg0 : int, arg1 : E) </td></tr><tr><td align="left" balign="left"> remove(arg0 : int) : E </td></tr><tr><td align="left" balign="left"> remove(arg0 : Object) : boolean </td></tr><tr><td align="left" balign="left"> fastRemove(arg0 : int) </td></tr><tr><td align="left" balign="left"> clear() </td></tr><tr><td align="left" balign="left"> addAll(arg0 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> addAll(arg0 : int, arg1 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> removeRange(arg0 : int, arg1 : int) </td></tr><tr><td align="left" balign="left"> rangeCheck(arg0 : int) </td></tr><tr><td align="left" balign="left"> rangeCheckForAdd(arg0 : int) </td></tr><tr><td align="left" balign="left"> outOfBoundsMsg(arg0 : int) : String </td></tr><tr><td align="left" balign="left"> removeAll(arg0 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> retainAll(arg0 : Collection<?>) : boolean </td></tr><tr><td align="left" balign="left"> batchRemove(arg0 : Collection<?>, arg1 : boolean) : boolean </td></tr><tr><td align="left" balign="left"> writeObject(arg0 : ObjectOutputStream) </td></tr><tr><td align="left" balign="left"> readObject(arg0 : ObjectInputStream) </td></tr><tr><td align="left" balign="left"> listIterator(arg0 : int) : ListIterator<E> </td></tr><tr><td align="left" balign="left"> listIterator() : ListIterator<E> </td></tr><tr><td align="left" balign="left"> iterator() : Iterator<E> </td></tr><tr><td align="left" balign="left"> subList(arg0 : int, arg1 : int) : List<E> </td></tr><tr><td align="left" balign="left"> subListRangeCheck(arg0 : int, arg1 : int, arg2 : int) </td></tr><tr><td align="left" balign="left"> forEach(arg0 : Consumer<?>) </td></tr><tr><td align="left" balign="left"> spliterator() : Spliterator<E> </td></tr><tr><td align="left" balign="left"> removeIf(arg0 : Predicate<?>) : boolean </td></tr><tr><td align="left" balign="left"> replaceAll(arg0 : UnaryOperator<E>) </td></tr><tr><td align="left" balign="left"> sort(arg0 : Comparator<?>) </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,19 +5,20 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Application
|
||||
c74 [label=<<table title="Application" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Application </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// IrpApplication
|
||||
c75 [label=<<table title="IrpApplication" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> IrpApplication </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Main
|
||||
c76 [label=<<table title="Main" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Main </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//IrpApplication extends Application
|
||||
c74:p -> c75:p [dir=back,arrowtail=empty];
|
||||
// Main DEPEND IrpApplication
|
||||
c76:p -> c75:p [taillabel="", label="«friend»", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Application
|
||||
c74 [label=<<table title="Application" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Application </td></tr></table></td></tr></table>>];
|
||||
// IrpApplication
|
||||
c75 [label=<<table title="IrpApplication" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> IrpApplication </td></tr></table></td></tr></table>>];
|
||||
// Main
|
||||
c76 [label=<<table title="Main" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Main </td></tr></table></td></tr></table>>];
|
||||
// IrpApplication extends Application
|
||||
c74 -> c75 [arrowtail=empty,dir=back,weight=10];
|
||||
// Main depend IrpApplication
|
||||
c76 -> c75 [arrowhead=open,style=dashed,weight=0,label="«friend»"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// A
|
||||
c81 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// C
|
||||
c83 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// A DEPEND C
|
||||
c81:p -> c83:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// A
|
||||
c81 [label=<<table title="A" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>];
|
||||
// C
|
||||
c83 [label=<<table title="C" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> C </td></tr></table></td></tr></table>>];
|
||||
// A depend C
|
||||
c81 -> c83 [arrowhead=open,style=dashed,weight=0];
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -5,43 +5,44 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Root
|
||||
c90 [label=<<table title="Root" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Root </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Adapter
|
||||
c91 [label=<<table title="Adapter" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Adapter </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Element
|
||||
c92 [label=<<table title="Element" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="Helvetica-Oblique"> Element </font></td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ObjectType
|
||||
c93 [label=<<table title="ObjectType" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectType </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ObjectMap
|
||||
c94 [label=<<table title="ObjectMap" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectMap </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Table
|
||||
c95 [label=<<table title="Table" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Table </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// DataOperation
|
||||
c96 [label=<<table title="DataOperation" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DataOperation </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Root ASSOC Adapter
|
||||
c90:p -> c91:p [taillabel="1..1", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Root ASSOC ObjectType
|
||||
c90:p -> c93:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Root ASSOC ObjectMap
|
||||
c90:p -> c94:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Root ASSOC Table
|
||||
c90:p -> c95:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Root ASSOC DataOperation
|
||||
c90:p -> c96:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
//ObjectType extends Element
|
||||
c92:p -> c93:p [dir=back,arrowtail=empty];
|
||||
//ObjectMap extends Element
|
||||
c92:p -> c94:p [dir=back,arrowtail=empty];
|
||||
// ObjectMap HAS ObjectType
|
||||
c94:p -> c93:p [taillabel="1..1", label="", headlabel="1..1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both];
|
||||
//Table extends Element
|
||||
c92:p -> c95:p [dir=back,arrowtail=empty];
|
||||
//DataOperation extends Element
|
||||
c92:p -> c96:p [dir=back,arrowtail=empty];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Root
|
||||
c90 [label=<<table title="Root" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Root </td></tr></table></td></tr></table>>];
|
||||
// Adapter
|
||||
c91 [label=<<table title="Adapter" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Adapter </td></tr></table></td></tr></table>>];
|
||||
// Element
|
||||
c92 [label=<<table title="Element" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> Element </i></td></tr></table></td></tr></table>>];
|
||||
// ObjectType
|
||||
c93 [label=<<table title="ObjectType" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectType </td></tr></table></td></tr></table>>];
|
||||
// ObjectMap
|
||||
c94 [label=<<table title="ObjectMap" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ObjectMap </td></tr></table></td></tr></table>>];
|
||||
// Table
|
||||
c95 [label=<<table title="Table" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Table </td></tr></table></td></tr></table>>];
|
||||
// DataOperation
|
||||
c96 [label=<<table title="DataOperation" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DataOperation </td></tr></table></td></tr></table>>];
|
||||
// Root assoc Adapter
|
||||
c90 -> c91 [arrowhead=none,weight=2,taillabel="1..1", headlabel="0..n"];
|
||||
// Root assoc ObjectType
|
||||
c90 -> c93 [arrowhead=none,weight=2,headlabel="0..n"];
|
||||
// Root assoc ObjectMap
|
||||
c90 -> c94 [arrowhead=none,weight=2,headlabel="0..n"];
|
||||
// Root assoc Table
|
||||
c90 -> c95 [arrowhead=none,weight=2,headlabel="0..n"];
|
||||
// Root assoc DataOperation
|
||||
c90 -> c96 [arrowhead=none,weight=2,headlabel="0..n"];
|
||||
// ObjectType extends Element
|
||||
c92 -> c93 [arrowtail=empty,dir=back,weight=10];
|
||||
// ObjectMap extends Element
|
||||
c92 -> c94 [arrowtail=empty,dir=back,weight=10];
|
||||
// ObjectMap has ObjectType
|
||||
c94 -> c93 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..1", headlabel="1..1"];
|
||||
// Table extends Element
|
||||
c92 -> c95 [arrowtail=empty,dir=back,weight=10];
|
||||
// DataOperation extends Element
|
||||
c92 -> c96 [arrowtail=empty,dir=back,weight=10];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// test.RunnableRef
|
||||
c98 [label=<<table title="test.RunnableRef" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RunnableRef </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// test.RunnableRef DEPEND java.lang.Runnable
|
||||
c98:p -> c99:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
// java.lang.Runnable
|
||||
c99 [label=<<table title="java.lang.Runnable" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> Runnable </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// test.RunnableRef
|
||||
c98 [label=<<table title="test.RunnableRef" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RunnableRef </td></tr></table></td></tr></table>>];
|
||||
// test.RunnableRef depend java.lang.Runnable
|
||||
c98 -> c99 [arrowhead=open,style=dashed,weight=0];
|
||||
// java.lang.Runnable
|
||||
c99 [label=<<table title="java.lang.Runnable" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> Runnable </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,23 +5,24 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="arial",fontsize=10,labelfontname="arial",labelfontsize=10];
|
||||
node [fontname="arial",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// net.sf.whatever.test.AbstractBase
|
||||
c112 [label=<<table title="net.sf.whatever.test.AbstractBase" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «base» </td></tr><tr><td align="center" balign="center"><font face="arial"> AbstractBase </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr><tr><td align="right" balign="right"><font face="arial" point-size="6.0"> {since = 1.0} </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> field : int </td></tr><tr><td align="right" balign="right"><font face="arial" point-size="6.0"> {since = 1.5} </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="9.0"> abstractMethod() </font></td></tr><tr><td align="left" balign="left"> concreteMethod() : int </td></tr></table></td></tr></table>>, URL="null", fontname="arial", fontcolor="black", fontsize=9.0];
|
||||
// net.sf.whatever.test.Composite
|
||||
c113 [label=<<table title="net.sf.whatever.test.Composite" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> Composite </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr></table></td></tr></table>>, URL="null", fontname="arial", fontcolor="black", fontsize=9.0];
|
||||
// net.sf.whatever.test.Style
|
||||
c114 [label=<<table title="net.sf.whatever.test.Style" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> Style </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr></table></td></tr></table>>, URL="null", fontname="arial", fontcolor="black", fontsize=9.0];
|
||||
//net.sf.whatever.test.Composite extends net.sf.whatever.test.AbstractBase
|
||||
c112:p -> c113:p [dir=back,arrowtail=empty];
|
||||
// net.sf.whatever.test.Composite COMPOSED from.Outer.Space.AlienClass
|
||||
c113:p -> c115:p [taillabel="1", label="has", headlabel="*", fontname="arial", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
//net.sf.whatever.test.Style extends net.sf.whatever.test.AbstractBase
|
||||
c112:p -> c114:p [dir=back,arrowtail=empty];
|
||||
// from.Outer.Space.AlienClass
|
||||
c115[label=<<table title="from.Outer.Space.AlienClass" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/from/Outer/Space/AlienClass.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> AlienClass </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> from.Outer.Space </font></td></tr></table></td></tr></table>>, fontname="arial", fontcolor="black", fontsize=9.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="arial",fontsize=10,labelfontname="arial",labelfontsize=10,color="black"];
|
||||
node [fontname="arial",fontcolor="black",fontsize=9,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// net.sf.whatever.test.AbstractBase
|
||||
c112 [label=<<table title="net.sf.whatever.test.AbstractBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «base» </td></tr><tr><td align="center" balign="center"><font face="arial"> AbstractBase </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr><tr><td align="right" balign="right"><font face="arial" point-size="6.0"> {since = 1.0} </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> field : int </td></tr><tr><td align="right" balign="right"><font face="arial" point-size="6.0"> {since = 1.5} </font></td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i> abstractMethod() </i></td></tr><tr><td align="left" balign="left"> concreteMethod() : int </td></tr></table></td></tr></table>>];
|
||||
// net.sf.whatever.test.Composite
|
||||
c113 [label=<<table title="net.sf.whatever.test.Composite" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> Composite </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr></table></td></tr></table>>];
|
||||
// net.sf.whatever.test.Style
|
||||
c114 [label=<<table title="net.sf.whatever.test.Style" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> Style </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> net.sf.whatever.test </font></td></tr></table></td></tr></table>>];
|
||||
// net.sf.whatever.test.Composite extends net.sf.whatever.test.AbstractBase
|
||||
c112 -> c113 [arrowtail=empty,dir=back,weight=10];
|
||||
// net.sf.whatever.test.Composite composed from.Outer.Space.AlienClass
|
||||
c113 -> c115 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",label="has",headlabel="*"];
|
||||
// net.sf.whatever.test.Style extends net.sf.whatever.test.AbstractBase
|
||||
c112 -> c114 [arrowtail=empty,dir=back,weight=10];
|
||||
// from.Outer.Space.AlienClass
|
||||
c115[label=<<table title="from.Outer.Space.AlienClass" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/from/Outer.Space.AlienClass.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="arial"> AlienClass </font></td></tr><tr><td align="center" balign="center"><font point-size="8.0"> from.Outer.Space </font></td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// test.TestHideOp
|
||||
c117 [label=<<table title="test.TestHideOp" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> TestHideOp </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// test.TestHideOp
|
||||
c117 [label=<<table title="test.TestHideOp" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> TestHideOp </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,27 +5,28 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c355 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c356 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c357 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c358 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c359 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product
|
||||
c355:p -> c358:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer
|
||||
c356:p -> c357:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem
|
||||
c356:p -> c355:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c358:p -> c359:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c355 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c356 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c357 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c358 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c359 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
|
||||
c355 -> c358 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
|
||||
c356 -> c357 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
|
||||
c356 -> c355 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c358 -> c359 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,27 +5,28 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c317 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> product : Product </td></tr><tr><td align="left" balign="left"> quantity : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c318 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> total : double </td></tr><tr><td align="left" balign="left"> items : InvoiceItem[] </td></tr><tr><td align="left" balign="left"> customer : Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> addItem(p : Product, quantity : int) </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c319 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c320 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : String </td></tr><tr><td align="left" balign="left"> stock : int </td></tr><tr><td align="left" balign="left"> price : double </td></tr><tr><td align="left" balign="left"> category : Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c321 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : String </td></tr><tr><td align="left" balign="left"> products : List<> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product
|
||||
c317:p -> c320:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer
|
||||
c318:p -> c319:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem
|
||||
c318:p -> c317:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c320:p -> c321:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c317 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> product : Product </td></tr><tr><td align="left" balign="left"> quantity : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c318 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> total : double </td></tr><tr><td align="left" balign="left"> items : InvoiceItem[] </td></tr><tr><td align="left" balign="left"> customer : Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> addItem(p : Product, quantity : int) </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c319 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c320 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : String </td></tr><tr><td align="left" balign="left"> stock : int </td></tr><tr><td align="left" balign="left"> price : double </td></tr><tr><td align="left" balign="left"> category : Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c321 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : String </td></tr><tr><td align="left" balign="left"> products : List<> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
|
||||
c317 -> c320 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
|
||||
c318 -> c319 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
|
||||
c318 -> c317 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c320 -> c321 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,27 +5,28 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c279 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> product </td></tr><tr><td align="left" balign="left"> quantity </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c280 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> total </td></tr><tr><td align="left" balign="left"> items </td></tr><tr><td align="left" balign="left"> customer </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c281 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c282 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> stock </td></tr><tr><td align="left" balign="left"> price </td></tr><tr><td align="left" balign="left"> category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c283 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> products </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product
|
||||
c279:p -> c282:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer
|
||||
c280:p -> c281:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem
|
||||
c280:p -> c279:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c282:p -> c283:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c279 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> product </td></tr><tr><td align="left" balign="left"> quantity </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c280 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> total </td></tr><tr><td align="left" balign="left"> items </td></tr><tr><td align="left" balign="left"> customer </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c281 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c282 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> stock </td></tr><tr><td align="left" balign="left"> price </td></tr><tr><td align="left" balign="left"> category </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c283 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> products </td></tr></table></td></tr></table>>, fontname="Helvetica", fontcolor="black", fontsize=16.0];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
|
||||
c279 -> c282 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
|
||||
c280 -> c281 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
|
||||
c280 -> c279 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c282 -> c283 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.product.Product
|
||||
c244 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c245 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c244:p -> c245:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.product.Product
|
||||
c244 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c245 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c244 -> c245 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.product.Product
|
||||
c206 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> stock </td></tr><tr><td align="left" balign="left"> price </td></tr><tr><td align="left" balign="left"> category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c207 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="brown"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c206:p -> c207:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.product.Product
|
||||
c206 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="LemonChiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> stock </td></tr><tr><td align="left" balign="left"> price </td></tr><tr><td align="left" balign="left"> category </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c207 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="brown"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c206 -> c207 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,31 +5,32 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c164 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c165 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c166 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c167 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c168 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product
|
||||
c164:p -> c167:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer
|
||||
c165:p -> c166:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem
|
||||
c165:p -> c164:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c167:p -> c168:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// gr.spinellis.basic.product.Category DEPEND java.util.List<E>
|
||||
c168:p -> c202:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
// java.util.List<E>
|
||||
c202 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="gray" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> List<E> </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.invoice.InvoiceItem
|
||||
c164 [label=<<table title="gr.spinellis.basic.invoice.InvoiceItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InvoiceItem </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.Invoice
|
||||
c165 [label=<<table title="gr.spinellis.basic.invoice.Invoice" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Invoice </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.Customer
|
||||
c166 [label=<<table title="gr.spinellis.basic.invoice.Customer" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Customer </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Product
|
||||
c167 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c168 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="yellow"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product
|
||||
c164 -> c167 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer
|
||||
c165 -> c166 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem
|
||||
c165 -> c164 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c167 -> c168 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
// gr.spinellis.basic.product.Category depend java.util.List<E>
|
||||
c168 -> c202 [arrowhead=open,style=dashed,weight=0];
|
||||
// java.util.List<E>
|
||||
c202 [label=<<table title="java.util.List" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="gray" href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> List<E> </td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,39 +5,40 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.context.classes.AClient
|
||||
c424 [label=<<table title="gr.spinellis.context.classes.AClient" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> AClient </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.context.classes.ASubclass
|
||||
c426 [label=<<table title="gr.spinellis.context.classes.ASubclass" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ASubclass </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.context.classes.E
|
||||
c427 [label=<<table title="gr.spinellis.context.classes.E" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> E </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.context.classes.D
|
||||
c429 [label=<<table title="gr.spinellis.context.classes.D" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.context.classes.B
|
||||
c432 [label=<<table title="gr.spinellis.context.classes.B" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.context.classes.ABaseClass
|
||||
c433 [label=<<table title="gr.spinellis.context.classes.ABaseClass" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ABaseClass </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.context.classes.A
|
||||
c434 [label=<<table title="gr.spinellis.context.classes.A" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//gr.spinellis.context.classes.ASubclass extends gr.spinellis.context.classes.A
|
||||
c434:p -> c426:p [dir=back,arrowtail=empty];
|
||||
//gr.spinellis.context.classes.A extends gr.spinellis.context.classes.ABaseClass
|
||||
c433:p -> c434:p [dir=back,arrowtail=empty];
|
||||
// gr.spinellis.context.classes.D NAVASSOC gr.spinellis.context.classes.A
|
||||
c429:p -> c434:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// gr.spinellis.context.classes.A NAVASSOC gr.spinellis.context.classes.B
|
||||
c434:p -> c432:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// gr.spinellis.context.classes.A NAVASSOC javax.swing.JComponent
|
||||
c434:p -> c509:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// gr.spinellis.context.classes.AClient DEPEND gr.spinellis.context.classes.A
|
||||
c424:p -> c434:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
// gr.spinellis.context.classes.A DEPEND gr.spinellis.context.classes.E
|
||||
c434:p -> c427:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
// javax.swing.JComponent
|
||||
c509 [label=<<table title="javax.swing.JComponent" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" href="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="Helvetica-Oblique"> JComponent </font></td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.context.classes.AClient
|
||||
c424 [label=<<table title="gr.spinellis.context.classes.AClient" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> AClient </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.ASubclass
|
||||
c426 [label=<<table title="gr.spinellis.context.classes.ASubclass" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ASubclass </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.E
|
||||
c427 [label=<<table title="gr.spinellis.context.classes.E" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> E </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.D
|
||||
c429 [label=<<table title="gr.spinellis.context.classes.D" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> D </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.B
|
||||
c432 [label=<<table title="gr.spinellis.context.classes.B" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> B </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.ABaseClass
|
||||
c433 [label=<<table title="gr.spinellis.context.classes.ABaseClass" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ABaseClass </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.A
|
||||
c434 [label=<<table title="gr.spinellis.context.classes.A" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> A </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.context.classes.ASubclass extends gr.spinellis.context.classes.A
|
||||
c434 -> c426 [arrowtail=empty,dir=back,weight=10];
|
||||
// gr.spinellis.context.classes.A extends gr.spinellis.context.classes.ABaseClass
|
||||
c433 -> c434 [arrowtail=empty,dir=back,weight=10];
|
||||
// gr.spinellis.context.classes.D navassoc gr.spinellis.context.classes.A
|
||||
c429 -> c434 [arrowhead=open,weight=1];
|
||||
// gr.spinellis.context.classes.A navassoc gr.spinellis.context.classes.B
|
||||
c434 -> c432 [arrowhead=open,weight=1];
|
||||
// gr.spinellis.context.classes.A navassoc javax.swing.JComponent
|
||||
c434 -> c509 [arrowhead=open,weight=1];
|
||||
// gr.spinellis.context.classes.AClient depend gr.spinellis.context.classes.A
|
||||
c424 -> c434 [arrowhead=open,style=dashed,weight=0];
|
||||
// gr.spinellis.context.classes.A depend gr.spinellis.context.classes.E
|
||||
c434 -> c427 [arrowhead=open,style=dashed,weight=0];
|
||||
// javax.swing.JComponent
|
||||
c509 [label=<<table title="javax.swing.JComponent" border="0" cellborder="1" cellspacing="0" cellpadding="2" href="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html" target="_parent"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> JComponent </i></td></tr></table></td></tr></table>>, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,27 +5,28 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.iface.classes.FarImplementor
|
||||
c534 [label=<<table title="gr.spinellis.iface.classes.FarImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> FarImplementor </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.iface.classes.DirectImplementor
|
||||
c535 [label=<<table title="gr.spinellis.iface.classes.DirectImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DirectImplementor </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.iface.classes.SubSubFace
|
||||
c537 [label=<<table title="gr.spinellis.iface.classes.SubSubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> SubSubFace </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.iface.classes.SubFace
|
||||
c538 [label=<<table title="gr.spinellis.iface.classes.SubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> SubFace </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.iface.classes.Face
|
||||
c539 [label=<<table title="gr.spinellis.iface.classes.Face" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> Face </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//gr.spinellis.iface.classes.FarImplementor implements gr.spinellis.iface.classes.SubSubFace
|
||||
c537:p -> c534:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//gr.spinellis.iface.classes.DirectImplementor implements gr.spinellis.iface.classes.Face
|
||||
c539:p -> c535:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//gr.spinellis.iface.classes.SubSubFace implements gr.spinellis.iface.classes.SubFace
|
||||
c538:p -> c537:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//gr.spinellis.iface.classes.SubFace implements gr.spinellis.iface.classes.Face
|
||||
c539:p -> c538:p [dir=back,arrowtail=empty,style=dashed];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.iface.classes.FarImplementor
|
||||
c534 [label=<<table title="gr.spinellis.iface.classes.FarImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> FarImplementor </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.iface.classes.DirectImplementor
|
||||
c535 [label=<<table title="gr.spinellis.iface.classes.DirectImplementor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> DirectImplementor </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.iface.classes.SubSubFace
|
||||
c537 [label=<<table title="gr.spinellis.iface.classes.SubSubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> SubSubFace </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.iface.classes.SubFace
|
||||
c538 [label=<<table title="gr.spinellis.iface.classes.SubFace" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> SubFace </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.iface.classes.Face
|
||||
c539 [label=<<table title="gr.spinellis.iface.classes.Face" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> Face </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.iface.classes.FarImplementor implements gr.spinellis.iface.classes.SubSubFace
|
||||
c537 -> c534 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// gr.spinellis.iface.classes.DirectImplementor implements gr.spinellis.iface.classes.Face
|
||||
c539 -> c535 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// gr.spinellis.iface.classes.SubSubFace implements gr.spinellis.iface.classes.SubFace
|
||||
c538 -> c537 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// gr.spinellis.iface.classes.SubFace implements gr.spinellis.iface.classes.Face
|
||||
c539 -> c538 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.product.Product
|
||||
c129 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> stock </td></tr><tr><td align="left" balign="left"> price </td></tr><tr><td align="left" balign="left"> category </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c130 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> products </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category
|
||||
c129:p -> c130:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.basic.product.Product
|
||||
c129 [label=<<table title="gr.spinellis.basic.product.Product" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Product </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> stock </td></tr><tr><td align="left" balign="left"> price </td></tr><tr><td align="left" balign="left"> category </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Category
|
||||
c130 [label=<<table title="gr.spinellis.basic.product.Category" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Category </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name </td></tr><tr><td align="left" balign="left"> products </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category
|
||||
c129 -> c130 [arrowhead=none,weight=2,taillabel="*", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,27 +5,28 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.subclass.classes.SubOneTwo
|
||||
c580 [label=<<table title="gr.spinellis.subclass.classes.SubOneTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneTwo </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.subclass.classes.SubOneOne
|
||||
c581 [label=<<table title="gr.spinellis.subclass.classes.SubOneOne" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneOne </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.subclass.classes.SubTwo
|
||||
c582 [label=<<table title="gr.spinellis.subclass.classes.SubTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubTwo </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.subclass.classes.SubOne
|
||||
c583 [label=<<table title="gr.spinellis.subclass.classes.SubOne" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOne </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// gr.spinellis.subclass.classes.Super
|
||||
c584 [label=<<table title="gr.spinellis.subclass.classes.Super" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Super </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//gr.spinellis.subclass.classes.SubOneTwo extends gr.spinellis.subclass.classes.SubOne
|
||||
c583:p -> c580:p [dir=back,arrowtail=empty];
|
||||
//gr.spinellis.subclass.classes.SubOneOne extends gr.spinellis.subclass.classes.SubOne
|
||||
c583:p -> c581:p [dir=back,arrowtail=empty];
|
||||
//gr.spinellis.subclass.classes.SubTwo extends gr.spinellis.subclass.classes.Super
|
||||
c584:p -> c582:p [dir=back,arrowtail=empty];
|
||||
//gr.spinellis.subclass.classes.SubOne extends gr.spinellis.subclass.classes.Super
|
||||
c584:p -> c583:p [dir=back,arrowtail=empty];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// gr.spinellis.subclass.classes.SubOneTwo
|
||||
c580 [label=<<table title="gr.spinellis.subclass.classes.SubOneTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneTwo </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.subclass.classes.SubOneOne
|
||||
c581 [label=<<table title="gr.spinellis.subclass.classes.SubOneOne" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOneOne </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.subclass.classes.SubTwo
|
||||
c582 [label=<<table title="gr.spinellis.subclass.classes.SubTwo" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubTwo </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.subclass.classes.SubOne
|
||||
c583 [label=<<table title="gr.spinellis.subclass.classes.SubOne" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SubOne </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.subclass.classes.Super
|
||||
c584 [label=<<table title="gr.spinellis.subclass.classes.Super" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="lemonchiffon"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Super </td></tr></table></td></tr></table>>];
|
||||
// gr.spinellis.subclass.classes.SubOneTwo extends gr.spinellis.subclass.classes.SubOne
|
||||
c583 -> c580 [arrowtail=empty,dir=back,weight=10];
|
||||
// gr.spinellis.subclass.classes.SubOneOne extends gr.spinellis.subclass.classes.SubOne
|
||||
c583 -> c581 [arrowtail=empty,dir=back,weight=10];
|
||||
// gr.spinellis.subclass.classes.SubTwo extends gr.spinellis.subclass.classes.Super
|
||||
c584 -> c582 [arrowtail=empty,dir=back,weight=10];
|
||||
// gr.spinellis.subclass.classes.SubOne extends gr.spinellis.subclass.classes.Super
|
||||
c584 -> c583 [arrowtail=empty,dir=back,weight=10];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/local/bin/dot
|
||||
#
|
||||
# Class diagram
|
||||
# Generated by UMLGraph version R5_7_2-54-gbca0ce (http://www.spinellis.gr/umlgraph/)
|
||||
#
|
||||
|
||||
digraph G {
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Active
|
||||
c32 [label=<<table title="Active" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td rowspan="10"></td><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Active </td></tr></table></td><td rowspan="10"></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> run() </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
@ -5,31 +5,32 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Controller
|
||||
c5 [label=<<table title="Controller" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Controller </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// EmbeddedAgent
|
||||
c6 [label=<<table title="EmbeddedAgent" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> EmbeddedAgent </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// PowerManager
|
||||
c7 [label=<<table title="PowerManager" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> PowerManager </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// SetTopController
|
||||
c8 [label=<<table title="SetTopController" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SetTopController </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> authorizationLevel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> startUp() </td></tr><tr><td align="left" balign="left"> shutDown() </td></tr><tr><td align="left" balign="left"> connect() </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ChannelIterator
|
||||
c9 [label=<<table title="ChannelIterator" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ChannelIterator </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// URLStreamHandler
|
||||
c10 [label=<<table title="URLStreamHandler" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> URLStreamHandler </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> OpenConnection() </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> parseURL() </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> setURL() </font></td></tr><tr><td align="left" balign="left"><font face="Helvetica-Oblique" point-size="10.0"> toExternalForm() </font></td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//SetTopController extends Controller
|
||||
c5:p -> c8:p [dir=back,arrowtail=empty];
|
||||
//SetTopController extends EmbeddedAgent
|
||||
c6:p -> c8:p [dir=back,arrowtail=empty];
|
||||
//SetTopController implements URLStreamHandler
|
||||
c10:p -> c8:p [dir=back,arrowtail=empty,style=dashed];
|
||||
// SetTopController NAVASSOC PowerManager
|
||||
c8:p -> c7:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
// ChannelIterator DEPEND SetTopController
|
||||
c9:p -> c8:p [taillabel="", label="«friend»", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Controller
|
||||
c5 [label=<<table title="Controller" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Controller </td></tr></table></td></tr></table>>];
|
||||
// EmbeddedAgent
|
||||
c6 [label=<<table title="EmbeddedAgent" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> EmbeddedAgent </td></tr></table></td></tr></table>>];
|
||||
// PowerManager
|
||||
c7 [label=<<table title="PowerManager" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> PowerManager </td></tr></table></td></tr></table>>];
|
||||
// SetTopController
|
||||
c8 [label=<<table title="SetTopController" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SetTopController </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> authorizationLevel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> startUp() </td></tr><tr><td align="left" balign="left"> shutDown() </td></tr><tr><td align="left" balign="left"> connect() </td></tr></table></td></tr></table>>];
|
||||
// ChannelIterator
|
||||
c9 [label=<<table title="ChannelIterator" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ChannelIterator </td></tr></table></td></tr></table>>];
|
||||
// URLStreamHandler
|
||||
c10 [label=<<table title="URLStreamHandler" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> URLStreamHandler </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"><i> OpenConnection() </i></td></tr><tr><td align="left" balign="left"><i> parseURL() </i></td></tr><tr><td align="left" balign="left"><i> setURL() </i></td></tr><tr><td align="left" balign="left"><i> toExternalForm() </i></td></tr></table></td></tr></table>>];
|
||||
// SetTopController extends Controller
|
||||
c5 -> c8 [arrowtail=empty,dir=back,weight=10];
|
||||
// SetTopController extends EmbeddedAgent
|
||||
c6 -> c8 [arrowtail=empty,dir=back,weight=10];
|
||||
// SetTopController implements URLStreamHandler
|
||||
c10 -> c8 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// SetTopController navassoc PowerManager
|
||||
c8 -> c7 [arrowhead=open,weight=1];
|
||||
// ChannelIterator depend SetTopController
|
||||
c9 -> c8 [arrowhead=open,style=dashed,weight=0,label="«friend»"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,20 +5,21 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
rankdir=LR;
|
||||
// UserGroup
|
||||
c12 [label=<<table title="UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// User
|
||||
c13 [label=<<table title="User" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Password
|
||||
c14 [label=<<table title="Password" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// UserGroup ASSOC User
|
||||
c12:p -> c13:p [taillabel="*", label="", headlabel="*\n\n+user ", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// User NAVASSOC Password
|
||||
c13:p -> c14:p [taillabel="1\n\n+owner\r", label="", headlabel="*\n\n+key", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
rankdir=LR;
|
||||
// UserGroup
|
||||
c12 [label=<<table title="UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>];
|
||||
// User
|
||||
c13 [label=<<table title="User" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>];
|
||||
// Password
|
||||
c14 [label=<<table title="Password" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>];
|
||||
// UserGroup assoc User
|
||||
c12 -> c13 [arrowhead=none,weight=2,taillabel="*", headlabel="*\n\n+user "];
|
||||
// User navassoc Password
|
||||
c13 -> c14 [arrowhead=open,weight=1,taillabel="1\n\n+owner\r", headlabel="*\n\n+key"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,23 +5,24 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Tyre
|
||||
c15 [label=<<table title="Tyre" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Tyre </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Engine
|
||||
c16 [label=<<table title="Engine" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Engine </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Body
|
||||
c17 [label=<<table title="Body" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Body </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Car
|
||||
c18 [label=<<table title="Car" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Car </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Car COMPOSED Tyre
|
||||
c18:p -> c15:p [taillabel="1", label="", headlabel="4", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// Car COMPOSED Engine
|
||||
c18:p -> c16:p [taillabel="1", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// Car COMPOSED Body
|
||||
c18:p -> c17:p [taillabel="1", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Tyre
|
||||
c15 [label=<<table title="Tyre" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Tyre </td></tr></table></td></tr></table>>];
|
||||
// Engine
|
||||
c16 [label=<<table title="Engine" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Engine </td></tr></table></td></tr></table>>];
|
||||
// Body
|
||||
c17 [label=<<table title="Body" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Body </td></tr></table></td></tr></table>>];
|
||||
// Car
|
||||
c18 [label=<<table title="Car" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Car </td></tr></table></td></tr></table>>];
|
||||
// Car composed Tyre
|
||||
c18 -> c15 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="4"];
|
||||
// Car composed Engine
|
||||
c18 -> c16 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="1"];
|
||||
// Car composed Body
|
||||
c18 -> c17 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="1"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,53 +5,54 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// HttpResponseBase
|
||||
c19 [label=<<table title="HttpResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseBase </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// HttpResponseWrapper
|
||||
c20 [label=<<table title="HttpResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="Helvetica-Oblique"> HttpResponseWrapper </font></td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// HttpResponseFacade
|
||||
c21 [label=<<table title="HttpResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseFacade </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ResponseWrapper
|
||||
c22 [label=<<table title="ResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="Helvetica-Oblique"> ResponseWrapper </font></td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// HttpResponse
|
||||
c23 [label=<<table title="HttpResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> HttpResponse </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ResponseBase
|
||||
c24 [label=<<table title="ResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><font face="Helvetica-Oblique"> ResponseBase </font></td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// HttpServletResponse
|
||||
c25 [label=<<table title="HttpServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> HttpServletResponse </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ResponseFacade
|
||||
c26 [label=<<table title="ResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ResponseFacade </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// ServletResponse
|
||||
c27 [label=<<table title="ServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> ServletResponse </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Response
|
||||
c28 [label=<<table title="Response" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> Response </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//HttpResponseBase extends ResponseBase
|
||||
c24:p -> c19:p [dir=back,arrowtail=empty];
|
||||
//HttpResponseBase implements HttpResponse
|
||||
c23:p -> c19:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//HttpResponseBase implements HttpServletResponse
|
||||
c25:p -> c19:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//HttpResponseWrapper extends ResponseWrapper
|
||||
c22:p -> c20:p [dir=back,arrowtail=empty];
|
||||
//HttpResponseWrapper implements HttpResponse
|
||||
c23:p -> c20:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//HttpResponseFacade extends ResponseFacade
|
||||
c26:p -> c21:p [dir=back,arrowtail=empty];
|
||||
//HttpResponseFacade implements HttpServletResponse
|
||||
c25:p -> c21:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//ResponseWrapper implements Response
|
||||
c28:p -> c22:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//HttpResponse implements Response
|
||||
c28:p -> c23:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//ResponseBase implements Response
|
||||
c28:p -> c24:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//ResponseBase implements ServletResponse
|
||||
c27:p -> c24:p [dir=back,arrowtail=empty,style=dashed];
|
||||
//ResponseFacade implements ServletResponse
|
||||
c27:p -> c26:p [dir=back,arrowtail=empty,style=dashed];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// HttpResponseBase
|
||||
c19 [label=<<table title="HttpResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseBase </td></tr></table></td></tr></table>>];
|
||||
// HttpResponseWrapper
|
||||
c20 [label=<<table title="HttpResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> HttpResponseWrapper </i></td></tr></table></td></tr></table>>];
|
||||
// HttpResponseFacade
|
||||
c21 [label=<<table title="HttpResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> HttpResponseFacade </td></tr></table></td></tr></table>>];
|
||||
// ResponseWrapper
|
||||
c22 [label=<<table title="ResponseWrapper" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> ResponseWrapper </i></td></tr></table></td></tr></table>>];
|
||||
// HttpResponse
|
||||
c23 [label=<<table title="HttpResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> HttpResponse </td></tr></table></td></tr></table>>];
|
||||
// ResponseBase
|
||||
c24 [label=<<table title="ResponseBase" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"><i> ResponseBase </i></td></tr></table></td></tr></table>>];
|
||||
// HttpServletResponse
|
||||
c25 [label=<<table title="HttpServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> HttpServletResponse </td></tr></table></td></tr></table>>];
|
||||
// ResponseFacade
|
||||
c26 [label=<<table title="ResponseFacade" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> ResponseFacade </td></tr></table></td></tr></table>>];
|
||||
// ServletResponse
|
||||
c27 [label=<<table title="ServletResponse" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> ServletResponse </td></tr></table></td></tr></table>>];
|
||||
// Response
|
||||
c28 [label=<<table title="Response" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «interface» </td></tr><tr><td align="center" balign="center"> Response </td></tr></table></td></tr></table>>];
|
||||
// HttpResponseBase extends ResponseBase
|
||||
c24 -> c19 [arrowtail=empty,dir=back,weight=10];
|
||||
// HttpResponseBase implements HttpResponse
|
||||
c23 -> c19 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// HttpResponseBase implements HttpServletResponse
|
||||
c25 -> c19 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// HttpResponseWrapper extends ResponseWrapper
|
||||
c22 -> c20 [arrowtail=empty,dir=back,weight=10];
|
||||
// HttpResponseWrapper implements HttpResponse
|
||||
c23 -> c20 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// HttpResponseFacade extends ResponseFacade
|
||||
c26 -> c21 [arrowtail=empty,dir=back,weight=10];
|
||||
// HttpResponseFacade implements HttpServletResponse
|
||||
c25 -> c21 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// ResponseWrapper implements Response
|
||||
c28 -> c22 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// HttpResponse implements Response
|
||||
c28 -> c23 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// ResponseBase implements Response
|
||||
c28 -> c24 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// ResponseBase implements ServletResponse
|
||||
c27 -> c24 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
// ResponseFacade implements ServletResponse
|
||||
c27 -> c26 [arrowtail=empty,style=dashed,dir=back,weight=9];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,19 +5,20 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Person
|
||||
c30 [label=<<table title="Person" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Employee
|
||||
c31 [label=<<table title="Employee" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Employee </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Client
|
||||
c32 [label=<<table title="Client" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Client </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//Employee extends Person
|
||||
c30:p -> c31:p [dir=back,arrowtail=empty];
|
||||
//Client extends Person
|
||||
c30:p -> c32:p [dir=back,arrowtail=empty];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Person
|
||||
c30 [label=<<table title="Person" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person </td></tr></table></td></tr></table>>];
|
||||
// Employee
|
||||
c31 [label=<<table title="Employee" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Employee </td></tr></table></td></tr></table>>];
|
||||
// Client
|
||||
c32 [label=<<table title="Client" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor=".13 .9 1"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Client </td></tr></table></td></tr></table>>];
|
||||
// Employee extends Person
|
||||
c30 -> c31 [arrowtail=empty,dir=back,weight=10];
|
||||
// Client extends Person
|
||||
c30 -> c32 [arrowtail=empty,dir=back,weight=10];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// ActionQueue
|
||||
c35 [label=<<table title="ActionQueue" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «container» </td></tr><tr><td align="center" balign="center"> ActionQueue </td></tr><tr><td align="right" balign="right"> {version = 3.2} </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> add(a : Action) </td></tr><tr><td align="left" balign="left"> add(a : Action, n : int) </td></tr><tr><td align="right" balign="right"> {version = 1.0} </td></tr><tr><td align="left" balign="left"> remove(n : int) </td></tr><tr><td align="left" balign="left"> «query» </td></tr><tr><td align="left" balign="left"> length() : int </td></tr><tr><td align="left" balign="left"> «helper functions» </td></tr><tr><td align="left" balign="left"> reorder() </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// ActionQueue
|
||||
c35 [label=<<table title="ActionQueue" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «container» </td></tr><tr><td align="center" balign="center"> ActionQueue </td></tr><tr><td align="right" balign="right"> {version = 3.2} </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> add(a : Action) </td></tr><tr><td align="left" balign="left"> add(a : Action, n : int) </td></tr><tr><td align="right" balign="right"> {version = 1.0} </td></tr><tr><td align="left" balign="left"> remove(n : int) </td></tr><tr><td align="left" balign="left"> «query» </td></tr><tr><td align="left" balign="left"> length() : int </td></tr><tr><td align="left" balign="left"> «helper functions» </td></tr><tr><td align="left" balign="left"> reorder() </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,25 +5,26 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Serif",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
bgcolor=".7 .9 1";
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="yellow"];
|
||||
node [fontname="Serif",fontcolor="black",fontsize=14,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
bgcolor=".7 .9 1";
|
||||
|
||||
// Pixel
|
||||
c37 [label=<<table title="Pixel" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="#a0a0a0"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Pixel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - x : int </td></tr><tr><td align="left" balign="left"> - y : int </td></tr></table></td></tr></table>>, URL="null", fontname="arial", fontcolor="white", fontsize=14.0];
|
||||
// Red
|
||||
c38 [label=<<table title="Red" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="red"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Red </td></tr></table></td></tr></table>>, URL="null", fontname="Serif", fontcolor="black", fontsize=14.0];
|
||||
// Green
|
||||
c39 [label=<<table title="Green" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="green"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Green </td></tr></table></td></tr></table>>, URL="null", fontname="Serif", fontcolor="black", fontsize=14.0];
|
||||
// Blue
|
||||
c40 [label=<<table title="Blue" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p" bgcolor="blue"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Blue </td></tr></table></td></tr></table>>, URL="null", fontname="Serif", fontcolor="black", fontsize=14.0];
|
||||
// Pixel COMPOSED Red
|
||||
c37:p -> c38:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="yellow", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// Pixel COMPOSED Green
|
||||
c37:p -> c39:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="yellow", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// Pixel COMPOSED Blue
|
||||
c37:p -> c40:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="yellow", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// Pixel
|
||||
c37 [label=<<table title="Pixel" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="#a0a0a0"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Pixel </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - x : int </td></tr><tr><td align="left" balign="left"> - y : int </td></tr></table></td></tr></table>>];
|
||||
// Red
|
||||
c38 [label=<<table title="Red" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="red"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Red </td></tr></table></td></tr></table>>];
|
||||
// Green
|
||||
c39 [label=<<table title="Green" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="green"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Green </td></tr></table></td></tr></table>>];
|
||||
// Blue
|
||||
c40 [label=<<table title="Blue" border="0" cellborder="1" cellspacing="0" cellpadding="2" bgcolor="blue"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Blue </td></tr></table></td></tr></table>>];
|
||||
// Pixel composed Red
|
||||
c37 -> c38 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
|
||||
// Pixel composed Green
|
||||
c37 -> c39 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
|
||||
// Pixel composed Blue
|
||||
c37 -> c40 [arrowhead=none,arrowtail=diamond,dir=back,weight=6];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Junk
|
||||
c43 [label=<<table title="Junk" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Junk </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - value : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + Junk(val : int) </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Junk
|
||||
c43 [label=<<table title="Junk" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Junk </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> - value : int </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + Junk(val : int) </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Person1
|
||||
c45 [label=<<table title="Person1" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person1 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ address : String </td></tr><tr><td align="left" balign="left"> ~ name : String </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Person2
|
||||
c46 [label=<<table title="Person2" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person2 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ displayName() : String </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Person3
|
||||
c47 [label=<<table title="Person3" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person3 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> address : Address </td></tr><tr><td align="left" balign="left"> name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> displayName() : String </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Person1
|
||||
c45 [label=<<table title="Person1" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person1 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ address : String </td></tr><tr><td align="left" balign="left"> ~ name : String </td></tr></table></td></tr></table>>];
|
||||
// Person2
|
||||
c46 [label=<<table title="Person2" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person2 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ displayName() : String </td></tr></table></td></tr></table>>];
|
||||
// Person3
|
||||
c47 [label=<<table title="Person3" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Person3 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> address : Address </td></tr><tr><td align="left" balign="left"> name : String </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> displayName() : String </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,14 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Base
|
||||
c48 [label=<<table title="Base" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Base </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Test2<B extends a.b.Base>
|
||||
c49 [label=<<table title="Test2" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Test2<B extends Base> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Base
|
||||
c48 [label=<<table title="Base" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Base </td></tr></table></td></tr></table>>];
|
||||
// Test2<B extends a.b.Base>
|
||||
c49 [label=<<table title="Test2" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Test2<B extends Base> </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,21 +5,22 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// a.b.c.UMLOptions
|
||||
c50 [label=<<table title="a.b.c.UMLOptions" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UMLOptions </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// a.b.c.UserGroup
|
||||
c51 [label=<<table title="a.b.c.UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// a.b.c.User
|
||||
c52 [label=<<table title="a.b.c.User" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// a.b.c.Password
|
||||
c53 [label=<<table title="a.b.c.Password" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// a.b.c.UserGroup ASSOC a.b.c.User
|
||||
c51:p -> c52:p [taillabel="*", label="", headlabel="*\n\n+user ", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// a.b.c.User NAVASSOC a.b.c.Password
|
||||
c52:p -> c53:p [taillabel="1\n\n+owner\r", label="", headlabel="*\n\n+key", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// a.b.c.UMLOptions
|
||||
c50 [label=<<table title="a.b.c.UMLOptions" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UMLOptions </td></tr></table></td></tr></table>>];
|
||||
// a.b.c.UserGroup
|
||||
c51 [label=<<table title="a.b.c.UserGroup" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> UserGroup </td></tr></table></td></tr></table>>];
|
||||
// a.b.c.User
|
||||
c52 [label=<<table title="a.b.c.User" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> User </td></tr></table></td></tr></table>>];
|
||||
// a.b.c.Password
|
||||
c53 [label=<<table title="a.b.c.Password" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Password </td></tr></table></td></tr></table>>];
|
||||
// a.b.c.UserGroup assoc a.b.c.User
|
||||
c51 -> c52 [arrowhead=none,weight=2,taillabel="*", headlabel="*\n\n+user "];
|
||||
// a.b.c.User navassoc a.b.c.Password
|
||||
c52 -> c53 [arrowhead=open,weight=1,taillabel="1\n\n+owner\r", headlabel="*\n\n+key"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,49 +5,50 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Asset
|
||||
c55 [label=<<table title="Asset" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Asset </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// InterestBearingItem
|
||||
c56 [label=<<table title="InterestBearingItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InterestBearingItem </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// InsurableItem
|
||||
c57 [label=<<table title="InsurableItem" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InsurableItem </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// BankAccount
|
||||
c58 [label=<<table title="BankAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> BankAccount </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// RealEstate
|
||||
c59 [label=<<table title="RealEstate" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RealEstate </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Security
|
||||
c60 [label=<<table title="Security" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Security </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Stock
|
||||
c61 [label=<<table title="Stock" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Stock </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Bond
|
||||
c62 [label=<<table title="Bond" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Bond </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// CheckingAccount
|
||||
c63 [label=<<table title="CheckingAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> CheckingAccount </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// SavingsAccount
|
||||
c64 [label=<<table title="SavingsAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SavingsAccount </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
//BankAccount extends Asset
|
||||
c55:p -> c58:p [dir=back,arrowtail=empty];
|
||||
//BankAccount extends InsurableItem
|
||||
c57:p -> c58:p [dir=back,arrowtail=empty];
|
||||
//BankAccount extends InterestBearingItem
|
||||
c56:p -> c58:p [dir=back,arrowtail=empty];
|
||||
//RealEstate extends Asset
|
||||
c55:p -> c59:p [dir=back,arrowtail=empty];
|
||||
//RealEstate extends InsurableItem
|
||||
c57:p -> c59:p [dir=back,arrowtail=empty];
|
||||
//Security extends Asset
|
||||
c55:p -> c60:p [dir=back,arrowtail=empty];
|
||||
//Stock extends Security
|
||||
c60:p -> c61:p [dir=back,arrowtail=empty];
|
||||
//Bond extends Security
|
||||
c60:p -> c62:p [dir=back,arrowtail=empty];
|
||||
//CheckingAccount extends BankAccount
|
||||
c58:p -> c63:p [dir=back,arrowtail=empty];
|
||||
//SavingsAccount extends BankAccount
|
||||
c58:p -> c64:p [dir=back,arrowtail=empty];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Asset
|
||||
c55 [label=<<table title="Asset" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Asset </td></tr></table></td></tr></table>>];
|
||||
// InterestBearingItem
|
||||
c56 [label=<<table title="InterestBearingItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InterestBearingItem </td></tr></table></td></tr></table>>];
|
||||
// InsurableItem
|
||||
c57 [label=<<table title="InsurableItem" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> InsurableItem </td></tr></table></td></tr></table>>];
|
||||
// BankAccount
|
||||
c58 [label=<<table title="BankAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> BankAccount </td></tr></table></td></tr></table>>];
|
||||
// RealEstate
|
||||
c59 [label=<<table title="RealEstate" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> RealEstate </td></tr></table></td></tr></table>>];
|
||||
// Security
|
||||
c60 [label=<<table title="Security" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Security </td></tr></table></td></tr></table>>];
|
||||
// Stock
|
||||
c61 [label=<<table title="Stock" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Stock </td></tr></table></td></tr></table>>];
|
||||
// Bond
|
||||
c62 [label=<<table title="Bond" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Bond </td></tr></table></td></tr></table>>];
|
||||
// CheckingAccount
|
||||
c63 [label=<<table title="CheckingAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> CheckingAccount </td></tr></table></td></tr></table>>];
|
||||
// SavingsAccount
|
||||
c64 [label=<<table title="SavingsAccount" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> SavingsAccount </td></tr></table></td></tr></table>>];
|
||||
// BankAccount extends Asset
|
||||
c55 -> c58 [arrowtail=empty,dir=back,weight=10];
|
||||
// BankAccount extends InsurableItem
|
||||
c57 -> c58 [arrowtail=empty,dir=back,weight=10];
|
||||
// BankAccount extends InterestBearingItem
|
||||
c56 -> c58 [arrowtail=empty,dir=back,weight=10];
|
||||
// RealEstate extends Asset
|
||||
c55 -> c59 [arrowtail=empty,dir=back,weight=10];
|
||||
// RealEstate extends InsurableItem
|
||||
c57 -> c59 [arrowtail=empty,dir=back,weight=10];
|
||||
// Security extends Asset
|
||||
c55 -> c60 [arrowtail=empty,dir=back,weight=10];
|
||||
// Stock extends Security
|
||||
c60 -> c61 [arrowtail=empty,dir=back,weight=10];
|
||||
// Bond extends Security
|
||||
c60 -> c62 [arrowtail=empty,dir=back,weight=10];
|
||||
// CheckingAccount extends BankAccount
|
||||
c58 -> c63 [arrowtail=empty,dir=back,weight=10];
|
||||
// SavingsAccount extends BankAccount
|
||||
c58 -> c64 [arrowtail=empty,dir=back,weight=10];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,14 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Java5
|
||||
c78 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> - specifiedPackages : Set<String> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Java5.States
|
||||
c79 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «enumeration» </td></tr><tr><td align="center" balign="center"> States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Java5
|
||||
c78 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> - specifiedPackages : Set<String> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>];
|
||||
// Java5.States
|
||||
c79 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «enumeration» </td></tr><tr><td align="center" balign="center"> States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,33 +5,34 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// School
|
||||
c103 [label=<<table title="School" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> School </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr><tr><td align="left" balign="left"> address : String </td></tr><tr><td align="left" balign="left"> phone : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> addStudent() </td></tr><tr><td align="left" balign="left"> removeStudent() </td></tr><tr><td align="left" balign="left"> getStudent() </td></tr><tr><td align="left" balign="left"> getAllStudents() </td></tr><tr><td align="left" balign="left"> addDepartment() </td></tr><tr><td align="left" balign="left"> removeDepartment() </td></tr><tr><td align="left" balign="left"> getDepartment() </td></tr><tr><td align="left" balign="left"> getAllDepartments() </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Department
|
||||
c104 [label=<<table title="Department" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Department </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> addInstructor() </td></tr><tr><td align="left" balign="left"> removeInstructor() </td></tr><tr><td align="left" balign="left"> getInstructor() </td></tr><tr><td align="left" balign="left"> getAllInstructors() </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Student
|
||||
c105 [label=<<table title="Student" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Student </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr><tr><td align="left" balign="left"> studentID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Course
|
||||
c106 [label=<<table title="Course" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Course </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr><tr><td align="left" balign="left"> courseID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Instructor
|
||||
c107 [label=<<table title="Instructor" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Instructor </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// School HAS Student
|
||||
c103:p -> c105:p [taillabel="1..*", label="Member", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both];
|
||||
// School COMPOSED Department
|
||||
c103:p -> c104:p [taillabel="1..*", label="Has", headlabel="1..*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both];
|
||||
// Department ASSOC Course
|
||||
c104:p -> c106:p [taillabel="1..*", label="", headlabel="1..*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Department ASSOC Instructor
|
||||
c104:p -> c107:p [taillabel="0..*", label="", headlabel="0..1 chairperson", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Department HAS Instructor
|
||||
c104:p -> c107:p [taillabel="1..*", label="AssignedTo", headlabel="1..*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both];
|
||||
// Student ASSOC Course
|
||||
c105:p -> c106:p [taillabel="*", label="Attends", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
// Instructor ASSOC Course
|
||||
c107:p -> c106:p [taillabel="1..*", label="Teaches", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// School
|
||||
c103 [label=<<table title="School" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> School </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr><tr><td align="left" balign="left"> address : String </td></tr><tr><td align="left" balign="left"> phone : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> addStudent() </td></tr><tr><td align="left" balign="left"> removeStudent() </td></tr><tr><td align="left" balign="left"> getStudent() </td></tr><tr><td align="left" balign="left"> getAllStudents() </td></tr><tr><td align="left" balign="left"> addDepartment() </td></tr><tr><td align="left" balign="left"> removeDepartment() </td></tr><tr><td align="left" balign="left"> getDepartment() </td></tr><tr><td align="left" balign="left"> getAllDepartments() </td></tr></table></td></tr></table>>];
|
||||
// Department
|
||||
c104 [label=<<table title="Department" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Department </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> addInstructor() </td></tr><tr><td align="left" balign="left"> removeInstructor() </td></tr><tr><td align="left" balign="left"> getInstructor() </td></tr><tr><td align="left" balign="left"> getAllInstructors() </td></tr></table></td></tr></table>>];
|
||||
// Student
|
||||
c105 [label=<<table title="Student" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Student </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr><tr><td align="left" balign="left"> studentID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// Course
|
||||
c106 [label=<<table title="Course" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Course </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr><tr><td align="left" balign="left"> courseID : Number </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// Instructor
|
||||
c107 [label=<<table title="Instructor" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Instructor </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> name : Name </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr></table>>];
|
||||
// School has Student
|
||||
c103 -> c105 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*", label="Member", headlabel="*"];
|
||||
// School composed Department
|
||||
c103 -> c104 [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1..*", label="Has", headlabel="1..*"];
|
||||
// Department assoc Course
|
||||
c104 -> c106 [arrowhead=none,weight=2,taillabel="1..*", headlabel="1..*"];
|
||||
// Department assoc Instructor
|
||||
c104 -> c107 [arrowhead=none,weight=2,taillabel="0..*", headlabel="0..1 chairperson"];
|
||||
// Department has Instructor
|
||||
c104 -> c107 [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*", label="AssignedTo", headlabel="1..*"];
|
||||
// Student assoc Course
|
||||
c105 -> c106 [arrowhead=none,weight=2,taillabel="*", label="Attends", headlabel="*"];
|
||||
// Instructor assoc Course
|
||||
c107 -> c106 [arrowhead=none,weight=2,taillabel="1..*", label="Teaches", headlabel="*"];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,14 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Java5
|
||||
c109 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> + specifiedPackages : Set<String> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
// Java5.States
|
||||
c110 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «enumeration» </td></tr><tr><td align="center" balign="center"> States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Java5
|
||||
c109 [label=<<table title="Java5" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Java5 </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> ~ state : Java5.States </td></tr><tr><td align="left" balign="left"> + specifiedPackages : Set<String> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + printAll(args : String[]) </td></tr></table></td></tr></table>>];
|
||||
// Java5.States
|
||||
c110 [label=<<table title="Java5.States" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> «enumeration» </td></tr><tr><td align="center" balign="center"> States </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> start </td></tr><tr><td align="left" balign="left"> dash </td></tr><tr><td align="left" balign="left"> colon </td></tr><tr><td align="left" balign="left"> space </td></tr><tr><td align="left" balign="left"> open </td></tr><tr><td align="left" balign="left"> w </td></tr><tr><td align="left" balign="left"> close </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@
|
|||
#
|
||||
|
||||
digraph G {
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10];
|
||||
node [fontname="Helvetica",fontsize=10,shape=plaintext];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Toolbar
|
||||
c120 [label=<<table title="Toolbar" border="0" cellborder="1" cellspacing="0" cellpadding="2" port="p"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Toolbar </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> # currentSelection : Tool </td></tr><tr><td align="left" balign="left"> # toolCount : Integer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + pickItem(i : Integer) </td></tr><tr><td align="left" balign="left"> + addTool(t : Tool) </td></tr><tr><td align="left" balign="left"> + removeTool(i : Integer) </td></tr><tr><td align="left" balign="left"> + getTool() : Tool </td></tr><tr><td align="left" balign="left"> # checkOrphans() </td></tr><tr><td align="left" balign="left"> - compact() </td></tr></table></td></tr></table>>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0];
|
||||
graph [fontnames="svg"]
|
||||
edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"];
|
||||
node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext,margin=0,width=0,height=0];
|
||||
nodesep=0.25;
|
||||
ranksep=0.5;
|
||||
// Toolbar
|
||||
c120 [label=<<table title="Toolbar" border="0" cellborder="1" cellspacing="0" cellpadding="2"><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="center" balign="center"> Toolbar </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> # currentSelection : Tool </td></tr><tr><td align="left" balign="left"> # toolCount : Integer </td></tr></table></td></tr><tr><td><table border="0" cellspacing="0" cellpadding="1"><tr><td align="left" balign="left"> + pickItem(i : Integer) </td></tr><tr><td align="left" balign="left"> + addTool(t : Tool) </td></tr><tr><td align="left" balign="left"> + removeTool(i : Integer) </td></tr><tr><td align="left" balign="left"> + getTool() : Tool </td></tr><tr><td align="left" balign="left"> # checkOrphans() </td></tr><tr><td align="left" balign="left"> - compact() </td></tr></table></td></tr></table>>];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* Active classes
|
||||
*
|
||||
* @opt operations
|
||||
* @opt shape activeclass
|
||||
* @hidden
|
||||
*/
|
||||
class UMLOptions {}
|
||||
|
||||
class Active {
|
||||
protected int hidden;
|
||||
public void run() {};
|
||||
}
|
||||
|
|
@ -1,3 +1,2 @@
|
|||
|
||||
class Base {}
|
||||
class Test2<B extends a.b.Base> {}
|
||||
class Test2<B extends Base> {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue