package models; import models.base.BaseModel; import play.data.validation.Constraints; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Folder extends BaseModel { @Constraints.Required public String name; @Constraints.Required @ManyToOne public Account owner; @ManyToOne public Folder parent; @ManyToOne public Group group; @ManyToOne public Account account; @OneToMany(mappedBy = "folder") @OrderBy("createdAt DESC") public List<Media> files; @OneToMany(mappedBy = "parent") public List<Folder> folders; @Transient List<Folder> folderList = new ArrayList<>(); public Folder() {} public Folder(String name, Account owner, Folder parent, Group group, Account account) { this.name = name; this.owner = owner; this.parent = parent; this.group = group; this.account = account; } public Folder findRoot(Folder folder) { if(folder.parent == null) return folder; return findRoot(folder.parent); } /** * Find all ancestors without root folder. * used for breadcrumb navigation * @param folder * @return */ public List<Folder> findAncestors(Folder folder) { if(folder.parent != null) { folderList.add(folder); findAncestors(folder.parent); } return folderList; } }