package org.ovirt.engine.core.dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.ovirt.engine.core.common.businessentities.StorageDomainType;
import org.ovirt.engine.core.common.businessentities.image_group_storage_domain_map;
import org.ovirt.engine.core.common.businessentities.image_group_storage_domain_map_id;
import org.ovirt.engine.core.common.businessentities.storage_domain_dynamic;
import org.ovirt.engine.core.common.businessentities.storage_domain_static;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.common.businessentities.storage_pool_iso_map;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.NGuid;
public class StorageDomainDAOWrapperImpl extends BaseDAOWrapperImpl implements StorageDomainDAO {
StorageDomainStaticDAOHibernateImpl staticDAO = new StorageDomainStaticDAOHibernateImpl();
StorageDomainDynamicDAOHibernateImpl dynamicDAO = new StorageDomainDynamicDAOHibernateImpl();
StoragePoolIsoMapDAOHibernateImpl storagePoolIsoMapDAO = new StoragePoolIsoMapDAOHibernateImpl();
ImageGroupStorageDomainMapDAOHibernateImpl imageGroupStorageDomainMapDAO =
new ImageGroupStorageDomainMapDAOHibernateImpl();
@Override
public void setSession(Session session) {
super.setSession(session);
staticDAO.setSession(session);
dynamicDAO.setSession(session);
storagePoolIsoMapDAO.setSession(session);
imageGroupStorageDomainMapDAO.setSession(session);
}
@Override
public Guid getMasterStorageDomainIdForPool(Guid pool) {
Guid returnValue = Guid.Empty;
List<storage_domains> domains = getAllForStoragePool(pool);
for (storage_domains domain : domains) {
if (domain.getstorage_domain_type() == StorageDomainType.Master) {
returnValue = domain.getid();
break;
}
}
return returnValue;
}
@Override
public storage_domains get(Guid id) {
storage_domain_static staticPart = staticDAO.get(id);
return createDomain(staticPart);
}
private storage_domains createDomain(storage_domain_static staticPart) {
storage_domains result = null;
if (staticPart != null) {
@SuppressWarnings("deprecation")
storage_domain_dynamic dynamicPart = dynamicDAO.get(staticPart.getId());
if (dynamicPart != null) {
result = new storage_domains();
result.setStorageStaticData(staticPart);
result.setStorageDynamicData(dynamicPart);
fillInDetails(result);
}
}
return result;
}
private void fillInDetails(storage_domains result) {
Query query;
query = getSession().createQuery("select spimap from storage_pool_iso_map spimap," +
"storage_pool pool " +
"where spimap.id.storagePoolId = pool.id " +
"and spimap.id.storageId = :id");
query.setParameter("id", result.getid());
@SuppressWarnings("unchecked")
List<storage_pool_iso_map> spimaps = query.list();
result.setStoragePoolIsoMapData(spimaps.size() > 0 ? spimaps.get(0) : null);
}
@Override
public storage_domains getForStoragePool(Guid id, NGuid storagepool) {
storage_domain_static staticPart = staticDAO.getForStoragePool(id, storagepool);
if (staticPart != null) {
return createDomain(staticPart);
}
return null;
}
@Override
public List<storage_domains> getAllForConnection(String connection) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<storage_domains> getAllForStoragePool(Guid pool) {
return createDomains(staticDAO.getAllForStoragePool(pool));
}
private List<storage_domains> createDomains(List<storage_domain_static> staticParts) {
List<storage_domains> result = new ArrayList<storage_domains>();
for (storage_domain_static staticPart : staticParts) {
storage_domains domain = createDomain(staticPart);
if (domain != null)
result.add(domain);
}
return result;
}
@Override
public List<storage_domains> getAllForImageGroup(NGuid imageGroup) {
return createDomains(staticDAO.getAllForImageGroup(imageGroup));
}
@Override
public List<storage_domains> getAllForStorageDomain(Guid id) {
return createDomains(staticDAO.getAllForStorageDomain(id));
}
@Override
public List<storage_domains> getAllWithQuery(String query) {
return createDomains(staticDAO.findAllWithSQL(query));
}
@Override
public List<storage_domains> getAll() {
return createDomains(staticDAO.getAll());
}
@Override
public List<Guid> getAllStorageDomainsByImageGroup(Guid imageGroupId) {
List<storage_domain_static> domains = staticDAO.getAllForImageGroup(imageGroupId);
List<Guid> result = new ArrayList<Guid>();
for (storage_domain_static domain : domains) {
result.add(domain.getId());
}
return result;
}
@Override
public void remove(Guid id) {
dynamicDAO.remove(id);
staticDAO.remove(id);
}
@Override
public image_group_storage_domain_map getImageGroupStorageDomainMapForImageGroupAndStorageDomain(image_group_storage_domain_map map) {
return imageGroupStorageDomainMapDAO.get(new image_group_storage_domain_map_id(map.getimage_group_id(),
map.getstorage_domain_id()));
}
@Override
public void addImageGroupStorageDomainMap(image_group_storage_domain_map map) {
imageGroupStorageDomainMapDAO.save(map);
}
@Override
public void removeImageGroupStorageDomainMap(image_group_storage_domain_map map) {
imageGroupStorageDomainMapDAO.remove(new image_group_storage_domain_map_id(map.getimage_group_id(),
map.getstorage_domain_id()));
}
@Override
public List<image_group_storage_domain_map> getAllImageGroupStorageDomainMapsForStorageDomain(Guid storage_domain_id) {
return imageGroupStorageDomainMapDAO.findAllForStorageDomain(storage_domain_id);
}
@Override
public List<image_group_storage_domain_map> getAllImageGroupStorageDomainMapsForImage(Guid image_group_id) {
return imageGroupStorageDomainMapDAO.getAllForImage(image_group_id);
}
@Override
public List<storage_domains> getAllByStoragePoolAndConnection(Guid storagePoolId, String connection) {
return null;
}
}