@Override
  public Set<String> validate(String entityType, Set<String> ids) throws IllegalStateException {
    if (!areParametersValid(EntityNames.STUDENT_COMPETENCY, entityType, ids)) {
      return Collections.EMPTY_SET;
    }

    NeutralQuery query =
        new NeutralQuery(
            new NeutralCriteria(ParameterConstants.ID, NeutralCriteria.CRITERIA_IN, ids));
    query.setIncludeFields(Arrays.asList(ParameterConstants.STUDENT_SECTION_ASSOCIATION_ID));
    Iterable<Entity> comps = getRepo().findAll(EntityNames.STUDENT_COMPETENCY, query);
    Map<String, Set<String>> secAssocIds = new HashMap<String, Set<String>>();
    for (Entity comp : comps) {
      String id = (String) comp.getBody().get(ParameterConstants.STUDENT_SECTION_ASSOCIATION_ID);
      if (!secAssocIds.containsKey(id)) {
        secAssocIds.put(id, new HashSet<String>());
      }
      secAssocIds.get(id).add(comp.getEntityId());
    }

    Set<String> validSectionIds =
        sectionAssocValidator.validate(
            EntityNames.STUDENT_SECTION_ASSOCIATION, secAssocIds.keySet());

    return getValidIds(validSectionIds, secAssocIds);
  }