mirror of https://github.com/dspinellis/UMLGraph
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:
parent
6901d69a6c
commit
3d83e5d00f
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Reference in New Issue