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.VDS;
import org.ovirt.engine.core.common.businessentities.VDSType;
import org.ovirt.engine.core.common.businessentities.VdsDynamic;
import org.ovirt.engine.core.common.businessentities.VdsStatic;
import org.ovirt.engine.core.common.businessentities.VdsStatistics;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.NGuid;
import org.ovirt.engine.core.dao.vds.VdsDynamicDAOHibernateImpl;
import org.ovirt.engine.core.dao.vds.VdsStaticDAOHibernateImpl;
import org.ovirt.engine.core.dao.vds.VdsStatisticsDAOHibernateImpl;
public class VdsDAOWrapperImpl extends BaseDAOWrapperImpl implements VdsDAO {
private VdsStaticDAOHibernateImpl vdsStaticDAO = new VdsStaticDAOHibernateImpl();
private VdsDynamicDAOHibernateImpl vdsDynamicDAO = new VdsDynamicDAOHibernateImpl();
private VdsStatisticsDAOHibernateImpl vdsStatisticsDAO = new VdsStatisticsDAOHibernateImpl();
@Override
public void setSession(Session session) {
super.setSession(session);
vdsStaticDAO.setSession(session);
vdsDynamicDAO.setSession(session);
vdsStatisticsDAO.setSession(session);
}
@Override
public VDS get(NGuid id) {
Guid guid = new Guid(id.getUuid());
VdsStatic staticPart = vdsStaticDAO.get(guid);
VdsDynamic dynamicPart = vdsDynamicDAO.get(guid);
VdsStatistics statisticsPart = vdsStatisticsDAO.get(guid);
// if we didn't find one, then return null
if (staticPart == null || dynamicPart == null || statisticsPart == null) {
return null;
}
return new VDS(staticPart, dynamicPart, statisticsPart);
}
/* TODO - align with VDS DAO split - Darryl
@Override
public VdsStatic getStatic(Guid id) {
return vdsStaticDAO.get(id);
}
@Override
public VdsDynamic getDynamic(Guid id) {
return vdsDynamicDAO.get(id);
}
@Override
public VdsStatistics getStatistics(Guid id) {
return vdsStatisticsDAO.get(id);
}
@Override
public VdsStatic getStaticByName(String name) {
return vdsStaticDAO.getByName(name);
} */
private List<VDS> convertToVdsList(List<VdsStatic> found) {
List<VDS> result = new ArrayList<VDS>();
for (VdsStatic vdsStatic : found) {
VdsDynamic vdsDynamic = vdsDynamicDAO.get(vdsStatic.getId());
VdsStatistics vdsStatistics = vdsStatisticsDAO.get(vdsStatic.getId());
result.add(new VDS(vdsStatic, vdsDynamic, vdsStatistics));
}
return result;
}
@Override
public List<VDS> getAllWithName(String name) {
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.eq("name", name));
return convertToVdsList(found);
}
@Override
public List<VDS> getAllForHostname(String hostname) {
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.eq("hostname", hostname));
return convertToVdsList(found);
}
/* TODO - align with VDS DAO split - Darryl
@Override
public List<VDS> getAllWithIpAddress(String address) {
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.eq("ip", address));
return convertToVdsList(found);
} */
@Override
public List<VDS> getAllWithUniqueId(String id) {
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.eq("uniqueId", id));
return convertToVdsList(found);
}
@Override
public List<VDS> getAllOfType(VDSType vds) {
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.eq("vdsType", vds.getValue()));
return convertToVdsList(found);
}
@Override
public List<VDS> getAllOfTypes(VDSType[] types) {
Integer[] intTypes = new Integer[types.length];
for (int index = 0; index < types.length; index++) {
intTypes[index] = types[index].getValue();
}
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.in("vdsType", intTypes));
return convertToVdsList(found);
}
@SuppressWarnings("unchecked")
@Override
public List<VDS> getAllForVdsGroupWithoutMigrating(final Guid vdsGroup) {
Session session = getSession();
Query query = session.getNamedQuery("all_vds_static_for_vds_group_without_migration");
query.setParameter("vds_group_id", vdsGroup);
return convertToVdsList(query.list());
}
@SuppressWarnings("unchecked")
@Override
public List<VDS> getAllWithQuery(String sql) {
Session session = getSession();
Query query = session.createSQLQuery(sql);
return query.list();
}
@Override
public List<VDS> getAll() {
List<VdsStatic> found = vdsStaticDAO.getAll();
return convertToVdsList(found);
}
/* TODO - align with VDS DAO split - Darryl
@Override
public List<VDS> getAllForVdsGroup(Guid vdsGroup) {
List<VdsStatic> found = vdsStaticDAO.findByCriteria(Restrictions.eq("vdsGroupId", vdsGroup));
return convertToVdsList(found);
}
@Override
public List<VdsStatic> getAllForHost(String hostname) {
return vdsStaticDAO.findByCriteria(Restrictions.eq("hostname", hostname));
}
@Override
public List<VdsStatic> getAllWithIpAddress(String address) {
return vdsStaticDAO.findByCriteria(Restrictions.eq("ip", address));
}
@Override
public List<VdsStatic> getAllForVdsGroup(Guid vdsGroup) {
return vdsStaticDAO.findByCriteria(Restrictions.eq("vdsGroupId", vdsGroup));
}
@Override
public void save(VdsStatic vds) {
vdsStaticDAO.save(vds);
}
@Override
public void saveDynamic(VdsDynamic vds) {
vdsDynamicDAO.save(vds);
}
@Override
public void saveStatistics(VdsStatistics stats) {
vdsStatisticsDAO.save(stats);
}
@Override
public void updateStatic(VdsStatic vds) {
saveStatic(vds);
}
@Override
public void updateDynamic(VdsDynamic vds) {
saveDynamic(vds);
}
@Override
public void updateStatistics(VdsStatistics stats) {
saveStatistics(stats);
}
@Override
public void removeStatic(Guid id) {
vdsStaticDAO.remove(id);
}
@Override
public void removeDynamic(Guid id) {
vdsDynamicDAO.remove(id);
}
@Override
public void removeStatistics(Guid id) {
vdsStatisticsDAO.remove(id);
} */
/* TODO - align with VDS DAO split - Darryl , all methods below were added to apply inherited interface.*/
@Override
public List<VDS> getAllWithIpAddress(String address) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<VDS> getAllForVdsGroup(Guid vdsGroup) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<VDS> getAllForStoragePool(Guid storagePoolId) {
// TODO Auto-generated method stub
return null;
}
/* TODO Follow separation of Spm Id Map handling from VdsDAO - Darryl
@Override
public vds_spm_id_map getVdsSpmIdMapForVds(Guid vdsId) {
// TODO Auto-generated method stub
return null;
}
@Override
public void addVdsSpmIdMap(vds_spm_id_map vds_spm_id_map) {
// TODO Auto-generated method stub
}
@Override
public void removeVdsSpmIdMap(Guid vdsId) {
// TODO Auto-generated method stub
}
@Override
public List<vds_spm_id_map> getAllVdsSpmIdMapsForStoragePool(Guid storagePoolId) {
// TODO Auto-generated method stub
return null;
}
@Override
public vds_spm_id_map getVdsSpmIdMapForStoragePoolAndVdsSpmId(Guid storagePoolId, int VdsSPMId) {
// TODO Auto-generated method stub
return null;
}
*/
}