tomekkup.helenos.dao.ClusterConfigDao.java Source code

Java tutorial

Introduction

Here is the source code for tomekkup.helenos.dao.ClusterConfigDao.java

Source

package tomekkup.helenos.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import tomekkup.helenos.ClusterConfiguration;

/**
 * ********************************************************
 * Copyright: 2012 Tomek Kuprowski
 *
 * License: GPLv2: http://www.gnu.org/licences/gpl.html
 *
 * @author Tomek Kuprowski (tomekkuprowski at gmail dot com)
 * *******************************************************
 */
@Component("clusterConfigDao")
public class ClusterConfigDao extends AbstractDao implements InitializingBean {
    private static final String HASTEXT_ERROR_MSG = "%s must be set in default.properties file";

    private @Value("${default.host}") String defaultHost;
    private @Value("${default.cluster.name}") String defaultClusterName;

    public void setDefaultClusterName(String defaultClusterName) {
        this.defaultClusterName = defaultClusterName;
    }

    public void setDefaultHost(String defaultHost) {
        this.defaultHost = defaultHost;
    }

    public ClusterConfiguration get(String alias) {
        return jdbcTemplate.queryForObject(queriesProperties.getProperty("clusterconfig.get.by.alias"),
                new MapSqlParameterSource("alias", alias), new ClusterConfigurationMapper());
    }

    public ClusterConfiguration getActive() {
        List<ClusterConfiguration> configuration = jdbcTemplate.query(
                queriesProperties.getProperty("clusterconfig.select.star.wa"),
                new MapSqlParameterSource("active", true), new ClusterConfigurationMapper());

        //tutaj zrobic inaczej
        //jesli defaultConn nie jest pusty to dodaj config nadpisujac
        if (CollectionUtils.isEmpty(configuration)) {
            this.createDefaultConfiguration();
            return this.getActive();
        }

        return configuration.get(0);
    }

    public List<ClusterConfiguration> loadAll() {
        return jdbcTemplate.query(queriesProperties.getProperty("clusterconfig.select.star"),
                new MapSqlParameterSource(), new ClusterConfigurationMapper());
    }

    public long getConnectionsCount() {
        return jdbcTemplate.queryForLong(queriesProperties.getProperty("clusterconfig.count"),
                new HashMap<String, Object>());
    }

    private void createDefaultConfiguration() {
        jdbcTemplate.update(queriesProperties.getProperty("clusterconfig.insert"),
                prepareParameterSource(new ClusterConfiguration("default", defaultHost, defaultClusterName, true)));
    }

    private SqlParameterSource prepareParameterSource(ClusterConfiguration configuration) {
        return new MapSqlParameterSource(configuration.toParametersMap());
    }

    public void store(ClusterConfiguration configuration) {
        if (configuration.isActive()) {
            jdbcTemplate.update(queriesProperties.getProperty("clusterconfig.update.all.active.false"),
                    new MapSqlParameterSource());
        }
        jdbcTemplate.update(queriesProperties.getProperty("clusterconfig.merge"),
                prepareParameterSource(configuration));
    }

    public void delete(String alias) {
        jdbcTemplate.update(queriesProperties.getProperty("clusterconfig.delete"),
                new MapSqlParameterSource("alias", alias));
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.hasText(defaultHost, String.format(HASTEXT_ERROR_MSG, "default.host"));
        Assert.hasText(defaultClusterName, String.format(HASTEXT_ERROR_MSG, "default.cluster.name"));
    }

    private static final class ClusterConfigurationMapper implements RowMapper<ClusterConfiguration> {

        @Override
        public ClusterConfiguration mapRow(ResultSet rs, int rowNum) throws SQLException {
            ClusterConfiguration cc = new ClusterConfiguration();
            cc.setAlias(rs.getString("ALIAS"));
            cc.setHosts(rs.getString("HOSTS"));
            cc.setClusterName(rs.getString("CLUSTERNAME"));
            cc.setActive(rs.getBoolean("ACTIVE"));
            return cc;
        }
    }
}