package org.ovirt.engine.core.dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.ovirt.engine.core.common.businessentities.TagsType;
import org.ovirt.engine.core.common.businessentities.tags;
import org.ovirt.engine.core.common.businessentities.tags_user_group_map;
import org.ovirt.engine.core.common.businessentities.tags_user_map;
import org.ovirt.engine.core.common.businessentities.tags_vds_map;
import org.ovirt.engine.core.common.businessentities.tags_vds_map_id;
import org.ovirt.engine.core.common.businessentities.tags_vm_map;
import org.ovirt.engine.core.common.businessentities.tags_vm_pool_map;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.NGuid;
import org.ovirt.engine.core.dao.tags.TagUserGroupMapDAO;
import org.ovirt.engine.core.dao.tags.TagUserMapDAO;
import org.ovirt.engine.core.dao.tags.TagVdsMapDAO;
import org.ovirt.engine.core.dao.tags.TagVmMapDAO;
/**
* <code>TagDAOHibernateImpl</code> provides an implementation of {@link TagDAO} based on Hibernate.
*
*/
public class TagDAOHibernateImpl extends BaseDAOHibernateImpl<tags, Guid> implements TagDAO {
private TagUserGroupMapDAO tagUserGroupMapDAO = new TagUserGroupMapDAO();
private TagUserMapDAO tagUserMapDAO = new TagUserMapDAO();
private TagVdsMapDAO tagVdsMapDAO = new TagVdsMapDAO();
private TagVmMapDAO tagVmMapDAO = new TagVmMapDAO();
public TagDAOHibernateImpl() {
super(tags.class);
}
@Override
public void setSession(Session session) {
super.setSession(session);
tagUserGroupMapDAO.setSession(session);
tagUserMapDAO.setSession(session);
tagVdsMapDAO.setSession(session);
tagVmMapDAO.setSession(session);
}
@Override
public List<tags> getAllForParent(Guid id) {
return findByCriteria(Restrictions.eq("parent", id));
}
@Override
public List<tags> getAllForUserGroups(String ids) {
// TODO need to refactor the caller to send in Guids
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("userGroup.id", filter.toArray()));
}
@Override
public List<tags> getAllUserGroupTagsWithIds(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("id", filter),
Restrictions.isNotNull("userGroup"));
}
@Override
public List<tags> getAllForVds(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("vds.id", filter));
}
@Override
public List<tags> getAllForVdsWithIds(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("id", filter), Restrictions.isNotNull("vds"));
}
@Override
public List<tags> getAllForVm(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("vm.id", filter));
}
@Override
public List<tags> getAllVmTagsWithIds(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("id", filter), Restrictions.isNotNull("vm"));
}
@Override
public List<tags> getAllForVmPools(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("vmPool.id", filter));
}
@Override
public List<tags> getAllForUsers(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("user.id", filter));
}
@Override
public List<tags> getAllForUsersWithIds(String ids) {
List<Guid> filter = convertIdsToGuids(ids);
return findByCriteria(Restrictions.in("id", filter),
Restrictions.isNotNull("user"));
}
@Override
public tags_user_group_map getTagUserGroupByGroupIdAndByTagId(Guid tagId, Guid groupId) {
return tagUserGroupMapDAO.findOneByCriteria(Restrictions.eq("tagId", tagId),
Restrictions.eq("groupId", groupId));
}
@Override
public void detachUserGroupFromTag(Guid tagId, Guid groupId) {
tagUserGroupMapDAO.remove(tagId, groupId);
}
@SuppressWarnings("unchecked")
@Override
public List<tags_user_group_map> getTagUserGroupMapsForTagName(String tagName) {
Session session = getSession();
Query query = session.getNamedQuery("get_all_tags_user_group_maps_for_tag_name");
query.setParameter("tag_name", tagName);
return query.list();
}
@Override
public tags_user_map getTagUserByTagIdAndByuserId(Guid tagId, Guid userId) {
return tagUserMapDAO.findOneByCriteria(Restrictions.eq("tagId", tagId), Restrictions.eq("userId", userId));
}
@Override
public void attachUserGroupToTag(tags_user_group_map map) {
tagUserGroupMapDAO.save(map);
}
@Override
public void attachUserToTag(tags_user_map tagUserMap) {
tagUserMapDAO.save(tagUserMap);
}
@Override
public void detachUserFromTag(Guid tagId, Guid userId) {
tagUserMapDAO.remove(tagId, userId);
}
@Override
public List<tags_user_map> getTagUserMapByTagName(String tagName) {
return tagUserMapDAO.getTaguserMapByTagName(tagName);
}
@Override
public tags_vds_map getTagVdsByTagIdAndByVdsId(Guid tagId, Guid vdsId) {
return tagVdsMapDAO.findOneByCriteria(Restrictions.eq("id.tagId", tagId), Restrictions.eq("id.vdsId", vdsId));
}
@Override
public void attachVdsToTag(tags_vds_map tagVdsMap) {
tagVdsMapDAO.save(tagVdsMap);
}
@Override
public void detachVdsFromTag(Guid tagId, Guid vdsId) {
tagVdsMapDAO.remove(new tags_vds_map_id(tagId, vdsId));
}
@Override
public List<tags_vds_map> getTagVdsMapByTagName(String tagName) {
tags tag = getByName(tagName);
if (tag != null) {
return tagVdsMapDAO.findByCriteria(Restrictions.eq("id.tagId", tag.gettag_id()));
} else {
return new ArrayList<tags_vds_map>();
}
}
@Override
public tags_vm_map getTagVmByTagIdAndByVmId(Guid tagId, Guid vmId) {
return tagVmMapDAO.findOneByCriteria(Restrictions.eq("id.tagId", tagId), Restrictions.eq("id.vmId", vmId));
}
@Override
public void attachVmToTag(tags_vm_map tagVmMap) {
tagVmMapDAO.save(tagVmMap);
}
@Override
public void updateDefaultDisplayForVmTag(tags_vm_map tagsVmMap) {
tagVmMapDAO.save(tagsVmMap);
}
@Override
public void detachVmFromTag(Guid tagId, Guid vmId) {
tagVmMapDAO.remove(tagId, vmId);
}
@Override
public List<tags_vm_map> getTagVmMapByTagName(String tagName) {
tags tag = getByName(tagName);
if (tag != null) {
return tagVmMapDAO.findByCriteria(Restrictions.eq("id.tagId", tag.gettag_id()));
} else {
return new ArrayList<tags_vm_map>();
}
}
@Override
public List<tags_vm_map> getTagVmMapByVmIdAndDefaultTag(Guid vmid) {
List<tags> defaultTags = findByCriteria(Restrictions.eq("type", TagsType.AdElementTag));
List<Guid> ids = new ArrayList<Guid>();
for (tags tag : defaultTags) {
ids.add(tag.gettag_id());
}
return tagVmMapDAO.findByCriteria(Restrictions.in("id.tagId", ids));
}
@Override
public List<tags_vm_map> getTimeLeasedUserVmsByAdGroupAndVmPoolId(Guid adGroupId, Guid vmPoolId) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<tags_vm_pool_map> getVmPoolTagsByVmPoolIdAndAdElementId(NGuid vmPoolId, Guid adElementId) {
// TODO Auto-generated method stub
return null;
}
}