107 lines
2.5 KiB
Java
107 lines
2.5 KiB
Java
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<TreeModel> flat() {
|
|
List<TreeModel> out = new ArrayList<>();
|
|
this.flat(out);
|
|
return out;
|
|
}
|
|
|
|
private void flat(List<TreeModel> 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<TreeModel> 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);
|
|
}
|
|
}
|