Draw activeclass shapes with a thick-border table, allowing them

to have compartments.
Refactor the handling of shapes to a new Shape class.
This commit is contained in:
Diomidis Spinellis 2007-11-29 11:33:15 +00:00
parent 6901d69a6c
commit 3d83e5d00f
4 changed files with 110 additions and 39 deletions

View File

@ -367,8 +367,7 @@ class ClassGraph {
w.print(", fontname=\"" + opt.nodeFontName + "\"");
w.print(", fontcolor=\"" + opt.nodeFontColor + "\"");
w.print(", fontsize=" + opt.nodeFontSize);
if (opt.shape != null)
w.print(", shape=" + Options.graphvizShape(opt.shape));
w.print(opt.shape.graphvizAttribute());
w.println("];");
}
@ -671,7 +670,7 @@ class ClassGraph {
private String relationNode(ClassDoc c) {
Options opt = optionProvider.getOptionsFor(c);
String name = getNodeName(c);
return ((opt.shape == null) ? (name + ":p") : name);
return name + opt.shape.landingPort();
}
/** Return the full name of a relation's node c.
@ -687,7 +686,7 @@ class ClassGraph {
else
opt = optionProvider.getOptionsFor(c);
String name = getNodeName(cName);
return ((opt.shape == null) ? (name + ":p") : name);
return name + opt.shape.landingPort();
}
/** Print a class's relations */
@ -1109,9 +1108,10 @@ class ClassGraph {
String href = "";
if (url != null)
href = " href=\"" + url + "\"";
w.print("<<table border=\"0\" cellborder=\"" +
(opt.shape == null ? "1" : "0") + "\" cellspacing=\"0\" " +
"cellpadding=\"2\" port=\"p\"" + bgcolor + href + ">" + linePostfix);
w.print("<<table border=\"" + opt.shape.border() +
"\" cellborder=\"" + opt.shape.cellBorder() + "\" cellspacing=\"0\" " +
"cellpadding=\"2\" port=\"p\"" + bgcolor + href + ">" + linePostfix);
}
private void externalTableEnd() {

View File

@ -94,7 +94,7 @@ public class Options implements Cloneable, OptionProvider {
String nodeFontTagName;
double nodeFontPackageSize;
String nodeFontPackageName;
String shape;
Shape shape;
String bgColor;
public String outputFileName;
String outputEncoding;
@ -154,7 +154,7 @@ public class Options implements Cloneable, OptionProvider {
nodeFontPackageName = null;
nodeFillColor = null;
bgColor = null;
shape = null;
shape = new Shape();
outputFileName = "graph.dot";
outputDirectory= null;
outputEncoding = "ISO-8859-1";
@ -383,14 +383,9 @@ public class Options implements Cloneable, OptionProvider {
} else if (opt[0].equals("-!nodefillcolor")) {
nodeFillColor = null;
} else if(opt[0].equals("-shape")) {
if (graphvizShape(opt[1]) != null)
shape = opt[1];
else {
System.err.println("Ignoring invalid shape " + opt[1]);
shape = null;
}
shape = new Shape(opt[1]);
} else if (opt[0].equals("-!shape")) {
shape = null;
shape = new Shape();
} else if(opt[0].equals("-output")) {
outputFileName = opt[1];
} else if (opt[0].equals("-!output")) {
@ -714,26 +709,4 @@ public class Options implements Cloneable, OptionProvider {
return sb.toString();
}
/**
* Return the Graphviz shape corresponding to the specified UML shape
* If the shape is return null.
*/
public static String graphvizShape(String s) {
if (s.equals("node"))
return "box3d";
else if (s.equals("component"))
return "component";
else if (s.equals("package"))
return "tab";
else if (s.equals("collaboration"))
return "ellipse, style=dashed";
else if (s.equals("note"))
return "note";
else if (s.equals("usecase"))
return "ellipse";
else if (s.equals("activeclass"))
return "box, style=bold";
else
return null;
}
}

View File

@ -0,0 +1,98 @@
/*
* Manage the GraphViz interface for node shapes
*
* (C) Copyright 2007 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.
*
* $Id$
*
*/
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;
/**
* Properties of node shapes
*
* @version $Revision$
* @author <a href="http://www.spinellis.gr">Diomidis Spinellis</a>
*/
public class Shape {
/** Shape's UMLGraph name */
private String name;
/** Construct a default (class) Shape */
public Shape() {
name = "class";
}
/** 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";
}
}
/**
* Return the GraphViz shape name corresponding to the 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;
}
/** Return the shape's GraphViz landing port */
String landingPort() {
if (name.equals("class") || name.equals("activeclass"))
return ":p";
else
return "";
}
/** Return the table border required for the shape */
String border() {
return name.equals("activeclass") ? "2" : "0";
}
/** Return the cell border required for the shape */
String cellBorder() {
return (name.equals("class") || name.equals("activeclass")) ? "1" : "0";
}
}

View File

@ -85,7 +85,7 @@ public class UmlGraph {
commentOptions = new Options();
commentOptions.setOptions(root.options());
commentOptions.setOptions(findClass(root, "UMLCommentOptions"));
commentOptions.shape = "note";
commentOptions.shape = new Shape("note");
Options opt = new Options();
opt.setOptions(root.options());