// TODO Have an input for number of tabs? @Override public String toGraphVizString() { StringBuilder builder = new StringBuilder(); int i = 0; builder.append("\""); builder.append(this.fullName); builder.append("\" [\n\tshape = "); builder.append(this.shape); builder.append(",\n\tlabel = \"{"); // TODO Change for other types of classes. if ((this.accessType & Opcodes.ACC_INTERFACE) == Opcodes.ACC_INTERFACE) { builder.append("\\<\\<"); builder.append(this.fullName); builder.append("\\>\\>"); } else { builder.append(this.fullName); } for (String s : this.patternNames) { builder.append("\\n\\<\\<"); builder.append(s); builder.append("\\>\\>"); } if (this.fields.size() != 0 || this.methods.size() != 0) { // TODO Shouldn't this always do this? builder.append("|"); } i = 0; for (UMLField f : this.fields) { if (i > MAX_ROWS) { builder.append("..."); break; } builder.append(f.toGraphVizString()); i++; } builder.append("|"); i = 0; for (UMLMethod m : this.methods) { if (i > MAX_ROWS) { builder.append("..."); break; } builder.append(m.toGraphVizString()); i++; } builder.append("}\"\nstyle=filled\nfillcolor=\""); builder.append(this.fillColor); builder.append("\""); builder.append("\ncolor=\"").append(this.color).append("\"\n];\n"); for (UMLArrow arrow : this.arrows) { builder.append(arrow.toGraphVizString()); } return builder.toString(); }