package foundation.org; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import foundation.data.entity.Entity; import foundation.data.entity.EntitySet; import foundation.persist.NamedSQL; import foundation.persist.SQLRunner; import foundation.state.approve.StepType; import foundation.util.Util; public class LeaderHierarchys implements Iterable { public static int MaxLevel = 6; private static NamedSQL templateSQL; private List items; static { try { templateSQL = NamedSQL.getInstance("getLeaderPosition"); } catch (Exception e) { e.printStackTrace(); } } public LeaderHierarchys() { items = new ArrayList(); } public static LeaderHierarchys getInstance(StepType type, String positionId) throws Exception { NamedSQL namedSQL = templateSQL.createInstance(); LeaderHierarchys result = new LeaderHierarchys(); PositionHierarchys hierarchyList = getLeaderHierarchy(namedSQL, positionId); int count = 1; while (hierarchyList != null) { if (isValid(hierarchyList, type)) { result.items.add(hierarchyList); } String parentId = hierarchyList.getParentPositionId(); hierarchyList = getLeaderHierarchy(namedSQL, parentId); count++; if (count > MaxLevel) { break; } } return result; } private static PositionHierarchys getLeaderHierarchy(NamedSQL namedSQL, String positionId) throws Exception { if (Util.isEmpty(positionId)) { return null; } namedSQL.setParam("positionId", positionId); EntitySet entitySet = SQLRunner.getEntitySet(namedSQL); if (entitySet.size() == 0) { return null; } PositionHierarchys positionHierarchys = new PositionHierarchys(); List hierarchyList = new ArrayList(); for (Entity entity: entitySet) { LeaderHierarchy hierarchy = new LeaderHierarchy(); hierarchy.load(entity); hierarchyList.add(hierarchy); } positionHierarchys.setFirstAsDefalut(entitySet.getEntity(0)); positionHierarchys.setPositinEmoployees(hierarchyList); return positionHierarchys; } private static boolean isValid(PositionHierarchys hierarchy, StepType type) { if (hierarchy == null) { return false; } if (StepType.SalesHierarchy == type) { return true; } else if (StepType.SalesDirector == type) { return hierarchy.isSalesDirector(); } else if (StepType.SalesRegionDirector == type) { return hierarchy.isSalesRegionDirector(); } else if (StepType.SalesRep == type) { return hierarchy.isSales(); } return false; } public boolean isEmpty() { return items.isEmpty(); } @Override public Iterator iterator() { return items.iterator(); } }