package org.ovirt.engine.core.bll.storage.domain;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.ovirt.engine.core.bll.storage.connection.ISCSIStorageHelper;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.businessentities.storage.LUNStorageServerConnectionMap;
import org.ovirt.engine.core.common.businessentities.storage.LUNStorageServerConnectionMapId;
import org.ovirt.engine.core.common.businessentities.storage.LUNs;
import org.ovirt.engine.core.common.businessentities.storage.StorageType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.LunDao;
import org.ovirt.engine.core.dao.StorageServerConnectionDao;
import org.ovirt.engine.core.dao.StorageServerConnectionLunMapDao;
@Singleton
public class LunHelper {
@Inject
private LunDao lunDao;
@Inject
private StorageServerConnectionDao storageServerConnectionDao;
@Inject
private StorageServerConnectionLunMapDao storageServerConnectionLunMapDao;
public void proceedLUNInDb(final LUNs lun, StorageType storageType) {
proceedLUNInDb(lun, storageType, "");
}
public void proceedLUNInDb(final LUNs lun, StorageType storageType, String volumeGroupId) {
lun.setVolumeGroupId(volumeGroupId);
if (lunDao.get(lun.getLUNId()) == null) {
lunDao.save(lun);
} else if (!volumeGroupId.isEmpty()) {
lunDao.update(lun);
}
if (storageType == StorageType.FCP) {
// No need to handle connections (FCP storage doesn't utilize connections).
return;
}
for (StorageServerConnections connection : lun.getLunConnections()) {
StorageServerConnections dbConnection = ISCSIStorageHelper.findConnectionWithSameDetails(connection);
if (dbConnection == null) {
connection.setId(Guid.newGuid().toString());
connection.setStorageType(storageType);
storageServerConnectionDao.save(connection);
} else {
connection.setId(dbConnection.getId());
}
if (storageServerConnectionLunMapDao.get
(new LUNStorageServerConnectionMapId(lun.getLUNId(), connection.getId())) == null) {
storageServerConnectionLunMapDao.save(
new LUNStorageServerConnectionMap(lun.getLUNId(), connection.getId()));
}
}
}
}