class AbstractResourceProvider extends BaseProvider implements ResourceProvider, ObservableResourceProvider {

  protected Set<Map<String, Object>> getPropertyMaps(Predicate givenPredicate) {

    SimplifyingPredicateVisitor visitor = new SimplifyingPredicateVisitor(this);
    PredicateHelper.visit(givenPredicate, visitor);
    List<Predicate> predicates = visitor.getSimplifiedPredicates();

    Set<Map<String, Object>> propertyMaps = new HashSet<>();

    for (Predicate predicate : predicates) {
      propertyMaps.add(PredicateHelper.getProperties(predicate));
    }
    return propertyMaps;
  }

  protected  AbstractResourceProvider(Set<String> propertyIds,
                                     Map<Resource.Type, String> keyPropertyIds);

}