/* * Copyright Debezium Authors. * * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ package io.debezium.connector.cassandra.transforms.type.converter; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.cassandra.cql3.FieldIdentifier; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.db.marshal.UserType; import com.datastax.driver.core.DataType; import io.debezium.connector.cassandra.transforms.CassandraTypeConverter; public class UserTypeConverter implements TypeConverter<UserType> { @Override public UserType convert(DataType dataType) { com.datastax.driver.core.UserType userType = (com.datastax.driver.core.UserType) dataType; String typeNameString = userType.getTypeName(); Collection<String> fieldNames = userType.getFieldNames(); List<AbstractType<?>> innerAbstractTypes = new ArrayList<>(fieldNames.size()); ByteBuffer typeNameBuffer = UTF8Type.instance.fromString(typeNameString); List<FieldIdentifier> fieldIdentifiers = new ArrayList<>(fieldNames.size()); for (String fieldName : fieldNames) { fieldIdentifiers.add(FieldIdentifier.forInternalString(fieldName)); innerAbstractTypes.add((CassandraTypeConverter.convert(userType.getFieldType(fieldName)))); } return new UserType(userType.getKeyspace(), typeNameBuffer, fieldIdentifiers, innerAbstractTypes, !userType.isFrozen()); } }