/** * note that the returned Field may not be in this Document * directly, but may refer to a field in a struct contained in it, * in which case the returned Field is only useful for obtaining * the field type; it can't be used for get() and set(). **/ @Override public Field getField(String fieldName) { if (fieldMap != null && fieldMap.containsKey(fieldName)) { fieldName = fieldMap.get(fieldName); } FieldPath path = getFieldPath(fieldName); Field ret = path.get(path.size() - 1).getFieldRef(); checkAccess(ret); return ret; }
out.append("."); Field field = entry.getFieldRef(); out.append(field.getName()); prevType = field.getDataType();
public String toString() { String retVal = type.toString() + ": "; switch (type) { case STRUCT_FIELD: retVal += getFieldRef(); break; case ARRAY_INDEX: retVal += getLookupIndex(); break; case MAP_KEY: retVal += getLookupKey(); break; case MAP_ALL_KEYS: case MAP_ALL_VALUES: break; case VARIABLE: retVal += getVariableName(); break; } return retVal; }
if (pos < fieldPath.size()) { if (fieldPath.get(pos).getType() == FieldPathEntry.Type.STRUCT_FIELD) { FieldValue fieldVal = getFieldValue(fieldPath.get(pos).getFieldRef()); if (fieldVal != null) { FieldPathIteratorHandler.ModificationStatus status = fieldVal.iterateNested(fieldPath, pos + 1, handler); if (status == FieldPathIteratorHandler.ModificationStatus.REMOVED) { removeFieldValue(fieldPath.get(pos).getFieldRef()); return FieldPathIteratorHandler.ModificationStatus.MODIFIED; } else { setFieldValue(fieldPath.get(pos).getFieldRef(), fieldVal); FieldValue newVal = fieldPath.get(pos).getFieldRef().getDataType().createFieldValue(); FieldPathIteratorHandler.ModificationStatus status = newVal.iterateNested(fieldPath, pos + 1, handler); if (status == FieldPathIteratorHandler.ModificationStatus.MODIFIED) { setFieldValue(fieldPath.get(pos).getFieldRef(), newVal); return status;