
net.kemitix.dependency.digraph.maven.plugin.AbstractDotFileFormat Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of digraph-dependency-maven-plugin Show documentation
Show all versions of digraph-dependency-maven-plugin Show documentation
Generates a DOT Digraph of dependencies between packages within a project
package net.kemitix.dependency.digraph.maven.plugin;
import lombok.AccessLevel;
import lombok.Getter;
import net.kemitix.node.Node;
/**
* Abstract base for {@link DotFileFormat} implementations.
*
* @author pcampbell
*/
abstract class AbstractDotFileFormat implements DotFileFormat {
@Getter(AccessLevel.PROTECTED)
private final Node base;
private final NodePathGenerator nodePathGenerator;
/**
* Constructor.
*
* @param base the base package
* @param nodePathGenerator the node path generator
*/
AbstractDotFileFormat(
final Node base,
final NodePathGenerator nodePathGenerator) {
this.base = base;
this.nodePathGenerator = nodePathGenerator;
}
@Override
public String renderReport() {
final StringBuilder report = new StringBuilder();
report.append(renderGraphStart());
report.append(renderElements(this::renderNode, this::renderUsages));
report.append(renderGraphFinish());
return report.toString();
}
protected String getPath(
final Node headNode,
final String delimiter) {
return nodePathGenerator.getPath(headNode, getBase(), delimiter);
}
protected String renderElements(
final NodeRenderer nodeRenderer,
final UsageRenderer usageRenderer) {
final StringBuilder render = new StringBuilder();
render.append(nodeRenderer.renderNode(base));
render.append(usageRenderer.renderUsage(base));
return render.toString();
}
String renderGraphStart() {
return "digraph{compound=true;node[shape=box]\n";
}
abstract String renderNode(final Node node);
abstract String renderUsages(final Node node);
String renderGraphFinish() {
return "}";
}
/**
* Functional Interface for rendering a node.
*/
@FunctionalInterface
protected interface NodeRenderer {
String renderNode(final Node node);
}
/**
* Functional Interface for rendering a usage.
*/
@FunctionalInterface
protected interface UsageRenderer {
String renderUsage(final Node node);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy