All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.archinnov.achilles.entity.operations.CQLSliceQueryExecutor Maven / Gradle / Ivy

/**
 *
 * Copyright (C) 2012-2013 DuyHai DOAN
 *
 * 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 info.archinnov.achilles.entity.operations;

import info.archinnov.achilles.context.CQLDaoContext;
import info.archinnov.achilles.context.CQLPersistenceContext;
import info.archinnov.achilles.context.CQLPersistenceContextFactory;
import info.archinnov.achilles.context.ConfigurationContext;
import info.archinnov.achilles.entity.CQLEntityMapper;
import info.archinnov.achilles.entity.metadata.EntityMeta;
import info.archinnov.achilles.iterator.CQLSliceQueryIterator;
import info.archinnov.achilles.query.SliceQuery;
import info.archinnov.achilles.query.slice.CQLSliceQuery;
import info.archinnov.achilles.statement.CQLStatementGenerator;
import info.archinnov.achilles.type.ConsistencyLevel;

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

import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.Query;
import com.datastax.driver.core.Row;
import com.google.common.collect.Lists;

public class CQLSliceQueryExecutor extends SliceQueryExecutor {

	private CQLStatementGenerator generator = new CQLStatementGenerator();
	private CQLEntityMapper mapper = new CQLEntityMapper();
	private CQLDaoContext daoContext;
	private CQLPersistenceContextFactory contextFactory;

	public CQLSliceQueryExecutor(CQLPersistenceContextFactory contextFactory, ConfigurationContext configContext,
			CQLDaoContext daoContext) {
		super(new CQLEntityProxifier());
		this.contextFactory = contextFactory;
		this.daoContext = daoContext;
		defaultReadLevel = configContext.getConsistencyPolicy().getDefaultGlobalReadConsistencyLevel();
	}

	@Override
	public  List get(SliceQuery sliceQuery) {

		EntityMeta meta = sliceQuery.getMeta();

		List clusteredEntities = new ArrayList();

		CQLSliceQuery cqlSliceQuery = new CQLSliceQuery(sliceQuery, defaultReadLevel);
		Query query = generator.generateSelectSliceQuery(cqlSliceQuery, cqlSliceQuery.getLimit());
		List rows = daoContext.execute(query).all();

		for (Row row : rows) {
			T clusteredEntity = meta. instanciate();
			mapper.setEagerPropertiesToEntity(row, meta, clusteredEntity);
			clusteredEntities.add(clusteredEntity);
		}

		return Lists.transform(clusteredEntities, getProxyTransformer(sliceQuery, meta.getEagerGetters()));
	}

	@Override
	public  Iterator iterator(SliceQuery sliceQuery) {

		CQLSliceQuery cqlSliceQuery = new CQLSliceQuery(sliceQuery, defaultReadLevel);
		Query query = generator.generateSelectSliceQuery(cqlSliceQuery, cqlSliceQuery.getBatchSize());
		Iterator iterator = daoContext.execute(query).iterator();
		PreparedStatement ps = generator.generateIteratorSliceQuery(cqlSliceQuery, daoContext);
		CQLPersistenceContext context = buildContextForQuery(sliceQuery);
		return new CQLSliceQueryIterator(cqlSliceQuery, context, iterator, ps);
	}

	@Override
	public  void remove(SliceQuery sliceQuery) {
		CQLSliceQuery cqlSliceQuery = new CQLSliceQuery(sliceQuery, defaultReadLevel);
		cqlSliceQuery.validateSliceQueryForRemove();
		Query query = generator.generateRemoveSliceQuery(cqlSliceQuery);
		daoContext.execute(query);
	}

	@Override
	protected  CQLPersistenceContext buildContextForQuery(SliceQuery sliceQuery) {

		ConsistencyLevel cl = sliceQuery.getConsistencyLevel() == null ? defaultReadLevel : sliceQuery
				.getConsistencyLevel();
		return contextFactory.newContextForSliceQuery(sliceQuery.getEntityClass(), sliceQuery.getPartitionComponents(),
				cl);
	}

	@Override
	protected  CQLPersistenceContext buildNewContext(SliceQuery sliceQuery, T clusteredEntity) {
		return contextFactory.newContext(clusteredEntity);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy