package org.ovirt.engine.api.restapi.types; import java.util.HashSet; import java.util.Set; import org.ovirt.engine.api.model.Display; import org.ovirt.engine.api.model.DisplayType; import org.ovirt.engine.api.model.Vm; import org.ovirt.engine.core.common.action.RunVmOnceParams; import org.ovirt.engine.core.common.businessentities.GraphicsType; import org.ovirt.engine.core.common.businessentities.InstanceType; import org.ovirt.engine.core.common.businessentities.VmTemplate; public class DisplayMapper { @Mapping(from = GraphicsType.class, to = DisplayType.class) public static DisplayType map(GraphicsType graphicsType, DisplayType displayType) { if (graphicsType == GraphicsType.SPICE) { return DisplayType.SPICE; } else if (graphicsType == GraphicsType.VNC) { return DisplayType.VNC; } return null; } @Mapping(from = DisplayType.class, to = GraphicsType.class) public static GraphicsType map(DisplayType displayType, GraphicsType graphicsType) { switch (displayType) { case SPICE: return GraphicsType.SPICE; case VNC: return GraphicsType.VNC; default: return null; } } @Mapping(from = VmTemplate.class, to = Display.class) public static Display map(VmTemplate vmTemplate, Display display) { Display result = (display == null) ? new Display() : display; result.setMonitors(vmTemplate.getNumOfMonitors()); result.setSingleQxlPci(vmTemplate.getSingleQxlPci()); result.setAllowOverride(vmTemplate.isAllowConsoleReconnect()); result.setSmartcardEnabled(vmTemplate.isSmartcardEnabled()); result.setKeyboardLayout(vmTemplate.getVncKeyboardLayout()); result.setFileTransferEnabled(vmTemplate.isSpiceFileTransferEnabled()); result.setCopyPasteEnabled(vmTemplate.isSpiceCopyPasteEnabled()); return result; } @Mapping(from = InstanceType.class, to = Display.class) public static Display map(InstanceType instanceType, Display display) { Display result = (display == null) ? new Display() : display; result.setMonitors(instanceType.getNumOfMonitors()); result.setSingleQxlPci(instanceType.getSingleQxlPci()); result.setSmartcardEnabled(instanceType.isSmartcardEnabled()); return result; } /** * For backwards compatibility. Derives graphics type (backend) from display (rest). */ public static void fillDisplayInParams(Vm vm, RunVmOnceParams params) { if (params == null) { return; } if (vm.isSetDisplay() && vm.getDisplay().isSetType()) { DisplayType displayType = vm.getDisplay().getType(); if (displayType != null) { org.ovirt.engine.core.common.businessentities.DisplayType display = mapDisplayType(displayType, null); if (display != null) { Set<GraphicsType> graphics = new HashSet<>(); switch (display) { case qxl: graphics.add(GraphicsType.SPICE); break; case vga: case cirrus: graphics.add(GraphicsType.VNC); break; } params.setRunOnceGraphics(graphics); } } } } @Mapping(from = DisplayType.class, to = org.ovirt.engine.core.common.businessentities.DisplayType.class) public static org.ovirt.engine.core.common.businessentities.DisplayType mapDisplayType(DisplayType type, org.ovirt.engine.core.common.businessentities.DisplayType incoming) { switch (type) { case VNC: return org.ovirt.engine.core.common.businessentities.DisplayType.vga; case SPICE: return org.ovirt.engine.core.common.businessentities.DisplayType.qxl; default: return null; } } }