Package org.springframework.data.cassandra.core

Source Code of org.springframework.data.cassandra.core.CassandraAdminTemplate

/*
* Copyright 2013-2014 the original author or authors
*
* 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 org.springframework.data.cassandra.core;

import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cassandra.core.SessionCallback;
import org.springframework.cassandra.core.cql.CqlIdentifier;
import org.springframework.cassandra.core.cql.generator.CreateTableCqlGenerator;
import org.springframework.cassandra.core.keyspace.DropTableSpecification;
import org.springframework.dao.DataAccessException;
import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.mapping.CassandraPersistentEntity;
import org.springframework.data.cassandra.util.CqlUtils;
import org.springframework.util.Assert;

import com.datastax.driver.core.Session;
import com.datastax.driver.core.TableMetadata;

/**
* Default implementation of {@link CassandraAdminOperations}.
*/
public class CassandraAdminTemplate extends CassandraTemplate implements CassandraAdminOperations {

  private static final Logger log = LoggerFactory.getLogger(CassandraAdminTemplate.class);

  /**
   * Constructor used for a basic template configuration
   *
   * @param session must not be {@literal null}.
   * @param converter must not be {@literal null}.
   */
  public CassandraAdminTemplate(Session session, CassandraConverter converter) {
    super(session, converter);
  }

  @Override
  public void createTable(final boolean ifNotExists, final CqlIdentifier tableName, Class<?> entityClass,
      Map<String, Object> optionsByName) {

    final CassandraPersistentEntity<?> entity = getCassandraMappingContext().getPersistentEntity(entityClass);

    execute(new SessionCallback<Object>() {
      @Override
      public Object doInSession(Session s) throws DataAccessException {

        String cql = new CreateTableCqlGenerator(getCassandraMappingContext().
            getCreateTableSpecificationFor(entity).ifNotExists(ifNotExists)).toCql();

        log.debug(cql);

        s.execute(cql);
        return null;
      }
    });
  }

  @Override
  public void alterTable(CqlIdentifier tableName, Class<?> entityClass, boolean dropRemovedAttributeColumns) {
    throw new UnsupportedOperationException("not yet implemented");
  }

  @Override
  public void replaceTable(CqlIdentifier tableName, Class<?> entityClass, Map<String, Object> optionsByName) {

    dropTable(tableName);
    createTable(false, tableName, entityClass, optionsByName);
  }

  /**
   * Create a list of query operations to alter the table for the given entity
   *
   * @param entityClass
   * @param tableName
   */
  protected void doAlterTable(Class<?> entityClass, String keyspace, CqlIdentifier tableName) {

    CassandraPersistentEntity<?> entity = getCassandraMappingContext().getPersistentEntity(entityClass);

    Assert.notNull(entity);

    final TableMetadata tableMetadata = getTableMetadata(keyspace, tableName);
    final List<String> queryList = CqlUtils.alterTable(tableName.toCql(), entity, tableMetadata);

    execute(new SessionCallback<Object>() {

      @Override
      public Object doInSession(Session s) throws DataAccessException {

        for (String q : queryList) {
          log.info(q);
          s.execute(q);
        }

        return null;
      }
    });
  }

  public void dropTable(Class<?> entityClass) {
    dropTable(determineTableName(entityClass));
  }

  @Override
  public void dropTable(CqlIdentifier tableName) {

    log.info("Dropping table => " + tableName);

    execute(DropTableSpecification.dropTable(tableName));
  }

  @Override
  public TableMetadata getTableMetadata(final String keyspace, final CqlIdentifier tableName) {

    Assert.notNull(tableName);

    return execute(new SessionCallback<TableMetadata>() {
      @Override
      public TableMetadata doInSession(Session s) {
        return s.getCluster().getMetadata().getKeyspace(keyspace).getTable(tableName.toCql());
      }
    });
  }
}
TOP

Related Classes of org.springframework.data.cassandra.core.CassandraAdminTemplate

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.