use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.
the class TestArray method testStringArrayArray.
@Test
public void testStringArrayArray() {
TestDataTemplateUtil.FieldInfo fieldInfo = TestDataTemplateUtil.fieldInfo(new ArrayTest(), "stringArrayArray");
@SuppressWarnings("unchecked") Class<StringArrayArray> templateClass = (Class<StringArrayArray>) fieldInfo.getFieldClass();
ArrayDataSchema schema = (ArrayDataSchema) fieldInfo.getField().getType();
List<StringArray> input = new ArrayList<StringArray>();
for (int i = 0; i < 5; ++i) {
input.add(new StringArray());
input.get(i).add("input " + i);
}
List<StringArray> adds = new ArrayList<StringArray>();
for (int i = 0; i < 5; ++i) {
adds.add(new StringArray());
adds.get(i).add("add " + i);
}
TestArrayTemplate.testArray(templateClass, schema, input, adds);
}
use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.
the class CompatibilityChecker method check.
private void check(DataSchema older, DataSchema newer) {
Checked toCheck = new Checked(older, newer);
if (_checked.contains(toCheck)) {
return;
}
_checked.add(toCheck);
if (older == newer) {
return;
}
int pathCount = 1;
if (_options.getMode() == CompatibilityOptions.Mode.DATA) {
older = older.getDereferencedDataSchema();
while (newer.getType() == DataSchema.Type.TYPEREF) {
TyperefDataSchema typerefDataSchema = ((TyperefDataSchema) newer);
_path.addLast(typerefDataSchema.getFullName());
_path.addLast(DataSchemaConstants.REF_KEY);
pathCount++;
newer = typerefDataSchema.getRef();
}
}
if (newer.getType() == DataSchema.Type.TYPEREF) {
_path.addLast(((TyperefDataSchema) newer).getFullName());
} else {
_path.addLast(newer.getUnionMemberKey());
}
switch(newer.getType()) {
case TYPEREF:
if (isSameType(older, newer))
checkTyperef((TyperefDataSchema) older, (TyperefDataSchema) newer);
break;
case RECORD:
if (isSameType(older, newer))
checkRecord((RecordDataSchema) older, (RecordDataSchema) newer);
break;
case ARRAY:
if (isSameType(older, newer))
checkArray((ArrayDataSchema) older, (ArrayDataSchema) newer);
break;
case MAP:
if (isSameType(older, newer))
checkMap((MapDataSchema) older, (MapDataSchema) newer);
break;
case ENUM:
if (isSameType(older, newer))
checkEnum((EnumDataSchema) older, (EnumDataSchema) newer);
break;
case FIXED:
if (isSameType(older, newer))
checkFixed((FixedDataSchema) older, (FixedDataSchema) newer);
break;
case UNION:
if (isSameType(older, newer))
checkUnion((UnionDataSchema) older, (UnionDataSchema) newer);
break;
default:
if (newer instanceof PrimitiveDataSchema)
checkPrimitive(older, newer);
else
throw new IllegalStateException("Unknown schema type " + newer.getType() + ", checking old schema " + older + ", new schema " + newer);
break;
}
for (; pathCount > 0; pathCount--) {
_path.removeLast();
}
return;
}
use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.
the class SchemaSampleDataGenerator method buildData.
private static Object buildData(ParentSchemas parentSchemas, DataSchema schema, String fieldName, DataGenerationOptions spec) {
spec = preventRecursionIntoAlreadyTraversedSchemas(parentSchemas, spec, schema);
parentSchemas.incrementReferences(schema);
final DataSchema derefSchema = schema.getDereferencedDataSchema();
final SampleDataCallback callback = spec.getCallback();
Object data = null;
switch(derefSchema.getType()) {
case BOOLEAN:
data = callback.getBoolean(fieldName);
break;
case INT:
data = callback.getInteger(fieldName);
break;
case LONG:
data = callback.getLong(fieldName);
break;
case FLOAT:
data = callback.getFloat(fieldName);
break;
case DOUBLE:
data = callback.getDouble(fieldName);
break;
case BYTES:
data = callback.getBytes(fieldName);
break;
case STRING:
data = callback.getString(fieldName);
break;
case NULL:
data = Data.NULL;
break;
case FIXED:
data = callback.getFixed(fieldName, (FixedDataSchema) derefSchema);
break;
case ENUM:
data = callback.getEnum(fieldName, (EnumDataSchema) derefSchema);
break;
case ARRAY:
final DataList dataList = new DataList(spec.getArraySize());
for (int i = 0; i < spec.getArraySize(); i++) {
final Object item = buildData(parentSchemas, ((ArrayDataSchema) derefSchema).getItems(), fieldName, spec);
dataList.add(item);
}
data = dataList;
break;
case RECORD:
data = buildRecordData(parentSchemas, (RecordDataSchema) derefSchema, spec);
break;
case MAP:
final DataMap dataMap = new DataMap();
for (int i = 0; i < spec.getArraySize(); i++) {
final Object item = buildData(parentSchemas, ((MapDataSchema) derefSchema).getValues(), fieldName, spec);
dataMap.put("mapField_" + _random.nextInt(), item);
}
data = dataMap;
break;
case UNION:
final UnionDataSchema unionSchema = (UnionDataSchema) derefSchema;
final List<DataSchema> types = removeAlreadyTraversedSchemasFromUnionMemberList(parentSchemas, unionSchema.getTypes());
final int unionIndex = _random.nextInt(types.size());
final DataSchema unionItemSchema = types.get(unionIndex);
data = buildData(parentSchemas, unionItemSchema, fieldName, spec);
if (data != null) {
final DataMap unionMap = new DataMap();
unionMap.put(unionItemSchema.getUnionMemberKey(), data);
data = unionMap;
}
break;
case TYPEREF:
data = buildData(parentSchemas, derefSchema, fieldName, spec);
break;
}
parentSchemas.decrementReferences(schema);
return data;
}
use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.
the class JavaDataTemplateGenerator method generateArray.
protected void generateArray(JDefinedClass arrayClass, ArrayTemplateSpec arrayDataTemplateSpec) throws JClassAlreadyExistsException {
final JClass itemJClass = generate(arrayDataTemplateSpec.getItemClass());
final JClass dataJClass = generate(arrayDataTemplateSpec.getItemDataClass());
if (CodeUtil.isDirectType(arrayDataTemplateSpec.getSchema().getItems())) {
arrayClass._extends(_directArrayBaseClass.narrow(itemJClass));
} else {
extendWrappingArrayBaseClass(itemJClass, arrayClass);
}
/** see {@link #schemaForArrayItemsOrMapValues} */
final DataSchema bareSchema = new ArrayDataSchema(schemaForArrayItemsOrMapValues(arrayDataTemplateSpec.getCustomInfo(), arrayDataTemplateSpec.getSchema().getItems()));
final JVar schemaField = generateSchemaField(arrayClass, bareSchema);
generateConstructorWithNoArg(arrayClass, _dataListClass);
generateConstructorWithInitialCapacity(arrayClass, _dataListClass);
generateConstructorWithCollection(arrayClass, itemJClass);
generateConstructorWithArg(arrayClass, schemaField, _dataListClass, itemJClass, dataJClass);
if (_pathSpecMethods) {
generatePathSpecMethodsForCollection(arrayClass, arrayDataTemplateSpec.getSchema(), itemJClass, "items");
}
generateCustomClassInitialization(arrayClass, arrayDataTemplateSpec.getCustomInfo());
if (_copierMethods) {
generateCopierMethods(arrayClass);
}
}
use of com.linkedin.data.schema.ArrayDataSchema in project rest.li by linkedin.
the class JavaRequestBuilderGenerator method getJavaBindingType.
private JavaBinding getJavaBindingType(DataSchema schema, JDefinedClass enclosingClass) {
final JavaBinding binding = new JavaBinding();
if (_generateDataTemplates || schema instanceof ArrayDataSchema) {
final ClassTemplateSpec classSpec = generateClassSpec(schema, enclosingClass);
binding.schemaClass = _javaDataTemplateGenerator.generate(classSpec);
{
_generatedArrayClasses.add(binding.schemaClass);
}
}
binding.schemaClass = getClassRefForSchema(schema, enclosingClass);
binding.valueClass = getClassRefForSchema(schema, enclosingClass);
if (schema instanceof TyperefDataSchema) {
final TyperefDataSchema typerefDataSchema = (TyperefDataSchema) schema;
if (typerefDataSchema.getDereferencedDataSchema().getType() != DataSchema.Type.UNION) {
final String javaClassNameFromSchema = CustomTypeUtil.getJavaCustomTypeClassNameFromSchema(typerefDataSchema);
if (javaClassNameFromSchema != null) {
binding.valueClass = getCodeModel().directClass(javaClassNameFromSchema);
} else {
binding.valueClass = getJavaBindingType(typerefDataSchema.getRef(), enclosingClass).valueClass;
}
}
}
return binding;
}
Aggregations