@Override public void willResolve(ResponseField field, Operation.Variables variables) { try { jsonWriter.name(field.responseName()); if (field.type() == ResponseField.Type.LIST) { jsonWriter.beginArray(); } } catch (IOException e) { throw new RuntimeException(e); } }
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"}) @Override public <T> T valueFor(Record record, ResponseField field) { switch (field.type()) { case OBJECT: return (T) valueForObject(record, field); case LIST: { return (T) valueForList((List) fieldValue(record, field)); } default: return fieldValue(record, field); } }
@SuppressWarnings("unchecked") private void resolveFields(Operation.Variables operationVariables, ResolveDelegate<Map<String, Object>> delegate, Map<String, FieldDescriptor> buffer) { Map<String, Object> rawFieldValues = rawFieldValues(buffer); for (String fieldResponseName : buffer.keySet()) { FieldDescriptor fieldDescriptor = buffer.get(fieldResponseName); Object rawFieldValue = rawFieldValues.get(fieldResponseName); delegate.willResolve(fieldDescriptor.field, operationVariables); switch (fieldDescriptor.field.type()) { case OBJECT: { resolveObjectFields(fieldDescriptor, (Map<String, Object>) rawFieldValue, delegate); break; } case LIST: { resolveListField(fieldDescriptor.field, (List) fieldDescriptor.value, (List) rawFieldValue, delegate); break; } default: { if (rawFieldValue == null) { delegate.didResolveNull(); } else { delegate.didResolveScalar(rawFieldValue); } break; } } delegate.didResolve(fieldDescriptor.field, operationVariables); } }
@Override public <T> T readConditional(ResponseField field, ConditionalTypeReader<T> conditionalTypeReader) { if (shouldSkip(field)) { return null; } willResolve(field); String value = fieldValueResolver.valueFor(recordSet, field); checkValue(field, value); if (value == null) { resolveDelegate.didResolveNull(); didResolve(field); return null; } else { resolveDelegate.didResolveScalar(value); didResolve(field); if (field.type() == ResponseField.Type.INLINE_FRAGMENT) { for (ResponseField.Condition condition : field.conditions()) { if (condition instanceof ResponseField.TypeNameCondition) { if (((ResponseField.TypeNameCondition) condition).typeName().equals(value)) { return conditionalTypeReader.read(value, this); } } } return null; } else { return conditionalTypeReader.read(value, this); } } }
@SuppressWarnings("unchecked") @Override public <T> T valueFor(Record record, ResponseField field) { switch (field.type()) { case OBJECT: return (T) valueForObject(record, field); case LIST: { return (T) valueForList((List) fieldValue(record, field)); } default: return fieldValue(record, field); } }
@SuppressWarnings("unchecked") @Override public <T> T valueFor(Record record, ResponseField field) { switch (field.type()) { case OBJECT: return (T) valueForObject(record, field); case LIST: { return (T) valueForList((List) fieldValue(record, field)); } default: return fieldValue(record, field); } }
@SuppressWarnings("unchecked") private void normalize(Operation.Variables operationVariables, ResponseNormalizer<Map<String, Object>> responseNormalizer, Map<String, FieldDescriptor> fieldDescriptors) { Map<String, Object> rawFieldValues = rawFieldValues(fieldDescriptors); for (String fieldResponseName : fieldDescriptors.keySet()) { FieldDescriptor fieldDescriptor = fieldDescriptors.get(fieldResponseName); Object rawFieldValue = rawFieldValues.get(fieldResponseName); responseNormalizer.willResolve(fieldDescriptor.field, operationVariables); switch (fieldDescriptor.field.type()) { case OBJECT: { normalizeObjectField(fieldDescriptor, (Map<String, Object>) rawFieldValue, responseNormalizer); break; } case LIST: { normalizeList(fieldDescriptor.field, (List) fieldDescriptor.value, (List) rawFieldValue, responseNormalizer); break; } default: { if (rawFieldValue == null) { responseNormalizer.didResolveNull(); } else { responseNormalizer.didResolveScalar(rawFieldValue); } break; } } responseNormalizer.didResolve(fieldDescriptor.field, operationVariables); } }
@SuppressWarnings("unchecked") private void normalize(Operation.Variables operationVariables, ResponseNormalizer<Map<String, Object>> responseNormalizer, Map<String, FieldDescriptor> fieldDescriptors) { Map<String, Object> rawFieldValues = rawFieldValues(fieldDescriptors); for (String fieldResponseName : fieldDescriptors.keySet()) { FieldDescriptor fieldDescriptor = fieldDescriptors.get(fieldResponseName); Object rawFieldValue = rawFieldValues.get(fieldResponseName); responseNormalizer.willResolve(fieldDescriptor.field, operationVariables); switch (fieldDescriptor.field.type()) { case OBJECT: { normalizeObjectField(fieldDescriptor, (Map<String, Object>) rawFieldValue, responseNormalizer); break; } case LIST: { normalizeList(fieldDescriptor.field, (List) fieldDescriptor.value, (List) rawFieldValue, responseNormalizer); break; } default: { if (rawFieldValue == null) { responseNormalizer.didResolveNull(); } else { responseNormalizer.didResolveScalar(rawFieldValue); } break; } } responseNormalizer.didResolve(fieldDescriptor.field, operationVariables); } }
@Override public <T> T readConditional(ResponseField field, ConditionalTypeReader<T> conditionalTypeReader) { if (shouldSkip(field)) { return null; } willResolve(field); String value = fieldValueResolver.valueFor(recordSet, field); checkValue(field, value); if (value == null) { readerShadow.didResolveNull(); didResolve(field); return null; } else { readerShadow.didResolveScalar(value); didResolve(field); if (field.type() == ResponseField.Type.INLINE_FRAGMENT) { for (ResponseField.Condition condition : field.conditions()) { if (condition instanceof ResponseField.TypeNameCondition) { if (((ResponseField.TypeNameCondition) condition).typeName().equals(value)) { return (T) conditionalTypeReader.read(value, this); } } } return null; } else { return (T) conditionalTypeReader.read(value, this); } } }
@Override public <T> T readConditional(ResponseField field, ConditionalTypeReader<T> conditionalTypeReader) { if (shouldSkip(field)) { return null; } willResolve(field); String value = fieldValueResolver.valueFor(recordSet, field); checkValue(field, value); if (value == null) { readerShadow.didResolveNull(); didResolve(field); return null; } else { readerShadow.didResolveScalar(value); didResolve(field); if (field.type() == ResponseField.Type.INLINE_FRAGMENT) { for (ResponseField.Condition condition : field.conditions()) { if (condition instanceof ResponseField.TypeNameCondition) { if (((ResponseField.TypeNameCondition) condition).typeName().equals(value)) { return (T) conditionalTypeReader.read(value, this); } } } return null; } else { return (T) conditionalTypeReader.read(value, this); } } }