package org.ovirt.engine.core.bll;
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.VmDevice;
import org.ovirt.engine.core.common.businessentities.VmStatic;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.VmDeviceDao;
import org.ovirt.engine.core.dao.VmStaticDao;
import org.ovirt.engine.core.dao.VmTemplateDao;
public class AddGraphicsAndVideoDevicesCommand extends AddGraphicsDeviceCommand {
@Inject
private VmDeviceDao vmDeviceDao;
@Inject
private VmStaticDao vmStaticDao;
@Inject
private VmTemplateDao vmTemplateDao;
public AddGraphicsAndVideoDevicesCommand(GraphicsParameters parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected void executeCommand() {
VmDevice graphicsDev = getParameters().getDev();
if (graphicsDev.getDeviceId() == null) {
graphicsDev.setDeviceId(Guid.newGuid());
}
vmDeviceDao.save(graphicsDev);
if (getPrevDevices().isEmpty()) {
if (getParameters().isVm()) {
setVmToNonHeadlessMode();
} else {
setTemplateToNonHeadlessMode();
}
}
setSucceeded(true);
setActionReturnValue(graphicsDev.getId().getDeviceId());
}
private void setVmToNonHeadlessMode() {
VmStatic vmStatic = vmStaticDao.get(getVmBaseId());
if (vmStatic == null) {
return;
}
if (vmStatic.getDefaultDisplayType() == DisplayType.none) {
vmStatic.setDefaultDisplayType(DisplayType.qxl);
resourceManager.getVmManager(getVmBaseId()).update(vmStatic);
}
vmDeviceUtils.addVideoDevicesOnlyIfNoVideoDeviceExists(vmStatic);
}
private void setTemplateToNonHeadlessMode() {
VmTemplate vmTemplate = vmTemplateDao.get(getVmBaseId());
if (vmTemplate == null) {
return;
}
if (vmTemplate.getDefaultDisplayType() == DisplayType.none) {
vmTemplate.setDefaultDisplayType(DisplayType.qxl);
vmTemplateDao.update(vmTemplate);
}
vmDeviceUtils.addVideoDevicesOnlyIfNoVideoDeviceExists(vmTemplate);
}
}