Package info.archinnov.achilles.internal.table

Source Code of info.archinnov.achilles.internal.table.SchemaReader$KeyspaceAndTable

package info.archinnov.achilles.internal.table;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.KeyspaceMetadata;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.TableMetadata;
import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
import info.archinnov.achilles.internal.metadata.holder.EntityMeta;
import info.archinnov.achilles.internal.validation.Validator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SchemaReader {

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

    private static final Function<EntityMeta, KeyspaceAndTable> EXTRACT_KEYSPACE_AND_TABLE = new Function<EntityMeta, KeyspaceAndTable>() {
        @Override
        public KeyspaceAndTable apply(EntityMeta meta) {
            return new KeyspaceAndTable(meta.config().getKeyspaceName(),
                    meta.config().getTableName(),
                    meta.config().getQualifiedTableName());
        }
    };

    public Map<String, TableMetadata> fetchTableMetaData(Cluster cluster, Collection<EntityMeta> entityMetas) {

        log.debug("Fetch existing table meta data from Cassandra");
        final Metadata clusterMetadata = cluster.getMetadata();
        final List<KeyspaceAndTable> keyspaceAndTables = FluentIterable.from(entityMetas).transform(EXTRACT_KEYSPACE_AND_TABLE).toList();

        Map<String, TableMetadata> tableMetas = new HashMap<>();

        for (KeyspaceAndTable keyspaceAndTable : keyspaceAndTables) {
            final KeyspaceMetadata keyspaceMetadata = clusterMetadata.getKeyspace(keyspaceAndTable.keyspaceName);
            Validator.validateTableTrue(keyspaceMetadata != null, "Keyspace '%s' doest not exist or cannot be found", keyspaceAndTable.keyspaceName);

            final TableMetadata tableMetadata = keyspaceMetadata.getTable(keyspaceAndTable.tableName);
            if (tableMetadata != null) {
                tableMetas.put(keyspaceAndTable.qualifiedTableName, tableMetadata);
            }
        }
        return tableMetas;
    }

    private static class KeyspaceAndTable {
        String keyspaceName;
        String tableName;
        String qualifiedTableName;

        private KeyspaceAndTable(String keyspaceName, String tableName, String qualifiedTableName) {
            this.keyspaceName = keyspaceName;
            this.tableName = tableName;
            this.qualifiedTableName = qualifiedTableName;
        }
    }

    public static enum Singleton {
        INSTANCE;

        private final SchemaReader instance = new SchemaReader();

        public SchemaReader get() {
            return instance;
        }
    }
}
TOP

Related Classes of info.archinnov.achilles.internal.table.SchemaReader$KeyspaceAndTable

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.