package org.ovirt.engine.core.dao;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SingleColumnRowMapper;
@Named
@Singleton
public class VmAndTemplatesGenerationsImpl extends BaseDao implements VmAndTemplatesGenerationsDao {
private static final String ovfSeparator = "<<<ENDOVF>>>";
@Override
public void updateOvfGenerations(List<Guid> ids, List<Long> values, List<String> ovfData) {
getCallsHandler().executeModification("UpdateOvfGenerations", getCustomMapSqlParameterSource()
.addValue("vms_ids", StringUtils.join(ids, ','))
.addValue("vms_db_generations", StringUtils.join(values, ','))
.addValue("ovf_data", StringUtils.join(ovfData, ovfSeparator))
.addValue("ovf_data_seperator", ovfSeparator));
}
@Override
public Long getOvfGeneration(Guid id) {
return getCallsHandler().executeRead("GetOvfGeneration",
SingleColumnRowMapper.newInstance(Long.class), getCustomMapSqlParameterSource().addValue("vm_id", id));
}
@Override
public void deleteOvfGenerations(List<Guid> ids) {
getCallsHandler().executeModification("DeleteOvfGenerations", getCustomMapSqlParameterSource()
.addValue("vms_ids", StringUtils.join(ids, ',')));
}
@Override
public List<Guid> getVmsIdsForOvfUpdate(Guid storagePoolId) {
return getCallsHandler().executeReadList("GetVmsIdsForOvfUpdate",
createGuidMapper(),
getCustomMapSqlParameterSource().addValue("storage_pool_id", storagePoolId));
}
@Override
public List<Guid> getIdsForOvfDeletion(Guid storagePoolId) {
return getCallsHandler().executeReadList("GetIdsForOvfDeletion",
createGuidMapper(),
getCustomMapSqlParameterSource().addValue("storage_pool_id", storagePoolId));
}
@Override
public List<Guid> getVmTemplatesIdsForOvfUpdate(Guid storagePoolId) {
return getCallsHandler().executeReadList("GetVmTemplatesIdsForOvfUpdate",
createGuidMapper(),
getCustomMapSqlParameterSource().addValue("storage_pool_id", storagePoolId));
}
private static final RowMapper<Pair<Guid, String>> ovfDataRowMapper =
(resultSet, i) -> new Pair<>(getGuid(resultSet, "vm_guid"), resultSet.getString("ovf_data"));
@Override
public List<Pair<Guid, String>> loadOvfDataForIds(List<Guid> ids) {
return getCallsHandler().executeReadList("LoadOvfDataForIds",
ovfDataRowMapper,
getCustomMapSqlParameterSource().addValue("ids", StringUtils.join(ids, ',')));
}
}