package org.ovirt.engine.core.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.NotImplementedException;
import org.hibernate.annotations.common.util.StringHelper;
import org.ovirt.engine.core.common.businessentities.VDSType;
import org.ovirt.engine.core.common.businessentities.VdsStatic;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils;
import org.ovirt.engine.core.engineencryptutils.EncryptionUtils;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
/**
* <code>VdsDAODbFacadeImpl</code> provides an implementation of {@link VdsDAO} that uses previously written code from
* {@code DbFacade}.
*
*
*/
public class VdsStaticDAODbFacadeImpl extends BaseDAODbFacade implements VdsStaticDAO {
@Override
public VdsStatic get(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vds_id", id);
ParameterizedRowMapper<VdsStatic> mapper = new ParameterizedRowMapper<VdsStatic>() {
@Override
public VdsStatic mapRow(ResultSet rs, int rowNum)
throws SQLException {
VdsStatic entity = new VdsStatic();
entity.sethost_name(rs.getString("host_name"));
entity.setManagmentIp(rs.getString("ip"));
entity.setUniqueID(rs.getString("vds_unique_id"));
entity.setport(rs.getInt("port"));
entity.setvds_group_id(Guid.createGuidFromString(rs
.getString("vds_group_id")));
entity.setId(Guid.createGuidFromString(rs
.getString("vds_id")));
entity.setvds_name(rs.getString("vds_name"));
entity.setserver_SSL_enabled(rs
.getBoolean("server_SSL_enabled"));
entity.setvds_type(VDSType.forValue(rs.getInt("vds_type")));
entity.setvds_strength(rs.getInt("vds_strength"));
entity.setpm_type(rs.getString("pm_type"));
entity.setpm_user(rs.getString("pm_user"));
entity.setpm_password(decryptPassword(rs.getString("pm_password")));
entity.setpm_port((Integer) rs.getObject("pm_port"));
entity.setpm_options(rs.getString("pm_options"));
entity.setpm_enabled(rs.getBoolean("pm_enabled"));
entity.setOtpValidity(rs.getLong("otp_validity"));
return entity;
}
};
return getCallsHandler().executeRead("GetVdsStaticByVdsId", mapper, parameterSource);
}
@Override
public VdsStatic get(String name) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vds_name", name);
ParameterizedRowMapper<VdsStatic> mapper = new ParameterizedRowMapper<VdsStatic>() {
@Override
public VdsStatic mapRow(ResultSet rs, int rowNum)
throws SQLException {
VdsStatic entity = new VdsStatic();
entity.sethost_name(rs.getString("host_name"));
entity.setManagmentIp(rs.getString("ip"));
entity.setUniqueID(rs.getString("vds_unique_id"));
entity.setport(rs.getInt("port"));
entity.setvds_group_id(Guid.createGuidFromString(rs
.getString("vds_group_id")));
entity.setId(Guid.createGuidFromString(rs
.getString("vds_id")));
entity.setvds_name(rs.getString("vds_name"));
entity.setserver_SSL_enabled(rs
.getBoolean("server_SSL_enabled"));
entity.setvds_type(VDSType.forValue(rs.getInt("vds_type")));
entity.setvds_strength(rs.getInt("vds_strength"));
entity.setpm_type(rs.getString("pm_type"));
entity.setpm_user(rs.getString("pm_user"));
entity.setpm_password(decryptPassword(rs.getString("pm_password")));
entity.setpm_port((Integer) rs.getObject("pm_port"));
entity.setpm_options(rs.getString("pm_options"));
entity.setpm_enabled(rs.getBoolean("pm_enabled"));
entity.setOtpValidity(rs.getLong("otp_validity"));
return entity;
}
};
return (VdsStatic) DbFacadeUtils.asSingleResult(getCallsHandler().executeReadList("GetVdsStaticByVdsName",
mapper,
parameterSource));
}
@Override
public List<VdsStatic> getAllForHost(String host) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("host_name", host);
ParameterizedRowMapper<VdsStatic> mapper = new ParameterizedRowMapper<VdsStatic>() {
@Override
public VdsStatic mapRow(ResultSet rs, int rowNum)
throws SQLException {
VdsStatic entity = new VdsStatic();
entity.sethost_name(rs.getString("host_name"));
entity.setManagmentIp(rs.getString("ip"));
entity.setUniqueID(rs.getString("vds_unique_id"));
entity.setport(rs.getInt("port"));
entity.setvds_group_id(Guid.createGuidFromString(rs
.getString("vds_group_id")));
entity.setId(Guid.createGuidFromString(rs
.getString("vds_id")));
entity.setvds_name(rs.getString("vds_name"));
entity.setserver_SSL_enabled(rs
.getBoolean("server_SSL_enabled"));
entity.setvds_type(VDSType.forValue(rs.getInt("vds_type")));
entity.setvds_strength(rs.getInt("vds_strength"));
entity.setpm_type(rs.getString("pm_type"));
entity.setpm_user(rs.getString("pm_user"));
entity.setpm_password(decryptPassword(rs.getString("pm_password")));
entity.setpm_port((Integer) rs.getObject("pm_port"));
entity.setpm_options(rs.getString("pm_options"));
entity.setpm_enabled(rs.getBoolean("pm_enabled"));
entity.setOtpValidity(rs.getLong("otp_validity"));
return entity;
}
};
return getCallsHandler().executeReadList("GetVdsStaticByHostName", mapper, parameterSource);
}
@Override
public List<VdsStatic> getAllWithIpAddress(String address) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("ip", address);
ParameterizedRowMapper<VdsStatic> mapper = new ParameterizedRowMapper<VdsStatic>() {
@Override
public VdsStatic mapRow(ResultSet rs, int rowNum)
throws SQLException {
VdsStatic entity = new VdsStatic();
entity.sethost_name(rs.getString("host_name"));
entity.setManagmentIp(rs.getString("ip"));
entity.setUniqueID(rs.getString("vds_unique_id"));
entity.setport(rs.getInt("port"));
entity.setvds_group_id(Guid.createGuidFromString(rs
.getString("vds_group_id")));
entity.setId(Guid.createGuidFromString(rs
.getString("vds_id")));
entity.setvds_name(rs.getString("vds_name"));
entity.setserver_SSL_enabled(rs
.getBoolean("server_SSL_enabled"));
entity.setvds_type(VDSType.forValue(rs.getInt("vds_type")));
entity.setvds_strength(rs.getInt("vds_strength"));
entity.setpm_type(rs.getString("pm_type"));
entity.setpm_user(rs.getString("pm_user"));
entity.setpm_password(decryptPassword(rs.getString("pm_password")));
entity.setpm_port((Integer) rs.getObject("pm_port"));
entity.setpm_options(rs.getString("pm_options"));
entity.setpm_enabled(rs.getBoolean("pm_enabled"));
entity.setOtpValidity(rs.getLong("otp_validity"));
return entity;
}
};
return getCallsHandler().executeReadList("GetVdsStaticByIp", mapper, parameterSource);
}
@Override
public List<VdsStatic> getAllForVdsGroup(Guid vdsGroup) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vds_group_id", vdsGroup);
ParameterizedRowMapper<VdsStatic> mapper = new ParameterizedRowMapper<VdsStatic>() {
@Override
public VdsStatic mapRow(ResultSet rs, int rowNum)
throws SQLException {
VdsStatic entity = new VdsStatic();
entity.sethost_name(rs.getString("host_name"));
entity.setManagmentIp(rs.getString("ip"));
entity.setUniqueID(rs.getString("vds_unique_id"));
entity.setport(rs.getInt("port"));
entity.setvds_group_id(Guid.createGuidFromString(rs
.getString("vds_group_id")));
entity.setId(Guid.createGuidFromString(rs
.getString("vds_id")));
entity.setvds_name(rs.getString("vds_name"));
entity.setserver_SSL_enabled(rs
.getBoolean("server_SSL_enabled"));
entity.setvds_type(VDSType.forValue(rs.getInt("vds_type")));
entity.setvds_strength(rs.getInt("vds_strength"));
entity.setpm_type(rs.getString("pm_type"));
entity.setpm_user(rs.getString("pm_user"));
entity.setpm_password(decryptPassword(rs.getString("pm_password")));
entity.setpm_port((Integer) rs.getObject("pm_port"));
entity.setpm_options(rs.getString("pm_options"));
entity.setpm_enabled(rs.getBoolean("pm_enabled"));
entity.setOtpValidity(rs.getLong("otp_validity"));
return entity;
}
};
return getCallsHandler().executeReadList("GetVdsStaticByVdsGroupId", mapper, parameterSource);
}
@Override
public void save(VdsStatic vds) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("host_name", vds.gethost_name())
.addValue("ip", vds.getManagmentIp())
.addValue("vds_unique_id", vds.getUniqueID())
.addValue("port", vds.getport())
.addValue("vds_group_id", vds.getvds_group_id())
.addValue("vds_id", vds.getId())
.addValue("vds_name", vds.getvds_name())
.addValue("server_SSL_enabled", vds.getserver_SSL_enabled())
.addValue("vds_type", vds.getvds_type())
.addValue("vds_strength", vds.getvds_strength())
.addValue("pm_type", vds.getpm_type())
.addValue("pm_user", vds.getpm_user())
.addValue("pm_password", encryptPassword(vds.getpm_password()))
.addValue("pm_port", vds.getpm_port())
.addValue("pm_options", vds.getpm_options())
.addValue("pm_enabled", vds.getpm_enabled())
.addValue("otpValidity", vds.getOtpValidity());
Map<String, Object> dbResults = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("InsertVdsStatic").execute(parameterSource);
vds.setId(new Guid(dbResults.get("vds_id").toString()));
}
@Override
public void update(VdsStatic vds) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("host_name", vds.gethost_name())
.addValue("ip", vds.getManagmentIp())
.addValue("vds_unique_id", vds.getUniqueID())
.addValue("port", vds.getport())
.addValue("vds_group_id", vds.getvds_group_id())
.addValue("vds_id", vds.getId())
.addValue("vds_name", vds.getvds_name())
.addValue("server_SSL_enabled", vds.getserver_SSL_enabled())
.addValue("vds_type", vds.getvds_type())
.addValue("vds_strength", vds.getvds_strength())
.addValue("pm_type", vds.getpm_type())
.addValue("pm_user", vds.getpm_user())
.addValue("pm_password", encryptPassword(vds.getpm_password()))
.addValue("pm_port", vds.getpm_port())
.addValue("pm_options", vds.getpm_options())
.addValue("pm_enabled", vds.getpm_enabled())
.addValue("otp_validity", vds.getOtpValidity());
getCallsHandler().executeModification("UpdateVdsStatic", parameterSource);
}
@Override
public void remove(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("vds_id", id);
getCallsHandler().executeModification("DeleteVdsStatic", parameterSource);
}
@Override
public List<VdsStatic> getAll() {
throw new NotImplementedException();
}
public static String encryptPassword(String password) {
if (StringHelper.isEmpty(password)) {
return password;
}
String result = password;
String keyFile = Config.<String> GetValue(ConfigValues.keystoreUrl, Config.DefaultConfigurationVersion);
String passwd = Config.<String> GetValue(ConfigValues.keystorePass, Config.DefaultConfigurationVersion);
String alias = Config.<String> GetValue(ConfigValues.CertAlias, Config.DefaultConfigurationVersion);
try {
result = EncryptionUtils.encrypt((String) result, keyFile, passwd, alias);
} catch (Exception e) {
throw new SecurityException(e);
}
return result;
}
public static String decryptPassword(String password) {
if (StringHelper.isEmpty(password)) {
return password;
}
String result = password;
String keyFile = Config.<String> GetValue(ConfigValues.keystoreUrl, Config.DefaultConfigurationVersion);
String passwd = Config.<String> GetValue(ConfigValues.keystorePass, Config.DefaultConfigurationVersion);
String alias = Config.<String> GetValue(ConfigValues.CertAlias, Config.DefaultConfigurationVersion);
try {
result = EncryptionUtils.decrypt((String) result, keyFile, passwd, alias);
} catch (Exception e) {
log.debugFormat("Failed to decrypt password, error message: {0}", e.getMessage());
result = password;
}
return result;
}
private static LogCompat log = LogFactoryCompat.getLog(VdsStaticDAODbFacadeImpl.class);
}