
net.kemitix.dependency.digraph.maven.plugin.NodeTreeDependencyData Maven / Gradle / Ivy
package net.kemitix.dependency.digraph.maven.plugin;
import lombok.Getter;
import org.apache.maven.plugin.logging.Log;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import net.kemitix.node.Node;
import net.kemitix.node.NodeItem;
/**
* Implementation of {@link DependencyData} using a node tree.
*
* @author Paul Campbell
*/
class NodeTreeDependencyData implements DependencyData {
private final Node root = new NodeItem<>(
new PackageData("[root]"));
@Getter
private Node baseNode;
@Override
public void addDependency(final String user, final String imported) {
final List userLine = createPackageLineList(user);
root.createDescendantLine(userLine);
final List importedLine = createPackageLineList(imported);
root.createDescendantLine(importedLine);
root.walkTree(importedLine).ifPresent((Node i) -> {
root.walkTree(userLine).ifPresent((Node u) -> {
u.getData().getUses().add(i);
});
});
}
/**
* Sets the base package.
*
* @param basePackage the base package within which to report
*/
@Override
public void setBasePackage(final String basePackage) {
final List baseLine = createPackageLineList(basePackage);
root.createDescendantLine(baseLine);
root.walkTree(baseLine)
.ifPresent((Node base) -> baseNode = base);
}
private List createPackageLineList(final String userPackage) {
List line = new ArrayList<>();
Arrays.asList(userPackage.split("\\."))
.forEach((String n) -> line.add(new PackageData(n)));
return line;
}
@Override
public void debugLog(final Log log) {
debugLogNode(log, baseNode, 0);
}
private void debugLogNode(
final Log log, final Node node, final int depth) {
String padding = IntStream.range(0, depth * 2)
.mapToObj(x -> " ")
.collect(Collectors.joining());
log.info(padding + node.getData().getName());
node.getChildren().stream().forEach((Node t) -> {
debugLogNode(log, t, depth + 1);
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy