/*******************************************************************************
* Copyright (c) 2007, 2008 Edgar Espina.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.deved.antlride.core.dot;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class DotGraph {
private Map<String, DotNode> nodeMap = new LinkedHashMap<String, DotNode>();
private List<DotEdge> edgeList = new ArrayList<DotEdge>();
public final String name;
public final int decisionNumber;
public final String ruleName;
public final String decision;
public final String description;
public final String dot;
public DotGraph(String ruleName, int decision, String description,
String dot) {
this.ruleName = ruleName;
this.decisionNumber = decision;
this.decision = "dec" + decisionNumber;
this.description = description;
this.dot = dot;
this.name = new StringBuilder(ruleName).append("::").append(decision)
.toString();
}
public Iterator<DotNode> nodes() {
return nodeMap.values().iterator();
}
public Iterator<DotEdge> edges() {
return edgeList.iterator();
}
public void node(String name, DotAttributesBuilder attributesBuilder) {
nodeMap.put(name, new DotNode(name,
attributesBuilder == null ? new DotAttribute[0]
: attributesBuilder.build()));
}
public void node(DotNode node) {
nodeMap.put(node.name, node);
}
public void edge(String from, String to,
DotAttributesBuilder attributesBuilder) {
edgeList.add(new DotEdge(nodeMap.get(from), nodeMap.get(to),
attributesBuilder));
}
public void edge(String from, String to, DotAttribute attributes[]) {
edgeList
.add(new DotEdge(nodeMap.get(from), nodeMap.get(to), attributes));
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
for (DotNode node : nodeMap.values()) {
builder.append(node);
builder.append("\n");
}
for (DotEdge edge : edgeList) {
builder.append(edge);
builder.append("\n");
}
return builder.toString();
}
}