Search in sources :

Example 6 with DefaultTypeConversionsFactory

use of org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory in project beam by apache.

the class JavaFieldSchema method schemaTypeCreator.

@Override
public SchemaUserTypeCreator schemaTypeCreator(Class<?> targetClass, Schema schema) {
    // If a static method is marked with @SchemaCreate, use that.
    Method annotated = ReflectUtils.getAnnotatedCreateMethod(targetClass);
    if (annotated != null) {
        return POJOUtils.getStaticCreator(targetClass, annotated, schema, JavaFieldTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
    }
    // If a Constructor was tagged with @SchemaCreate, invoke that constructor.
    Constructor<?> constructor = ReflectUtils.getAnnotatedConstructor(targetClass);
    if (constructor != null) {
        return POJOUtils.getConstructorCreator(targetClass, constructor, schema, JavaFieldTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
    }
    return POJOUtils.getSetFieldCreator(targetClass, schema, JavaFieldTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
}
Also used : DefaultTypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory) Method(java.lang.reflect.Method)

Example 7 with DefaultTypeConversionsFactory

use of org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory in project beam by apache.

the class AutoValueUtils method getConstructorCreator.

/**
 * Try to find an accessible constructor for creating an AutoValue class. Otherwise return null.
 */
@Nullable
public static SchemaUserTypeCreator getConstructorCreator(Class<?> clazz, Schema schema, FieldValueTypeSupplier fieldValueTypeSupplier) {
    Class<?> generatedClass = getAutoValueGenerated(clazz);
    List<FieldValueTypeInformation> schemaTypes = fieldValueTypeSupplier.get(clazz, schema);
    Optional<Constructor<?>> constructor = Arrays.stream(generatedClass.getDeclaredConstructors()).filter(c -> !Modifier.isPrivate(c.getModifiers())).filter(c -> matchConstructor(c, schemaTypes)).findAny();
    return constructor.map(c -> JavaBeanUtils.getConstructorCreator(generatedClass, c, schema, fieldValueTypeSupplier, new DefaultTypeConversionsFactory())).orElse(null);
}
Also used : ByteBuddy(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.ByteBuddy) Preconditions.checkNotNull(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkNotNull) Arrays(java.util.Arrays) TypeDescriptor(org.apache.beam.sdk.values.TypeDescriptor) MethodVariableAccess(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.member.MethodVariableAccess) Experimental(org.apache.beam.sdk.annotations.Experimental) ArrayAccess(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.collection.ArrayAccess) DynamicType(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.dynamic.DynamicType) TypeCasting(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.assign.TypeCasting) AsmVisitorWrapper(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.asm.AsmVisitorWrapper) Constructor(java.lang.reflect.Constructor) Function(java.util.function.Function) InstrumentedType(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.dynamic.scaffold.InstrumentedType) ByteCodeAppender(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.ByteCodeAppender) Parameter(java.lang.reflect.Parameter) Kind(org.apache.beam.sdk.annotations.Experimental.Kind) SchemaUserTypeCreator(org.apache.beam.sdk.schemas.SchemaUserTypeCreator) Map(java.util.Map) MethodReturn(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.member.MethodReturn) FieldValueTypeInformation(org.apache.beam.sdk.schemas.FieldValueTypeInformation) ForLoadedType(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.description.type.TypeDescription.ForLoadedType) Method(java.lang.reflect.Method) IntegerConstant(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.constant.IntegerConstant) DefaultTypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory) Nullable(org.checkerframework.checker.nullness.qual.Nullable) ClassLoadingStrategy(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.dynamic.loading.ClassLoadingStrategy) TypeCreation(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.TypeCreation) Duplication(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.Duplication) Size(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.ByteCodeAppender.Size) ElementMatchers(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.matcher.ElementMatchers) Lists(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Lists) ClassWriter(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.jar.asm.ClassWriter) Collectors(java.util.stream.Collectors) Schema(org.apache.beam.sdk.schemas.Schema) TypeConversion(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.TypeConversion) InvocationTargetException(java.lang.reflect.InvocationTargetException) List(java.util.List) StackManipulation(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.StackManipulation) MethodInvocation(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.member.MethodInvocation) Type(java.lang.reflect.Type) Modifier(java.lang.reflect.Modifier) InjectPackageStrategy(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.InjectPackageStrategy) ReflectHelpers(org.apache.beam.sdk.util.common.ReflectHelpers) TypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.TypeConversionsFactory) Optional(java.util.Optional) Removal(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.bytecode.Removal) Implementation(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.implementation.Implementation) ForLoadedMethod(org.apache.beam.vendor.bytebuddy.v1_11_0.net.bytebuddy.description.method.MethodDescription.ForLoadedMethod) FieldValueTypeInformation(org.apache.beam.sdk.schemas.FieldValueTypeInformation) Constructor(java.lang.reflect.Constructor) DefaultTypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory) Nullable(org.checkerframework.checker.nullness.qual.Nullable)

Example 8 with DefaultTypeConversionsFactory

use of org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory in project beam by apache.

the class JavaBeanSchema method schemaTypeCreator.

@Override
public SchemaUserTypeCreator schemaTypeCreator(Class<?> targetClass, Schema schema) {
    // If a static method is marked with @SchemaCreate, use that.
    Method annotated = ReflectUtils.getAnnotatedCreateMethod(targetClass);
    if (annotated != null) {
        return JavaBeanUtils.getStaticCreator(targetClass, annotated, schema, GetterTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
    }
    // If a Constructor was tagged with @SchemaCreate, invoke that constructor.
    Constructor<?> constructor = ReflectUtils.getAnnotatedConstructor(targetClass);
    if (constructor != null) {
        return JavaBeanUtils.getConstructorCreator(targetClass, constructor, schema, GetterTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
    }
    // Else try to make a setter-based creator
    Factory<SchemaUserTypeCreator> setterBasedFactory = new SetterBasedCreatorFactory(new JavaBeanSetterFactory());
    return setterBasedFactory.create(targetClass, schema);
}
Also used : DefaultTypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory) Method(java.lang.reflect.Method)

Example 9 with DefaultTypeConversionsFactory

use of org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory in project beam by apache.

the class POJOUtilsTest method testGeneratedByteBufferSetters.

@Test
public void testGeneratedByteBufferSetters() {
    POJOWithByteArray pojo = new POJOWithByteArray();
    List<FieldValueSetter> setters = POJOUtils.getSetters(POJOWithByteArray.class, POJO_WITH_BYTE_ARRAY_SCHEMA, JavaFieldTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
    setters.get(0).set(pojo, BYTE_ARRAY);
    setters.get(1).set(pojo, BYTE_BUFFER.array());
    assertArrayEquals("not equal", BYTE_ARRAY, pojo.bytes1);
    assertEquals(BYTE_BUFFER, pojo.bytes2);
}
Also used : DefaultTypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory) FieldValueSetter(org.apache.beam.sdk.schemas.FieldValueSetter) POJOWithByteArray(org.apache.beam.sdk.schemas.utils.TestPOJOs.POJOWithByteArray) Test(org.junit.Test)

Example 10 with DefaultTypeConversionsFactory

use of org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory in project beam by apache.

the class POJOUtilsTest method testGeneratedSimpleGetters.

@Test
public void testGeneratedSimpleGetters() {
    SimplePOJO simplePojo = new SimplePOJO("field1", (byte) 41, (short) 42, 43, 44L, true, DATE, INSTANT, BYTE_ARRAY, BYTE_BUFFER, new BigDecimal(42), new StringBuilder("stringBuilder"));
    List<FieldValueGetter> getters = POJOUtils.getGetters(SimplePOJO.class, SIMPLE_POJO_SCHEMA, JavaFieldTypeSupplier.INSTANCE, new DefaultTypeConversionsFactory());
    assertEquals(12, getters.size());
    assertEquals("str", getters.get(0).name());
    assertEquals("field1", getters.get(0).get(simplePojo));
    assertEquals((byte) 41, getters.get(1).get(simplePojo));
    assertEquals((short) 42, getters.get(2).get(simplePojo));
    assertEquals((int) 43, getters.get(3).get(simplePojo));
    assertEquals((long) 44, getters.get(4).get(simplePojo));
    assertTrue((Boolean) getters.get(5).get(simplePojo));
    assertEquals(DATE.toInstant(), getters.get(6).get(simplePojo));
    assertEquals(INSTANT, getters.get(7).get(simplePojo));
    assertArrayEquals("Unexpected bytes", BYTE_ARRAY, (byte[]) getters.get(8).get(simplePojo));
    assertArrayEquals("Unexpected bytes", BYTE_BUFFER.array(), (byte[]) getters.get(9).get(simplePojo));
    assertEquals(new BigDecimal(42), getters.get(10).get(simplePojo));
    assertEquals("stringBuilder", getters.get(11).get(simplePojo));
}
Also used : FieldValueGetter(org.apache.beam.sdk.schemas.FieldValueGetter) DefaultTypeConversionsFactory(org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory) SimplePOJO(org.apache.beam.sdk.schemas.utils.TestPOJOs.SimplePOJO) BigDecimal(java.math.BigDecimal) Test(org.junit.Test)

Aggregations

DefaultTypeConversionsFactory (org.apache.beam.sdk.schemas.utils.ByteBuddyUtils.DefaultTypeConversionsFactory)14 Test (org.junit.Test)10 FieldValueSetter (org.apache.beam.sdk.schemas.FieldValueSetter)6 Method (java.lang.reflect.Method)4 BigDecimal (java.math.BigDecimal)4 FieldValueGetter (org.apache.beam.sdk.schemas.FieldValueGetter)4 SetterTypeSupplier (org.apache.beam.sdk.schemas.JavaBeanSchema.SetterTypeSupplier)3 JavaBeanSchema (org.apache.beam.sdk.schemas.JavaBeanSchema)2 GetterTypeSupplier (org.apache.beam.sdk.schemas.JavaBeanSchema.GetterTypeSupplier)2 BeanWithBoxedFields (org.apache.beam.sdk.schemas.utils.TestJavaBeans.BeanWithBoxedFields)2 SimpleBean (org.apache.beam.sdk.schemas.utils.TestJavaBeans.SimpleBean)2 POJOWithBoxedFields (org.apache.beam.sdk.schemas.utils.TestPOJOs.POJOWithBoxedFields)2 SimplePOJO (org.apache.beam.sdk.schemas.utils.TestPOJOs.SimplePOJO)2 Constructor (java.lang.reflect.Constructor)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Modifier (java.lang.reflect.Modifier)1 Parameter (java.lang.reflect.Parameter)1 Type (java.lang.reflect.Type)1 Arrays (java.util.Arrays)1 List (java.util.List)1