Package com.carmanconsulting.cassidy.pojo.assembly.mapper

Source Code of com.carmanconsulting.cassidy.pojo.assembly.mapper.AssemblyColumnMapper

/*
* Copyright (c) 2014 Carman Consulting, Inc.
*
* Licensed 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 com.carmanconsulting.cassidy.pojo.assembly.mapper;

import com.carmanconsulting.cassidy.pojo.assembly.AssemblyStack;
import com.carmanconsulting.cassidy.pojo.assembly.AssemblyStep;
import com.carmanconsulting.cassidy.pojo.assembly.DisassemblerService;
import com.carmanconsulting.cassidy.pojo.mapper.ColumnMapper;
import com.carmanconsulting.cassidy.util.CassidyUtils;
import com.carmanconsulting.cassidy.util.ClassResolver;
import com.carmanconsulting.cassidy.util.ColumnValueDefinition;
import me.prettyprint.cassandra.serializers.DynamicCompositeSerializer;
import me.prettyprint.hector.api.beans.DynamicComposite;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.ddl.ComparatorType;
import me.prettyprint.hector.api.factory.HFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

public class AssemblyColumnMapper<V> implements ColumnMapper<DynamicComposite, V> {
//----------------------------------------------------------------------------------------------------------------------
// Fields
//----------------------------------------------------------------------------------------------------------------------

    private static final Logger LOGGER = LoggerFactory.getLogger(AssemblyColumnMapper.class);

    private final DisassemblerService disassemblerService;
    private final ClassResolver classResolver;

//----------------------------------------------------------------------------------------------------------------------
// Constructors
//----------------------------------------------------------------------------------------------------------------------

    public AssemblyColumnMapper(DisassemblerService disassemblerService, ClassResolver classResolver) {
        this.disassemblerService = disassemblerService;
        this.classResolver = classResolver;
    }

//----------------------------------------------------------------------------------------------------------------------
// ColumnMapper Implementation
//----------------------------------------------------------------------------------------------------------------------

    @Override
    @SuppressWarnings("unchecked")
    public V fromColumns(List<HColumn<DynamicComposite, byte[]>> columns) {
        AssemblyStack stack = new AssemblyStack();
        for (HColumn<DynamicComposite, byte[]> column : columns) {
            Class<? extends AssemblyStep> stepType = (Class<? extends AssemblyStep>) classResolver.resolveClass((String) column.getName().get(1));
            AssemblyStep step = CassidyUtils.instantiate(stepType);
            step.initializeFromColumn(column.getValue(), classResolver);
            step.execute(stack);
        }
        return stack.pop();
    }

    @Override
    public ComparatorType getComparatorType() {
        return ComparatorType.DYNAMICCOMPOSITETYPE;
    }

    @Override
    public String getComparatorTypeAlias() {
        return DynamicComposite.DEFAULT_DYNAMIC_COMPOSITE_ALIASES;
    }

    @Override
    public List<HColumn<DynamicComposite, ?>> toColumns(V object) {
        List<AssemblyStep> steps = disassemblerService.disassemble(object);
        List<HColumn<DynamicComposite, ?>> columns = new ArrayList<>(steps.size());
        for (AssemblyStep step : steps) {
            final DynamicComposite name = new DynamicComposite(columns.size(), step.getClass().getName());
            ColumnValueDefinition<?> valueDefinition = step.toColumnDefinition();
            final HColumn<DynamicComposite, ?> column = createColumn(name, valueDefinition);
            LOGGER.debug("Adding column {} with value {}...", name, column.getValue());
            columns.add(column);
        }
        return columns;
    }

//----------------------------------------------------------------------------------------------------------------------
// Other Methods
//----------------------------------------------------------------------------------------------------------------------

    private <T> HColumn<DynamicComposite, T> createColumn(DynamicComposite name, ColumnValueDefinition<T> valueDefinition) {
        return HFactory.createColumn(name, valueDefinition.getValue(), DynamicCompositeSerializer.get(), valueDefinition.getSerializer());
    }
}
TOP

Related Classes of com.carmanconsulting.cassidy.pojo.assembly.mapper.AssemblyColumnMapper

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.