package org.ovirt.engine.core.dao.gluster;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer;
import org.ovirt.engine.core.common.businessentities.gluster.PeerStatus;
import org.ovirt.engine.core.common.utils.EnumUtils;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DefaultGenericDao;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class GlusterServerDaoImpl extends DefaultGenericDao<GlusterServer, Guid> implements GlusterServerDao {
private static final RowMapper<GlusterServer> glusterServerRowMapper = (rs, rowNum) -> {
GlusterServer glusterServer = new GlusterServer();
glusterServer.setId(getGuidDefaultEmpty(rs, "server_id"));
glusterServer.setGlusterServerUuid(getGuidDefaultEmpty(rs, "gluster_server_uuid"));
glusterServer.setPeerStatus(PeerStatus.valueOf(rs.getString("peer_status")));
String knownAddresses = rs.getString("known_addresses");
if (StringUtils.isNotBlank(knownAddresses)) {
String[] knownAddressArray = knownAddresses.split(",");
glusterServer.setKnownAddresses(new ArrayList<>(Arrays.asList(knownAddressArray)));
}
return glusterServer;
};
public GlusterServerDaoImpl() {
super("GlusterServer");
setProcedureNameForGet("GetGlusterServerByServerId");
}
@Override
public GlusterServer getByServerId(Guid id) {
return getCallsHandler().executeRead("GetGlusterServerByServerId",
glusterServerRowMapper,
createIdParameterMapper(id));
}
@Override
public GlusterServer getByGlusterServerUuid(Guid glusterServerUuid) {
return getCallsHandler().executeRead("GetGlusterServerByGlusterServerUUID",
glusterServerRowMapper,
getCustomMapSqlParameterSource().addValue("gluster_server_uuid", glusterServerUuid));
}
@Override
public void removeByGlusterServerUuid(Guid glusterServerUuid) {
getCallsHandler().executeModification("DeleteGlusterServerByGlusterServerUUID",
getCustomMapSqlParameterSource().addValue("gluster_server_uuid", glusterServerUuid));
}
@Override
protected MapSqlParameterSource createFullParametersMapper(GlusterServer entity) {
return createIdParameterMapper(entity.getId())
.addValue("gluster_server_uuid", entity.getGlusterServerUuid())
.addValue("peer_status", EnumUtils.nameOrNull(entity.getPeerStatus()));
}
@Override
protected MapSqlParameterSource createIdParameterMapper(Guid id) {
return getCustomMapSqlParameterSource().addValue("server_id", id);
}
@Override
protected RowMapper<GlusterServer> createEntityRowMapper() {
return glusterServerRowMapper;
}
@Override
public void addKnownAddress(Guid serverId, String address) {
getCallsHandler().executeModification("AddGlusterServerKnownAddress",
getCustomMapSqlParameterSource().addValue("server_id", serverId)
.addValue("known_address", address));
}
@Override
public void updateKnownAddresses(Guid serverId, List<String> addresses) {
getCallsHandler().executeModification("UpdateGlusterServerKnownAddresses",
getCustomMapSqlParameterSource().addValue("server_id", serverId)
.addValue("known_addresses", StringUtils.join(addresses, ",")));
}
@Override
public void updatePeerStatus(Guid serverId, PeerStatus peerStatus) {
getCallsHandler().executeModification("UpdateGlusterServerPeerStatus",
getCustomMapSqlParameterSource().addValue("server_id", serverId)
.addValue("peer_status", EnumUtils.nameOrNull(peerStatus)));
}
}