Example usage for org.apache.cassandra.db.marshal UserType split

List of usage examples for org.apache.cassandra.db.marshal UserType split

Introduction

In this page you can find the example usage for org.apache.cassandra.db.marshal UserType split.

Prototype

public ByteBuffer[] split(ByteBuffer value) 

Source Link

Document

Split a tuple value into its component values.

Usage

From source file:com.stratio.cassandra.lucene.column.ColumnsMapper.java

License:Apache License

private void addColumns(Columns columns, ColumnBuilder builder, AbstractType type, ByteBuffer value) {
    if (type.isCollection()) {
        value = ByteBufferUtil.clone(value);
        CollectionType<?> collectionType = (CollectionType<?>) type;
        switch (collectionType.kind) {
        case SET: {
            AbstractType<?> nameType = collectionType.nameComparator();
            int colSize = CollectionSerializer.readCollectionSize(value, Server.CURRENT_VERSION);
            for (int j = 0; j < colSize; j++) {
                ByteBuffer itemValue = CollectionSerializer.readValue(value, Server.CURRENT_VERSION);
                addColumns(columns, builder, nameType, itemValue);
            }//w w w.  j  ava2  s  . c o m
            break;
        }
        case LIST: {
            AbstractType<?> valueType = collectionType.valueComparator();
            int colSize = CollectionSerializer.readCollectionSize(value, Server.CURRENT_VERSION);
            for (int j = 0; j < colSize; j++) {
                ByteBuffer itemValue = CollectionSerializer.readValue(value, Server.CURRENT_VERSION);
                addColumns(columns, builder, valueType, itemValue);
            }
            break;
        }
        case MAP: {
            AbstractType<?> keyType = collectionType.nameComparator();
            AbstractType<?> valueType = collectionType.valueComparator();
            int colSize = MapSerializer.readCollectionSize(value, Server.CURRENT_VERSION);
            for (int j = 0; j < colSize; j++) {
                ByteBuffer mapKey = MapSerializer.readValue(value, Server.CURRENT_VERSION);
                ByteBuffer mapValue = MapSerializer.readValue(value, Server.CURRENT_VERSION);
                String itemName = keyType.compose(mapKey).toString();
                collectionType.nameComparator();
                addColumns(columns, builder.withMapName(itemName), valueType, mapValue);
            }
            break;
        }
        default: {
            throw new IndexException("Unknown collection type %s", collectionType.kind);
        }
        }
    } else if (type instanceof UserType) {
        UserType userType = (UserType) type;
        ByteBuffer[] values = userType.split(value);
        for (int i = 0; i < userType.fieldNames().size(); i++) {
            String itemName = userType.fieldNameAsString(i);
            AbstractType<?> itemType = userType.fieldType(i);
            // This only occurs in UDT not fully composed
            if (values[i] != null) {
                addColumns(columns, builder.withUDTName(itemName), itemType, values[i]);
            }
        }
    } else if (type instanceof TupleType) {
        TupleType tupleType = (TupleType) type;
        ByteBuffer[] values = tupleType.split(value);
        for (Integer i = 0; i < tupleType.size(); i++) {
            String itemName = i.toString();
            AbstractType<?> itemType = tupleType.type(i);
            addColumns(columns, builder.withUDTName(itemName), itemType, values[i]);
        }
    } else {
        if (value != null) {
            columns.add(builder.buildWithDecomposed(value, type));
        }
    }
}

From source file:org.elassandra.cluster.InternalCassandraClusterService.java

License:Apache License

public static Object deserialize(AbstractType<?> type, ByteBuffer bb, Mapper mapper)
        throws CharacterCodingException {
    if (type instanceof UserType) {
        UserType udt = (UserType) type;
        Map<String, Object> mapValue = new HashMap<String, Object>();
        ByteBuffer[] components = udt.split(bb);

        if (GEO_POINT_TYPE.equals(ByteBufferUtil.string(udt.name))) {
            if (components[0] != null)
                mapValue.put(GeoPointFieldMapper.Names.LAT, deserialize(udt.type(0), components[0], null));
            if (components[1] != null)
                mapValue.put(GeoPointFieldMapper.Names.LON, deserialize(udt.type(1), components[1], null));
        } else {//ww w.  j  a va 2  s  . com
            for (int i = 0; i < components.length; i++) {
                String fieldName = UTF8Type.instance.compose(udt.fieldName(i));
                AbstractType<?> ctype = udt.type(i);
                Mapper subMapper = null;
                if (mapper != null && mapper instanceof ObjectMapper)
                    subMapper = ((ObjectMapper) mapper).getMapper(fieldName);
                Object value = (components[i] == null) ? null : deserialize(ctype, components[i], subMapper);
                mapValue.put(fieldName, value);
            }
        }
        return mapValue;
    } else if (type instanceof ListType) {
        ListType<?> ltype = (ListType<?>) type;
        ByteBuffer input = bb.duplicate();
        int size = CollectionSerializer.readCollectionSize(input, Server.VERSION_3);
        List list = new ArrayList(size);
        for (int i = 0; i < size; i++) {
            list.add(deserialize(ltype.getElementsType(),
                    CollectionSerializer.readValue(input, Server.VERSION_3), mapper));
        }
        if (input.hasRemaining())
            throw new MarshalException("Unexpected extraneous bytes after map value");
        return list;
    } else if (type instanceof SetType) {
        SetType<?> ltype = (SetType<?>) type;
        ByteBuffer input = bb.duplicate();
        int size = CollectionSerializer.readCollectionSize(input, Server.VERSION_3);
        Set set = new HashSet(size);
        for (int i = 0; i < size; i++) {
            set.add(deserialize(ltype.getElementsType(),
                    CollectionSerializer.readValue(input, Server.VERSION_3), mapper));
        }
        if (input.hasRemaining())
            throw new MarshalException("Unexpected extraneous bytes after map value");
        return set;
    } else if (type instanceof MapType) {
        MapType<?, ?> ltype = (MapType<?, ?>) type;
        ByteBuffer input = bb.duplicate();
        int size = CollectionSerializer.readCollectionSize(input, Server.VERSION_3);
        Map map = new LinkedHashMap(size);
        for (int i = 0; i < size; i++) {
            ByteBuffer kbb = CollectionSerializer.readValue(input, Server.VERSION_3);
            ByteBuffer vbb = CollectionSerializer.readValue(input, Server.VERSION_3);
            String key = (String) ltype.getKeysType().compose(kbb);
            Mapper subMapper = null;
            if (mapper != null) {
                assert mapper instanceof ObjectMapper : "Expecting an object mapper for MapType";
                subMapper = ((ObjectMapper) mapper).getMapper(key);
            }
            map.put(key, deserialize(ltype.getValuesType(), vbb, subMapper));
        }
        if (input.hasRemaining())
            throw new MarshalException("Unexpected extraneous bytes after map value");
        return map;
    } else {
        Object value = type.compose(bb);
        if (mapper != null && mapper instanceof FieldMapper) {
            return ((FieldMapper) mapper).fieldType().valueForSearch(value);
        }
        return value;
    }
}

From source file:org.elasticsearch.cassandra.ElasticSecondaryIndex.java

License:Apache License

public static Object deserialize(AbstractType<?> type, ByteBuffer bb) {
    if (type instanceof UserType) {
        UserType utype = (UserType) type;
        Map<String, Object> mapValue = new HashMap<String, Object>();
        ByteBuffer[] components = utype.split(bb);
        for (int i = 0; i < components.length; i++) {
            String fieldName = UTF8Type.instance.compose(utype.fieldName(i));
            AbstractType<?> ctype = utype.type(i);
            Object value = (components[i] == null) ? null : deserialize(ctype, components[i]);
            mapValue.put(fieldName, value);
        }/*from  w w w  .  ja va2 s .  c  o  m*/
        return mapValue;
    } else if (type instanceof ListType) {
        ListType ltype = (ListType) type;
        ByteBuffer input = bb.duplicate();
        int size = CollectionSerializer.readCollectionSize(input, Server.VERSION_3);
        List list = new ArrayList(size);
        for (int i = 0; i < size; i++) {
            list.add(deserialize(ltype.getElementsType(),
                    CollectionSerializer.readValue(input, Server.VERSION_3)));
        }
        if (input.hasRemaining())
            throw new MarshalException("Unexpected extraneous bytes after map value");
        return list;
    } else if (type instanceof SetType) {
        SetType ltype = (SetType) type;
        ByteBuffer input = bb.duplicate();
        int size = CollectionSerializer.readCollectionSize(input, Server.VERSION_3);
        Set set = new HashSet(size);
        for (int i = 0; i < size; i++) {
            set.add(deserialize(ltype.getElementsType(),
                    CollectionSerializer.readValue(input, Server.VERSION_3)));
        }
        if (input.hasRemaining())
            throw new MarshalException("Unexpected extraneous bytes after map value");
        return set;
    } else if (type instanceof MapType) {
        MapType ltype = (MapType) type;
        ByteBuffer input = bb.duplicate();
        int size = CollectionSerializer.readCollectionSize(input, Server.VERSION_3);
        Map map = new LinkedHashMap(size);
        for (int i = 0; i < size; i++) {
            ByteBuffer kbb = CollectionSerializer.readValue(input, Server.VERSION_3);
            ByteBuffer vbb = CollectionSerializer.readValue(input, Server.VERSION_3);
            String key = (String) ltype.getKeysType().compose(kbb);
            map.put(key, deserialize(ltype.getValuesType(), vbb));
        }
        if (input.hasRemaining())
            throw new MarshalException("Unexpected extraneous bytes after map value");
        return map;
    } else {
        return type.compose(bb);
    }
}