package org.ovirt.engine.core.bll;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.common.action.GraphicsParameters;
import org.ovirt.engine.core.common.businessentities.DisplayType;
import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
import org.ovirt.engine.core.common.businessentities.VmDevice;
import org.ovirt.engine.core.common.businessentities.VmStatic;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.dao.VmDeviceDao;
import org.ovirt.engine.core.dao.VmStaticDao;
import org.ovirt.engine.core.dao.VmTemplateDao;
public class RemoveGraphicsAndVideoDevicesCommand extends RemoveGraphicsDeviceCommand {
@Inject
private VmStaticDao vmStaticDao;
@Inject
private VmDeviceDao vmDeviceDao;
@Inject
private VmTemplateDao vmTemplateDao;
public RemoveGraphicsAndVideoDevicesCommand(GraphicsParameters parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected void executeCommand() {
VmDevice graphicsDev = getParameters().getDev();
vmDeviceDao.remove(graphicsDev.getId());
if (noGraphicsDevicesLeft()) {
vmDeviceUtils.removeVideoDevices(getVmBaseId());
//Since getParameters().isVm() isn't set by REST api, try to set VM and if failed then try to set Template
if(!setVmToHeadlessMode()) {
setTemplateToHeadlessMode();
}
}
setSucceeded(true);
}
private boolean noGraphicsDevicesLeft() {
List<GraphicsDevice> devices =
runInternalQuery(VdcQueryType.GetGraphicsDevices, new IdQueryParameters(getVmBaseId())).getReturnValue();
return devices.isEmpty();
}
private boolean setVmToHeadlessMode() {
VmStatic vmStatic = vmStaticDao.get(getVmBaseId());
if (vmStatic != null && vmStatic.getDefaultDisplayType() != DisplayType.none) {
vmStatic.setDefaultDisplayType(DisplayType.none);
vmStatic.setSingleQxlPci(false);
resourceManager.getVmManager(getVmBaseId()).update(vmStatic);
return true;
}
return false;
}
private void setTemplateToHeadlessMode() {
VmTemplate vmTemplate = vmTemplateDao.get(getVmBaseId());
if (vmTemplate != null && vmTemplate.getDefaultDisplayType() != DisplayType.none) {
vmTemplate.setDefaultDisplayType(DisplayType.none);
vmTemplate.setSingleQxlPci(false);
vmTemplateDao.update(vmTemplate);
}
}
}