private List<Object> verifyArray( Object value, FieldType collectionElementType, boolean collectionElementTypeNullable, String fieldName) { if (!(value instanceof List)) { throw new IllegalArgumentException( String.format( "For field name %s and array type expected List class. Instead " + "class type was %s.", fieldName, value.getClass())); } List<Object> valueList = (List<Object>) value; List<Object> verifiedList = Lists.newArrayListWithCapacity(valueList.size()); for (Object listValue : valueList) { if (listValue == null) { if (!collectionElementTypeNullable) { throw new IllegalArgumentException( String.format( "%s is not nullable in Array field %s", collectionElementType, fieldName)); } verifiedList.add(null); } else { verifiedList.add(verify(listValue, collectionElementType, fieldName)); } } return verifiedList; }
private Map<Object, Object> verifyMap( Object value, TypeName keyTypeName, FieldType valueType, boolean valueTypeNullable, String fieldName) { if (!(value instanceof Map)) { throw new IllegalArgumentException( String.format( "For field name %s and map type expected Map class. Instead " + "class type was %s.", fieldName, value.getClass())); } Map<Object, Object> valueMap = (Map<Object, Object>) value; Map<Object, Object> verifiedMap = Maps.newHashMapWithExpectedSize(valueMap.size()); for (Entry<Object, Object> kv : valueMap.entrySet()) { if (kv.getValue() == null) { if (!valueTypeNullable) { throw new IllegalArgumentException( String.format("%s is not nullable in Map field %s", valueType, fieldName)); } verifiedMap.put(verifyPrimitiveType(kv.getKey(), keyTypeName, fieldName), null); } else { verifiedMap.put( verifyPrimitiveType(kv.getKey(), keyTypeName, fieldName), verify(kv.getValue(), valueType, fieldName)); } } return verifiedMap; }
private List<Object> verify(Schema schema, List<Object> values) { List<Object> verifiedValues = Lists.newArrayListWithCapacity(values.size()); if (schema.getFieldCount() != values.size()) { throw new IllegalArgumentException( String.format( "Field count in Schema (%s) and values (%s) must match", schema.getFieldNames(), values)); } for (int i = 0; i < values.size(); ++i) { Object value = values.get(i); Schema.Field field = schema.getField(i); if (value == null) { if (!field.getNullable()) { throw new IllegalArgumentException( String.format("Field %s is not nullable", field.getName())); } verifiedValues.add(null); } else { verifiedValues.add(verify(value, field.getType(), field.getName())); } } return verifiedValues; }
public Row build() { checkNotNull(schema); if (!this.values.isEmpty() && fieldValueGetterFactory != null) { throw new IllegalArgumentException("Cannot specify both values and getters."); } if (!this.values.isEmpty()) { List<Object> storageValues = attached ? this.values : verify(schema, this.values); checkState(getterTarget == null, "withGetterTarget requires getters."); return new RowWithStorage(schema, storageValues); } else if (fieldValueGetterFactory != null) { checkState(getterTarget != null, "getters require withGetterTarget."); return new RowWithGetters(schema, fieldValueGetterFactory, getterTarget); } else { return new RowWithStorage(schema, Collections.emptyList()); } } }