/** Return an empty {@link FieldAccessDescriptor}. */ public static FieldAccessDescriptor create() { return builder().build(); }
public static FieldAccessDescriptor withAllFields() { return builder().setAllFields(true).build(); }
/** * Return a descriptor that access the specified fields. * * <p>By default, if the field is a nested row (or a container containing a row), all fields of * said rows are accessed. For finer-grained acccess to nested rows, call withNestedField and pass * in a recursive {@link FieldAccessDescriptor}. */ public static FieldAccessDescriptor withFieldNames(Iterable<String> fieldNames) { return builder().setFieldNamesAccessed(Sets.newLinkedHashSet(fieldNames)).build(); }
/** * Return a descriptor that access the specified fields. * * <p>By default, if the field is a nested row (or a container containing a row), all fields of * said rows are accessed. For finer-grained acccess to nested rows, call withNestedField and pass * in a recursive {@link FieldAccessDescriptor}. */ public static FieldAccessDescriptor withFieldIds(Iterable<Integer> ids) { return builder().setFieldIdsAccessed(Sets.newLinkedHashSet(ids)).build(); }
public FieldAccessDescriptor resolve(Schema schema) { Set<Integer> resolvedFieldIdsAccessed = resolveFieldIdsAccessed(schema); Map<Integer, FieldAccessDescriptor> resolvedNestedFieldsAccessed = resolveNestedFieldsAccessed(schema); checkState( !getAllFields() || resolvedNestedFieldsAccessed.isEmpty(), "nested fields cannot be set if allFields is also set"); // If a recursive access is set for any nested fields, remove those fields from // fieldIdsAccessed. resolvedFieldIdsAccessed.removeAll(resolvedNestedFieldsAccessed.keySet()); return builder() .setAllFields(getAllFields()) .setFieldIdsAccessed(resolvedFieldIdsAccessed) .setNestedFieldsAccessedById(resolvedNestedFieldsAccessed) .build(); }