/** @see CohortDefinitionEvaluator#evaluate(CohortDefinition, EvaluationContext) */
  public EvaluatedCohort evaluate(CohortDefinition cohortDefinition, EvaluationContext context) {

    PersonAttributeCohortDefinition pacd = (PersonAttributeCohortDefinition) cohortDefinition;
    List<String> values = new ArrayList<String>();

    if (pacd.getValues() != null) {
      values.addAll(pacd.getValues());
    }
    if (pacd.getValueConcepts() != null) {
      for (Concept c : pacd.getValueConcepts()) {
        values.add(c.serialize());
      }
    }
    if (pacd.getValueLocations() != null) {
      for (Location l : pacd.getValueLocations()) {
        values.add(l.serialize());
      }
    }

    CohortQueryService cqs = Context.getService(CohortQueryService.class);
    Cohort c = cqs.getPatientsHavingPersonAttributes(pacd.getAttributeType(), values);
    return new EvaluatedCohort(c, cohortDefinition, context);
  }