package org.ovirt.engine.core.dao.images;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Transaction;
import org.ovirt.engine.core.common.businessentities.DiskImageTemplate;
import org.ovirt.engine.core.common.businessentities.vm_template_image_map;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.BaseDAOHibernateImpl;
public class DiskImageTemplateDAOHibernateImpl extends BaseDAOHibernateImpl<DiskImageTemplate, Guid> {
public DiskImageTemplateDAOHibernateImpl() {
super(DiskImageTemplate.class);
}
@Override
public DiskImageTemplate get(Guid id) {
return fillInDetails(super.get(id));
}
public void removeTemplate(Guid id, Guid vm) {
Query query =
getSession().createQuery("delete from DiskImageTemplate " +
"where id = :id " +
"and id in " +
"(select vtim.id.imageTemplateId from vm_template_image_map vtim " +
"where vtim.id.vmTemplateId = :template_id)");
query.setParameter("id", id);
query.setParameter("template_id", vm);
Transaction transaction = getSession().beginTransaction();
query.executeUpdate();
transaction.commit();
}
public DiskImageTemplate getTemplateByVmTemplateAndId(Guid vm, Guid template) {
Query query = getSession().createQuery("select ditmpl from DiskImageTemplate ditmpl, " +
"vm_template_image_map vtimap " +
"where ditmpl.id = :template_id " +
"and vtimap.id.imageTemplateId = :template_id " +
"and vtimap.id.vmTemplateId = :vm_template_id");
query.setParameter("template_id", template);
query.setParameter("vm_template_id", vm);
return fillInDetails((DiskImageTemplate) query.uniqueResult());
}
private DiskImageTemplate fillInDetails(DiskImageTemplate template) {
if (template != null) {
Query query =
getSession().createQuery("from vm_template_image_map where id.imageTemplateId = :template_id");
query.setParameter("template_id", template.getit_guid());
vm_template_image_map result = (vm_template_image_map) query.uniqueResult();
if (result != null) {
template.setvtim_it_guid(result.id.imageTemplateId);
template.setvmt_guid(result.id.vmTemplateId);
template.setinternal_drive_mapping(result.internalDriveMapping);
}
}
return template;
}
public List<DiskImageTemplate> getAllTemplatesForVmTemplate(Guid vmTemplate) {
Query query = getSession().createQuery("select ditmpl from DiskImageTemplate ditmpl, " +
"vm_template_image_map vtimap " +
"where vtimap.id.imageTemplateId = ditmpl.id " +
"and vtimap.id.vmTemplateId = :template_id");
query.setParameter("template_id", vmTemplate);
return fillInDetails(query.list());
}
private List<DiskImageTemplate> fillInDetails(List<DiskImageTemplate> templates) {
for (DiskImageTemplate template : templates) {
fillInDetails(template);
}
return templates;
}
}