private MapSqlParameterSource getClusterPolicyUnitParameterMap(
     ClusterPolicyUnit clusterPolicyUnit) {
   return getCustomMapSqlParameterSource()
       .addValue("cluster_policy_id", clusterPolicyUnit.getClusterPolicyId())
       .addValue("policy_unit_id", clusterPolicyUnit.getPolicyUnitId())
       .addValue("filter_sequence", clusterPolicyUnit.getFilterSequence())
       .addValue("factor", clusterPolicyUnit.getFactor());
 }
 private List<ClusterPolicyUnit> getclusterPolicyUnit(ClusterPolicy entity) {
   Map<Guid, ClusterPolicyUnit> map = new HashMap<Guid, ClusterPolicyUnit>();
   ClusterPolicyUnit unit;
   if (entity.getFilters() != null) {
     for (Guid policyUnitId : entity.getFilters()) {
       unit = getClusterPolicyUnit(entity, policyUnitId, map);
       if (entity.getFilterPositionMap() != null) {
         Integer position = entity.getFilterPositionMap().get(policyUnitId);
         unit.setFilterSequence(position != null ? position : 0);
       }
     }
   }
   if (entity.getFunctions() != null) {
     for (Pair<Guid, Integer> pair : entity.getFunctions()) {
       unit = getClusterPolicyUnit(entity, pair.getFirst(), map);
       unit.setFactor(pair.getSecond());
     }
   }
   if (entity.getBalance() != null) {
     getClusterPolicyUnit(entity, entity.getBalance(), map);
   }
   return new ArrayList<ClusterPolicyUnit>(map.values());
 }
 private void fillClusterPolicy(
     Map<Guid, ClusterPolicy> map, List<ClusterPolicyUnit> clusterPolicyUnits) {
   Map<Guid, PolicyUnit> policyUnitMap = new HashMap<Guid, PolicyUnit>();
   for (PolicyUnit policyUnit : policyUnitDao.getAll()) {
     policyUnitMap.put(policyUnit.getId(), policyUnit);
   }
   for (ClusterPolicyUnit clusterPolicyUnit : clusterPolicyUnits) {
     ClusterPolicy clusterPolicy = map.get(clusterPolicyUnit.getClusterPolicyId());
     if (policyUnitMap.get(clusterPolicyUnit.getPolicyUnitId()).getPolicyUnitType()
         == PolicyUnitType.FILTER) {
       if (clusterPolicy.getFilters() == null) {
         clusterPolicy.setFilters(new ArrayList<Guid>());
       }
       clusterPolicy.getFilters().add(clusterPolicyUnit.getPolicyUnitId());
       if (clusterPolicyUnit.getFilterSequence() != 0) {
         if (clusterPolicy.getFilterPositionMap() == null) {
           clusterPolicy.setFilterPositionMap(new HashMap<Guid, Integer>());
         }
         clusterPolicy
             .getFilterPositionMap()
             .put(clusterPolicyUnit.getPolicyUnitId(), clusterPolicyUnit.getFilterSequence());
       }
     }
     if (policyUnitMap.get(clusterPolicyUnit.getPolicyUnitId()).getPolicyUnitType()
         == PolicyUnitType.WEIGHT) {
       if (clusterPolicy.getFunctions() == null) {
         clusterPolicy.setFunctions(new ArrayList<Pair<Guid, Integer>>());
       }
       clusterPolicy
           .getFunctions()
           .add(
               new Pair<Guid, Integer>(
                   clusterPolicyUnit.getPolicyUnitId(), clusterPolicyUnit.getFactor()));
     }
     if (policyUnitMap.get(clusterPolicyUnit.getPolicyUnitId()).getPolicyUnitType()
         == PolicyUnitType.LOAD_BALANCING) {
       clusterPolicy.setBalance(clusterPolicyUnit.getPolicyUnitId());
     }
   }
 }