package org.ovirt.engine.core.bll.storage.connection;
import java.util.Collection;
import java.util.List;
import javax.inject.Inject;
import org.apache.commons.collections.CollectionUtils;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.storage.domain.StorageDomainCommandBase;
import org.ovirt.engine.core.bll.validator.storage.StorageConnectionValidator;
import org.ovirt.engine.core.common.action.AttachDetachStorageConnectionParameters;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.businessentities.storage.LUNs;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.dao.LunDao;
import org.ovirt.engine.core.dao.StorageServerConnectionDao;
public class DetachStorageConnectionFromStorageDomainCommand<T extends AttachDetachStorageConnectionParameters>
extends StorageDomainCommandBase<T> {
@Inject
private StorageServerConnectionDao storageServerConnectionDao;
@Inject
private LunDao lunDao;
public DetachStorageConnectionFromStorageDomainCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected boolean validate() {
StorageConnectionValidator storageConnectionValidator = createStorageConnectionValidator();
if (!validate(storageConnectionValidator.isConnectionExists())
|| !validate(storageConnectionValidator.isDomainOfConnectionExistsAndInactive(getStorageDomain()))
|| !validate(storageConnectionValidator.isISCSIConnectionAndDomain(getStorageDomain()))) {
return false;
}
if(!storageConnectionValidator.isConnectionForISCSIDomainAttached(getStorageDomain())) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_STORAGE_CONNECTION_FOR_DOMAIN_NOT_EXIST);
}
return true;
}
protected StorageConnectionValidator createStorageConnectionValidator() {
String connectionId = getParameters().getStorageConnectionId();
StorageServerConnections connection = storageServerConnectionDao.get(connectionId);
return new StorageConnectionValidator(connection);
}
@Override
protected void executeCommand() {
String connectionId = getParameters().getStorageConnectionId();
List<LUNs> lunsForConnection = lunDao.getAllForStorageServerConnection(connectionId);
List<LUNs> lunsForVG = lunDao.getAllForVolumeGroup(getStorageDomain().getStorage());
Collection<LUNs> lunsToRemove = (Collection<LUNs>) CollectionUtils.intersection(lunsForConnection, lunsForVG);
for (LUNs lun : lunsToRemove) {
if (lunDao.get(lun.getLUNId()) != null) {
lunDao.remove(lun.getLUNId());
}
}
setSucceeded(true);
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__ACTION__DETACH);
addValidationMessage(EngineMessage.VAR__TYPE__STORAGE__CONNECTION);
}
}