Package org.cyclop.service.converter

Source Code of org.cyclop.service.converter.DataExtractor

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cyclop.service.converter;

import static org.cyclop.common.Gullectors.toImmutableList;
import static org.cyclop.common.Gullectors.toImmutableMap;

import java.util.Collection;
import java.util.Map;

import javax.inject.Named;
import javax.validation.constraints.NotNull;

import org.cyclop.model.CqlColumnValue;
import org.cyclop.model.CqlDataType;
import org.cyclop.model.CqlExtendedColumnName;
import org.cyclop.model.CqlPartitionKey;
import org.cyclop.model.CqlPartitionKeyValue;
import org.cyclop.validation.EnableValidation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.datastax.driver.core.DataType;
import com.datastax.driver.core.Row;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;

/** @author Maciej Miklas */
@Named
@EnableValidation
public class DataExtractor {
  private final static Logger LOG = LoggerFactory.getLogger(DataExtractor.class);

  public @NotNull ImmutableList<CqlColumnValue> extractCollection(@NotNull Row row,
      @NotNull CqlExtendedColumnName column) {
    String partLc = column.partLc;
    CqlDataType dataType = column.dataType;
    if (dataType.name != DataType.Name.SET && dataType.name != DataType.Name.LIST) {
      throw new IllegalArgumentException("Only Collection type is supported");
    }

    if (dataType.keyClass == null) {
      return ImmutableList.of();
    }

    Collection<?> objCont = dataType.name == DataType.Name.SET ? row.getSet(partLc, dataType.keyClass) : row
        .getList(partLc, dataType.keyClass);

    ImmutableList<CqlColumnValue> collection = objCont.stream()
        .map(o -> new CqlColumnValue(dataType.keyClass, o, column)).collect(toImmutableList());

    LOG.trace("Extracted collection: {}", collection);
    return collection;
  }

  public @NotNull ImmutableMap<CqlColumnValue, CqlColumnValue> extractMap(@NotNull Row row,
      @NotNull CqlExtendedColumnName column) {
    String partLc = column.partLc;
    CqlDataType dataType = column.dataType;
    if (dataType.name != DataType.Name.MAP) {
      throw new IllegalArgumentException("Only Map type is supported");
    }

    if (dataType.keyClass == null || dataType.valueClass == null) {
      return ImmutableMap.of();
    }

    Map<?, ?> unconverted = row.getMap(partLc, dataType.keyClass, dataType.valueClass);

   
    ImmutableMap<CqlColumnValue, CqlColumnValue> map = unconverted
        .entrySet()
        .stream()
        .collect(
            toImmutableMap(e -> new CqlColumnValue(dataType.keyClass, e.getKey(), column),
                e -> new CqlColumnValue(dataType.valueClass, e.getValue(), column)));

    LOG.trace("Extracted map: {}", map);
    return map;
  }

  public @NotNull CqlPartitionKeyValue extractPartitionKey(@NotNull Row row, @NotNull CqlPartitionKey partitionKey) {
    CqlColumnValue colSv = extractSingleValue(row, partitionKey);
    CqlPartitionKeyValue key = new CqlPartitionKeyValue(colSv.valueClass, colSv.value, partitionKey);
    LOG.trace("Extracted: {}", key);
    return key;
  }

  public @NotNull CqlColumnValue extractSingleValue(@NotNull Row row, @NotNull CqlExtendedColumnName column) {
    String partLc = column.partLc;
    CqlDataType dataType = column.dataType;
    if (dataType.isCollection()) {
      throw new IllegalArgumentException("Collection type is not supported");
    }

    Object extracted = null;
    if (dataType.isUUID()) {
      extracted = row.getUUID(partLc);

    } else if (dataType.isString()) {
      extracted = row.getString(partLc);

    } else if (dataType.isLong()) {
      extracted = row.getLong(partLc);

    } else if (dataType.name == DataType.cfloat().getName()) {
      extracted = row.getFloat(partLc);

    } else if (dataType.name == DataType.cint().getName()) {
      extracted = row.getInt(partLc);

    } else if (dataType.name == DataType.cboolean().getName()) {
      extracted = row.getBool(partLc);

    } else if (dataType.name == DataType.decimal().getName()) {
      extracted = row.getDecimal(partLc);

    } else if (dataType.name == DataType.cdouble().getName()) {
      extracted = row.getDouble(partLc);

    } else if (dataType.name == DataType.varint().getName()) {
      extracted = row.getVarint(partLc);

    } else if (dataType.name == DataType.timestamp().getName()) {
      extracted = row.getDate(partLc);

    } else if (dataType.name == DataType.inet().getName()) {
      extracted = row.getInet(partLc);
    } else {
      extracted = "?? " + column.part + " ??";
      LOG.warn("Type: " + dataType + " not supported by data converter");
    }

    if (extracted == null) {
      extracted = "";
    }

    Class<?> eClass = extracted.getClass();
    CqlColumnValue cqlColumnValue = new CqlColumnValue(eClass, extracted, column);

    LOG.debug("Extracted: {}", cqlColumnValue);
    return cqlColumnValue;
  }

}
TOP

Related Classes of org.cyclop.service.converter.DataExtractor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.