diff --git a/src/main/java/ru/mcs/genealogy/service/GraphvizTreeService.java b/src/main/java/ru/mcs/genealogy/service/GraphvizTreeService.java index aacf99f..5d9d681 100644 --- a/src/main/java/ru/mcs/genealogy/service/GraphvizTreeService.java +++ b/src/main/java/ru/mcs/genealogy/service/GraphvizTreeService.java @@ -4,9 +4,7 @@ import ru.mcs.genealogy.dto.TreeNode; import ru.mcs.genealogy.entity.Person; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; +import java.util.*; @Service public class GraphvizTreeService { @@ -20,8 +18,14 @@ StringBuilder dot = new StringBuilder(); dot.append("digraph familyTree {\n"); dot.append(" rankdir=TB;\n"); - dot.append(" node [shape=box, style=filled, fillcolor=lightblue];\n\n"); -// dot.append(" edge [dir=back];\n\n"); + dot.append(" node [shape=box, style=filled, fillcolor=lightblue];\n"); + dot.append(" edge [dir=forward];\n\n"); + + // Собираем все id, которые есть в дереве + Set existingIds = new HashSet<>(); + for (TreeNode node : treeNodes) { + existingIds.add(node.getPerson().getId()); + } // Добавляем все узлы for (TreeNode node : treeNodes) { @@ -33,15 +37,17 @@ dot.append("\n"); - // Добавляем связи + // Добавляем связи только если родитель существует в дереве for (TreeNode node : treeNodes) { Person person = node.getPerson(); - if (person.getFather() != null) { + + if (person.getFather() != null && existingIds.contains(person.getFather().getId())) { dot.append(String.format(" %d -> %d [label=\"отец\"];\n", person.getFather().getId(), person.getId())); } - if (person.getMother() != null) { + + if (person.getMother() != null && existingIds.contains(person.getMother().getId())) { dot.append(String.format(" %d -> %d [label=\"мать\"];\n", person.getMother().getId(), person.getId()));