Example usage for org.apache.cassandra.db.marshal AbstractType isCollection

List of usage examples for org.apache.cassandra.db.marshal AbstractType isCollection

Introduction

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

Prototype

public boolean isCollection() 

Source Link

Usage

From source file:com.impetus.client.cassandra.CassandraClientBase.java

License:Apache License

/**
 * Compose column value.//from w w w  .  j  a  v  a 2  s.  c o m
 * 
 * @param cqlMetadata
 *            the cql metadata
 * @param thriftColumnValue
 *            the thrift column value
 * @param thriftColumnName
 *            the thrift column name
 * @return the object
 */
private Object composeColumnValue(CqlMetadata cqlMetadata, byte[] thriftColumnValue, byte[] thriftColumnName) {
    Map<ByteBuffer, String> schemaTypes = cqlMetadata.getValue_types();
    AbstractType<?> type = null;
    try {
        type = TypeParser.parse(schemaTypes.get(ByteBuffer.wrap(thriftColumnName)));
    } catch (SyntaxException | ConfigurationException ex) {
        log.error(ex.getMessage());
        throw new KunderaException("Error while deserializing column value " + ex);
    }
    if (type.isCollection()) {
        return ((CollectionSerializer) type.getSerializer())
                .deserializeForNativeProtocol(ByteBuffer.wrap(thriftColumnValue), 2);
    }
    return type.compose(ByteBuffer.wrap(thriftColumnValue));
}

From source file:com.stratio.cassandra.index.RegularCellsMapper.java

License:Apache License

@SuppressWarnings("rawtypes")
public Columns columns(Row row) {
    ColumnFamily columnFamily = row.cf;/*from w  w w  .j  a  v  a2  s  .  c om*/
    Columns columns = new Columns();

    // Get row's columns iterator skipping clustering column
    Iterator<Cell> cellIterator = columnFamily.iterator();
    cellIterator.next();

    // Stuff for grouping collection columns (sets, lists and maps)
    String name;
    CollectionType collectionType;

    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();
        CellName cellName = cell.name();
        ColumnDefinition columnDefinition = metadata.getColumnDefinition(cellName);
        if (columnDefinition == null) {
            continue;
        }

        AbstractType<?> valueType = columnDefinition.type;

        ByteBuffer cellValue = cell.value();

        name = cellName.cql3ColumnName(metadata).toString();

        if (valueType.isCollection()) {
            collectionType = (CollectionType<?>) valueType;
            switch (collectionType.kind) {
            case SET: {
                AbstractType<?> type = collectionType.nameComparator();
                ByteBuffer value = cellName.collectionElement();
                columns.add(new Column(name, value, type));
                break;
            }
            case LIST: {
                AbstractType<?> type = collectionType.valueComparator();
                columns.add(new Column(name, cellValue, type));
                break;
            }
            case MAP: {
                AbstractType<?> type = collectionType.valueComparator();
                ByteBuffer keyValue = cellName.collectionElement();
                AbstractType<?> keyType = collectionType.nameComparator();
                String nameSufix = keyType.compose(keyValue).toString();
                columns.add(new Column(name, nameSufix, cellValue, type));
                break;
            }
            }
        } else {
            columns.add(new Column(name, cellValue, valueType));
        }
    }

    return columns;
}

From source file:com.stratio.cassandra.index.schema.ColumnMapper.java

License:Apache License

/**
 * Returns {@code true} if the specified Cassandra type/marshaller is supported, {@code false} otherwise.
 *
 * @param type A Cassandra type/marshaller.
 * @return {@code true} if the specified Cassandra type/marshaller is supported, {@code false} otherwise.
 *//*w  ww.  ja  v a2s.  c  o  m*/
public boolean supports(final AbstractType<?> type) {
    AbstractType<?> checkedType = type;
    if (type.isCollection()) {
        if (type instanceof MapType<?, ?>) {
            checkedType = ((MapType<?, ?>) type).values;
        } else if (type instanceof ListType<?>) {
            checkedType = ((ListType<?>) type).elements;
        } else if (type instanceof SetType) {
            checkedType = ((SetType<?>) type).elements;
        }
    }

    for (AbstractType<?> n : supportedTypes) {
        if (checkedType.getClass() == n.getClass()) {
            return true;
        }
    }
    return false;
}

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

License:Apache License

private void addColumns(Columns columns, Cell cell) {
    if (cell != null) {
        ColumnDefinition columnDefinition = cell.column();
        String name = columnDefinition.name.toString();
        AbstractType<?> type = cell.column().type;
        ByteBuffer value = cell.value();
        ColumnBuilder builder = Column.builder(name);
        if (type.isCollection() && !type.isFrozenCollection()) {
            CollectionType<?> collectionType = (CollectionType<?>) type;
            switch (collectionType.kind) {
            case SET: {
                type = collectionType.nameComparator();
                value = cell.path().get(0);
                addColumns(columns, builder, type, value);
                break;
            }//w w w.ja  v  a2 s .c  o m
            case LIST: {
                type = collectionType.valueComparator();
                addColumns(columns, builder, type, value);
                break;
            }
            case MAP: {
                type = collectionType.valueComparator();
                ByteBuffer keyValue = cell.path().get(0);
                AbstractType<?> keyType = collectionType.nameComparator();
                String nameSuffix = keyType.compose(keyValue).toString();
                addColumns(columns, builder.withMapName(nameSuffix), type, value);
                break;
            }
            default: {
                throw new IndexException("Unknown collection type %s", collectionType.kind);
            }
            }
        } else {
            addColumns(columns, Column.builder(name), type, value);
        }
    }
}

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);
            }/*from   ww w.  j a va2s  . c om*/
            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:com.stratio.cassandra.lucene.schema.mapping.Mapper.java

License:Apache License

/**
 * Returns {@code true} if the specified Cassandra type/marshaller is supported, {@code false} otherwise.
 *
 * @param type A Cassandra type/marshaller.
 * @return {@code true} if the specified Cassandra type/marshaller is supported, {@code false} otherwise.
 *///from   w  w w .  ja  va2 s.  c  o m
protected boolean supports(final AbstractType<?> type) {
    AbstractType<?> checkedType = type;
    if (type.isCollection()) {
        if (type instanceof MapType<?, ?>) {
            checkedType = ((MapType<?, ?>) type).getValuesType();
        } else if (type instanceof ListType<?>) {
            checkedType = ((ListType<?>) type).getElementsType();
        } else if (type instanceof SetType) {
            checkedType = ((SetType<?>) type).getElementsType();
        }
    }

    if (type instanceof ReversedType) {
        ReversedType reversedType = (ReversedType) type;
        checkedType = reversedType.baseType;
    }

    for (AbstractType<?> n : supportedTypes) {
        if (checkedType.getClass() == n.getClass()) {
            return true;
        }
    }
    return false;
}

From source file:com.stratio.cassandra.lucene.service.RegularCellsMapper.java

License:Apache License

/**
 * Returns the columns contained in the regular cells specified {@link Row}. Note that not all the contained columns
 * are returned, but only the regular cell ones.
 *
 * @param row A {@link Row}.//from w w  w . jav a2 s.  c o  m
 * @return The columns contained in the regular cells specified {@link Row}.
 */
@SuppressWarnings("rawtypes")
public Columns columns(Row row) {

    ColumnFamily columnFamily = row.cf;
    Columns columns = new Columns();

    // Stuff for grouping collection columns (sets, lists and maps)
    String name;
    CollectionType collectionType;

    for (Cell cell : columnFamily) {
        CellName cellName = cell.name();
        ColumnDefinition columnDefinition = metadata.getColumnDefinition(cellName);
        if (columnDefinition == null) {
            continue;
        }

        AbstractType<?> valueType = columnDefinition.type;

        ByteBuffer cellValue = cell.value();

        name = cellName.cql3ColumnName(metadata).toString();

        if (valueType.isCollection()) {
            collectionType = (CollectionType<?>) valueType;
            switch (collectionType.kind) {
            case SET: {
                AbstractType<?> type = collectionType.nameComparator();
                ByteBuffer value = cellName.collectionElement();
                columns.add(Column.fromDecomposed(name, value, type, true));
                break;
            }
            case LIST: {
                AbstractType<?> type = collectionType.valueComparator();
                columns.add(Column.fromDecomposed(name, cellValue, type, true));
                break;
            }
            case MAP: {
                AbstractType<?> type = collectionType.valueComparator();
                ByteBuffer keyValue = cellName.collectionElement();
                AbstractType<?> keyType = collectionType.nameComparator();
                String nameSufix = keyType.compose(keyValue).toString();
                columns.add(Column.fromDecomposed(name, nameSufix, cellValue, type, true));
                break;
            }
            }
        } else {
            columns.add(Column.fromDecomposed(name, cellValue, valueType, false));
        }
    }

    return columns;
}

From source file:com.tuplejump.stargate.cassandra.CassandraUtils.java

License:Apache License

private static void addFieldType(String columnName, AbstractType validator, Properties properties,
        Map<String, NumericConfig> numericFieldOptions, Map<String, FieldType> fieldDocValueTypes,
        Map<String, FieldType> collectionFieldDocValueTypes, Map<String, FieldType> fieldTypes,
        Map<String, FieldType[]> collectionFieldTypes) {

    if (validator.isCollection()) {
        if (validator instanceof MapType) {
            properties.setType(Properties.Type.map);
            MapType mapType = (MapType) validator;
            AbstractType keyValidator = mapType.keys;
            AbstractType valueValidator = mapType.values;
            Properties keyProps = properties.getFields().get("_key");
            Properties valueProps = properties.getFields().get("_value");
            if (keyProps == null) {
                keyProps = new Properties();
                keyProps.setAnalyzer(properties.getAnalyzer());
                properties.getFields().put("_key", keyProps);
            }/* w w  w. j a  va  2  s .c  o m*/
            if (valueProps == null) {
                valueProps = new Properties();
                valueProps.setAnalyzer(properties.getAnalyzer());
                properties.getFields().put("_value", valueProps);
            }
            setFromAbstractType(keyProps, keyValidator);
            setFromAbstractType(valueProps, valueValidator);
            FieldType keyFieldType = fieldType(keyProps, keyValidator);
            FieldType valueFieldType = fieldType(valueProps, valueValidator);

            if (valueProps.getStriped() == Properties.Striped.only
                    || valueProps.getStriped() == Properties.Striped.also) {
                FieldType docValueType = LuceneUtils.docValueTypeFrom(valueFieldType);
                collectionFieldDocValueTypes.put(columnName, docValueType);
            }
            if (!(valueProps.getStriped() == Properties.Striped.only))
                collectionFieldTypes.put(columnName, new FieldType[] { keyFieldType, valueFieldType });

        } else if (validator instanceof ListType || validator instanceof SetType) {
            AbstractType elementValidator;
            if (validator instanceof SetType) {
                SetType setType = (SetType) validator;
                elementValidator = setType.elements;
            } else {
                ListType listType = (ListType) validator;
                elementValidator = listType.elements;
            }
            setFromAbstractType(properties, elementValidator);

            FieldType elementFieldType = fieldType(properties, elementValidator);
            if (properties.getStriped() == Properties.Striped.only
                    || properties.getStriped() == Properties.Striped.also) {
                FieldType docValueType = LuceneUtils.docValueTypeFrom(elementFieldType);
                collectionFieldDocValueTypes.put(columnName, docValueType);
            }
            if (!(properties.getStriped() == Properties.Striped.only))
                collectionFieldTypes.put(columnName, new FieldType[] { elementFieldType });
        }

    } else {
        setFromAbstractType(properties, validator);
        FieldType fieldType = fieldType(properties, validator);
        if (fieldType.numericType() != null) {
            numericFieldOptions.put(columnName, LuceneUtils.numericConfig(fieldType));
        }
        if (properties.getStriped() == Properties.Striped.only
                || properties.getStriped() == Properties.Striped.also) {
            FieldType docValueType = LuceneUtils.docValueTypeFrom(fieldType);
            fieldDocValueTypes.put(columnName, docValueType);
        }
        if (properties.getStriped() != Properties.Striped.only)
            fieldTypes.put(columnName, fieldType);
    }
}

From source file:com.tuplejump.stargate.cassandra.TableMapper.java

License:Apache License

public void load(Map<String, Integer> positions, Tuple tuple, Row row) {
    ColumnFamily cf = row.cf;/* ww w  .  j  a  v  a 2s  . c  o m*/
    ByteBuffer rowKey = row.key.getKey();

    Collection<Cell> cols = cf.getSortedColumns();
    boolean keyColumnsAdded = false;
    for (Cell column : cols) {
        if (!keyColumnsAdded) {
            addKeyColumns(positions, tuple, rowKey);
            keyColumnsAdded = true;
        }
        String actualColumnName = column.name().cql3ColumnName(table.metadata).toString();
        ByteBuffer colValue = column.value();
        AbstractType<?> valueValidator = table.metadata.getValueValidator(column.name());
        if (valueValidator.isCollection()) {
            CollectionType validator = (CollectionType) valueValidator;
            AbstractType keyType = validator.nameComparator();
            AbstractType valueType = validator.valueComparator();
            ByteBuffer keyBuf = column.name().collectionElement();
            if (valueValidator instanceof MapType) {
                actualColumnName = actualColumnName + "." + keyType.compose(keyBuf);
                valueValidator = valueType;
            } else if (valueValidator instanceof SetType) {
                colValue = keyBuf;
                valueValidator = keyType;
            } else {
                valueValidator = valueType;
            }
        }
        for (String field : positions.keySet()) {
            if (actualColumnName.equalsIgnoreCase(field)) {
                tuple.getTuple()[positions.get(field)] = valueValidator.compose(colValue);
            }
        }
    }
}

From source file:com.tuplejump.stargate.Fields.java

License:Apache License

public static ByteBuffer defaultValue(AbstractType type, boolean min) {
    CQL3Type cqlType = type.asCQL3Type();
    if (cqlType == CQL3Type.Native.INT || cqlType == CQL3Type.Native.VARINT) {
        return ByteBufferUtil.bytes(min ? Integer.MIN_VALUE : Integer.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.BIGINT) {
        return ByteBufferUtil.bytes(min ? Long.MIN_VALUE : Long.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.DECIMAL || cqlType == CQL3Type.Native.DOUBLE) {
        return ByteBufferUtil.bytes(min ? Double.MIN_VALUE : Double.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.FLOAT) {
        return ByteBufferUtil.bytes(min ? Float.MIN_VALUE : Float.MAX_VALUE);
    } else if (cqlType == CQL3Type.Native.TEXT || cqlType == CQL3Type.Native.VARCHAR) {
        return ByteBufferUtil.bytes("");
    } else if (cqlType == CQL3Type.Native.UUID) {
        return ByteBufferUtil.bytes(UUID.randomUUID());
    } else if (cqlType == CQL3Type.Native.TIMEUUID) {
        return ByteBufferUtil.bytes(UUIDGen.getTimeUUID(0));
    } else if (cqlType == CQL3Type.Native.TIMESTAMP) {
        return ByteBufferUtil.bytes(0l);
    } else if (cqlType == CQL3Type.Native.BOOLEAN) {
        return BooleanType.instance.decompose(min ? false : true);
    } else if (type.isCollection()) {
        CollectionType collectionType = (CollectionType) type;
        List<Pair<ByteBuffer, Column>> collection = new ArrayList<>();
        ByteBuffer dummyColumn = defaultValue(collectionType.nameComparator());
        collection.add(Pair.create(dummyColumn,
                new Column(dummyColumn, defaultValue(collectionType.valueComparator(), min))));
        return collectionType.serialize(collection);
    } else {/*from   w ww  . j av a  2 s .co  m*/
        return ByteBufferUtil.EMPTY_BYTE_BUFFER;
    }
}