package fr.titionfire.ffsaf.data.model; import io.quarkus.runtime.annotations.RegisterForReflection; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Getter @Setter @AllArgsConstructor @NoArgsConstructor @RegisterForReflection @Entity @Table(name = "tree") public class TreeModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @Column(name = "id_category") Long category; Integer level; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "match_id", referencedColumnName = "id") MatchModel match; @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinColumn(referencedColumnName = "id") TreeModel left; @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinColumn(referencedColumnName = "id") TreeModel right; public TreeModel(Long category, Integer level, MatchModel match) { this.category = category; this.level = level; this.match = match; this.left = null; this.right = null; } public List flat() { List out = new ArrayList<>(); this.flat(out); return out; } private void flat(List out) { out.add(this); if (this.right != null) this.right.flat(out); if (this.left != null) this.left.flat(out); } public int death() { int dg = 0; int dd = 0; if (this.right != null) dg = this.right.death(); if (this.left != null) dg = this.left.death(); return 1 + Math.max(dg, dd); } public int getMaxChildrenAtDepth(int death, int current) { if (current == death) return 1; int tmp = 0; if (this.right != null) tmp += this.right.getMaxChildrenAtDepth(death, current + 1); if (this.left != null) tmp += this.left.getMaxChildrenAtDepth(death, current + 1); return tmp; } public void getChildrenAtDepth (int death, int current, List out) { if (current == death) { out.add(this); return; } if (this.right != null) this.right.getChildrenAtDepth(death, current + 1, out); if (this.left != null) this.left.getChildrenAtDepth(death, current + 1, out); } }