package org.ovirt.engine.core.dao;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.VmIcon;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.transaction.TransactionSupport;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SingleColumnRowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class VmIconDaoImpl extends DefaultGenericDao<VmIcon, Guid> implements VmIconDao {
private static final String ID_COLUMN = "id";
private static final String DATA_URL_COLUMN = "data_url";
public VmIconDaoImpl() {
super("VmIcon");
}
@Override
protected MapSqlParameterSource createFullParametersMapper(VmIcon entity) {
return createIdParameterMapper(entity.getId())
.addValue(DATA_URL_COLUMN, entity.getDataUrl());
}
@Override
protected MapSqlParameterSource createIdParameterMapper(Guid id) {
return getCustomMapSqlParameterSource()
.addValue(ID_COLUMN, id);
}
@Override
protected RowMapper<VmIcon> createEntityRowMapper() {
return (rs, rowNum) -> {
VmIcon icon = new VmIcon();
icon.setId(getGuid(rs, ID_COLUMN));
icon.setDataUrl(rs.getString(DATA_URL_COLUMN));
return icon;
};
}
@Override
public List<VmIcon> getAll(Guid userId, boolean isFiltered) {
return getCallsHandler().executeReadList("GetAllFromVmIconsFiltered",
createEntityRowMapper(),
getCustomMapSqlParameterSource()
.addValue("user_id", userId)
.addValue("is_filtered", isFiltered));
}
@Override
public List<VmIcon> getByDataUrl(String dataUrl) {
return getCallsHandler().executeReadList("GetVmIconByVmIconDataUrl", createEntityRowMapper(),
getCustomMapSqlParameterSource().addValue(DATA_URL_COLUMN, dataUrl));
}
@Override
public void removeIfUnused(Guid iconId) {
getCallsHandler().executeModification("DeleteVmIconIfUnused",
getCustomMapSqlParameterSource().addValue(ID_COLUMN, iconId));
}
@Override
public Guid ensureIconInDatabase(final String icon) {
if (icon == null) {
throw new IllegalArgumentException("Argument 'icon' should not be null");
}
return TransactionSupport.executeInNewTransaction(() -> {
final List<VmIcon> existingIcons = getByDataUrl(icon);
if (!existingIcons.isEmpty()) {
return existingIcons.get(0).getId();
}
final VmIcon newIcon = new VmIcon(Guid.newGuid(), icon);
save(newIcon);
return newIcon.getId();
});
}
@Override
public void removeAllUnusedIcons() {
getCallsHandler().executeModification("DeleteAllUnusedVmIcons",
getCustomMapSqlParameterSource());
}
@Override
public boolean exists(Guid id) {
return getCallsHandler().executeRead("IsVmIconExist",
SingleColumnRowMapper.newInstance(Boolean.class),
getCustomMapSqlParameterSource().addValue(ID_COLUMN, id));
}
}