package org.ovirt.engine.core.bll.storage.disk.cinder;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.InternalCommandAttribute;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.storage.disk.UpdateVmDiskCommand;
import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.VmDiskOperationParameterBase;
import org.ovirt.engine.core.common.businessentities.SubjectEntity;
import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.ImageDao;
import org.ovirt.engine.core.di.Injector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@InternalCommandAttribute
public class ExtendCinderDiskCommand<T extends VmDiskOperationParameterBase> extends UpdateVmDiskCommand<T> {
private static final Logger log = LoggerFactory.getLogger(ExtendCinderDiskCommand.class);
@Inject
private ImageDao imageDao;
public ExtendCinderDiskCommand(T parameters, CommandContext commandContext) {
super(parameters, commandContext);
}
@Override
public void executeCommand() {
CinderDisk cinderDisk = (CinderDisk) getNewDisk();
getCinderBroker().extendDisk(cinderDisk, (int) getNewDiskSizeInGB());
persistCommand(getParameters().getParentCommand(), true);
getReturnValue().setActionReturnValue(cinderDisk.getId());
setSucceeded(true);
}
protected void performDiskUpdate() {
CinderDisk cinderDisk = (CinderDisk) getNewDisk();
imageDao.updateImageSize(cinderDisk.getImageId(), cinderDisk.getSize());
performDiskUpdate(true);
}
@Override
public CommandCallback getCallback() {
return Injector.injectMembers(new ExtendCinderDiskCommandCallback());
}
@Override
public boolean validate() {
return true;
}
@Override
protected Map<String, Pair<String, String>> getExclusiveLocks() {
return Collections.emptyMap();
}
@Override
protected Map<String, Pair<String, String>> getSharedLocks() {
return Collections.emptyMap();
}
@Override
public Guid getStorageDomainId() {
CinderDisk cinderDisk = (CinderDisk) getNewDisk();
return cinderDisk.getStorageIds().get(0);
}
@Override
protected void endWithFailure() {
setSucceeded(true);
}
@Override
protected Collection<SubjectEntity> getSubjectEntities() {
return Collections.singleton(new SubjectEntity(VdcObjectType.Storage,
getStorageDomainId()));
}
}