package org.ovirt.engine.core.bll.storage.disk.cinder;
import java.util.ArrayList;
import java.util.Arrays;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
import org.ovirt.engine.core.bll.validator.storage.CinderDisksValidator;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.GetCinderEntityByStorageDomainIdParameters;
import org.ovirt.engine.core.common.action.RegisterCinderDiskParameters;
import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RegisterCinderDiskCommand<T extends RegisterCinderDiskParameters> extends AddCinderDiskCommand<T> {
private static final Logger log = LoggerFactory.getLogger(RegisterCinderDiskCommand.class);
public RegisterCinderDiskCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
public boolean validate() {
CinderDisk cinderDisk = getCinderDisk();
cinderDisk.setStorageIds(new ArrayList<>(Arrays.asList(getParameters().getStorageDomainId())));
CinderDisksValidator cinderDiskValidator = getCinderDisksValidator(cinderDisk);
return validate(cinderDiskValidator.validateCinderDisksAlreadyRegistered());
}
@Override
public void executeCommand() {
VdcQueryReturnValue returnValue = runInternalQuery(VdcQueryType.GetUnregisteredCinderDiskByIdAndStorageDomainId,
new GetCinderEntityByStorageDomainIdParameters(
getCinderDisk().getId(), getParameters().getStorageDomainId()));
CinderDisk cinderDisk = returnValue.getReturnValue();
if (cinderDisk != null) {
addCinderDiskToDB(cinderDisk);
getReturnValue().setActionReturnValue(cinderDisk.getId());
setSucceeded(true);
}
}
@Override
public CommandCallback getCallback() {
return null;
}
@Override
public AuditLogType getAuditLogTypeValue() {
addAuditLogCustomValues();
return getSucceeded() ? AuditLogType.USER_REGISTER_DISK_FINISHED_SUCCESS : AuditLogType.USER_REGISTER_DISK_FINISHED_FAILURE;
}
private void addAuditLogCustomValues() {
this.addCustomValue("DiskAlias", getCinderDisk().getDiskAlias());
}
@Override
protected void setActionMessageParameters() {
addValidationMessage(EngineMessage.VAR__ACTION__REGISTER);
addValidationMessage(EngineMessage.VAR__TYPE__DISK);
}
protected CinderDisk getCinderDisk() {
return getParameters().getCinderDisk();
}
protected CinderDisksValidator getCinderDisksValidator(CinderDisk disk) {
return new CinderDisksValidator(disk);
}
}