package org.ovirt.engine.core.bll; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.ovirt.engine.core.bll.context.EngineContext; import org.ovirt.engine.core.common.businessentities.GraphicsDevice; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; import org.ovirt.engine.core.common.queries.IdsQueryParameters; import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VmDeviceDao; public class GetGraphicsDevicesMultipleQuery<P extends IdsQueryParameters> extends QueriesCommandBase<P> { @Inject private VmDeviceDao vmDeviceDao; public GetGraphicsDevicesMultipleQuery(P parameters) { super(parameters); } public GetGraphicsDevicesMultipleQuery(P parameters, EngineContext context) { super(parameters, context); } @Override protected void executeQueryCommand() { Map<Guid, List<GraphicsDevice>> result = new HashMap<>(); mapDevices(result, VmDeviceType.SPICE, getParameters().getIds() ); mapDevices(result, VmDeviceType.VNC, getParameters().getIds()); setReturnValue(result); } private void mapDevices(Map<Guid, List<GraphicsDevice>> result, VmDeviceType type, List<Guid> vmsIds) { log.debug("Retrieving graphics devices '{}' for '{}' vms", type.getName(), vmsIds.size()); List<VmDevice> devicesList = vmDeviceDao.getVmDeviceByTypeAndDevice(vmsIds, VmDeviceGeneralType.GRAPHICS, type.getName(), getUserID(), getParameters().isFiltered()); for (VmDevice device : devicesList) { result.computeIfAbsent(device.getVmId(), guid -> new ArrayList<>()).add(new GraphicsDevice(device)); } } }