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

software.tnb.db.cassandra.service.Cassandra Maven / Gradle / Ivy

package software.tnb.db.cassandra.service;

import software.tnb.common.account.AccountFactory;
import software.tnb.common.deployment.WithDockerImage;
import software.tnb.common.service.Service;
import software.tnb.db.cassandra.account.CassandraAccount;
import software.tnb.db.cassandra.validation.CassandraValidation;

import com.datastax.oss.driver.api.core.CqlSession;

import java.util.Map;

public abstract class Cassandra implements Service, WithDockerImage {

    public static final int CASSANDRA_PORT = 9042;

    private CassandraValidation validation;
    private CassandraAccount account;

    public String defaultImage() {
        // official library image required hacks in openshift, bitnami works out of the box
        return "docker.io/bitnami/cassandra:4.0";
    }

    public CassandraValidation validation() {
        if (validation == null) {
            validation = new CassandraValidation(session());
        }
        return validation;
    }

    protected abstract CqlSession session();

    public abstract int port();

    public abstract String host();

    public String cassandraUrl(String keyspace) {
        return String.format("cql:%s:%s/%s?username=%s&password=%s", host(), port(), keyspace, account().username(), account().password());
    }

    public Map containerEnvironment() {
        return Map.of(
            "CASSANDRA_USER", account().username(),
            "CASSANDRA_PASSWORD", account().password(),
            "CASSANDRA_PASSWORD_SEEDER", "yes"
        );
    }

    public CassandraAccount account() {
        if (account == null) {
            account = AccountFactory.create(CassandraAccount.class);
        }
        return account;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy