package org.msh.tb.adminunits; import org.msh.tb.entities.AdministrativeUnit; /** * Administrative unit utilities functions * @author Ricardo * */ public class AdminUnitsUtils { /** * Generate HQL instruction to return all children ids of a parent administrative unit * @param parent * @return */ static public String childrenHQLCriteria(AdministrativeUnit parent, boolean includeSelf) { if (parent.getLevel() == 5) { if (includeSelf) return "select au0.id from AdministrativeUnit au0 where au0.id = " + parent.getId().toString(); else return ""; } String parentId = parent.getId().toString(); String crit = " where au1.id = " + parentId; String join = "from AdministrativeUnit au0 left join au0.parent au1"; if (includeSelf) crit = crit + " or au0.id = " + parentId; if (parent.getLevel() <= 3) { join += " left join au1.parent au2"; crit += " or au2.id = " + parentId; } if (parent.getLevel() <= 2) { join += " left join au2.parent au3"; crit += " or au3.id = " + parentId; } if (parent.getLevel() == 1) { crit += " or au4.id = " + parentId; join += " left join au3.parent au4"; } return "select au0.id " + join + crit; } }