package models.origo.core.navigation; import play.data.validation.Required; import play.db.jpa.Model; import play.modules.origo.core.Navigation; import javax.persistence.Entity; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import java.util.Collections; import java.util.List; @Entity public class BasicNavigation extends Model implements Navigation<BasicNavigation>, Comparable<BasicNavigation> { @ManyToOne public BasicNavigation parent; @OneToMany(mappedBy = "parent", orphanRemoval = true) public List<BasicNavigation> children; @Required public String type; @Required public String section; @Required public String referenceId; @Required public int weight; @Override public String getReferenceId() { return referenceId; } @Override public String getSection() { return section; } @Override public BasicNavigation getParent() { return parent; } @Override public List<BasicNavigation> getChildren() { return children; } public static List<BasicNavigation> findWithSection(String section) { List<BasicNavigation> navigations = BasicNavigation.find("select distinct n from BasicNavigation n where n.section=:section and parent is null"). bind("section", section). fetch(); Collections.sort(navigations); return navigations; } public static List<BasicNavigation> findWithSection(String section, BasicNavigation parent) { List<BasicNavigation> navigations = BasicNavigation. find("select distinct n from BasicNavigation n where n.section=:section and parent=:parent"). bind("section", section). bind("parent", parent). fetch(); Collections.sort(navigations); return navigations; } public static List<BasicNavigation> findWithSection(String section, String parentId) { List<BasicNavigation> navigations = BasicNavigation. find("select distinct n from BasicNavigation n where n.section=:section and parent=:parentId"). bind("section", section). fetch(); Collections.sort(navigations); return navigations; } @Override public int compareTo(BasicNavigation navigation) { return new Integer(weight).compareTo(navigation.weight); } }