package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Vm; import org.ovirt.engine.api.model.Vms; import org.ovirt.engine.api.resource.AffinityGroupVmResource; import org.ovirt.engine.api.resource.AffinityGroupVmsResource; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.scheduling.AffinityGroup; import org.ovirt.engine.core.common.scheduling.parameters.AffinityGroupCRUDParameters; import org.ovirt.engine.core.compat.Guid; public class BackendAffinityGroupVmsResource extends AbstractBackendCollectionResource<Vm, org.ovirt.engine.core.common.businessentities.VM> implements AffinityGroupVmsResource { private final Guid affinityGroupId; public BackendAffinityGroupVmsResource(Guid affinityGroupId) { super(Vm.class, org.ovirt.engine.core.common.businessentities.VM.class); this.affinityGroupId = affinityGroupId; } @Override public Vms list() { Vms vms = new Vms(); AffinityGroup affinityGroup = getEntity(); if (affinityGroup.getVmIds() != null) { for (int i = 0; i < affinityGroup.getVmIds().size(); i++) { Vm vm = new Vm(); vm.setId(affinityGroup.getVmIds().get(i).toString()); vm.setName(affinityGroup.getVmEntityNames().get(i)); vm = addLinks(populate(vm, null)); // remove vm actions, not relevant to this context vm.setActions(null); vms.getVms().add(vm); } } return vms; } @Override public Response add(Vm vm) { AffinityGroup affinityGroup = getEntity(); affinityGroup.getVmIds().add(asGuid(vm.getId())); return performAction(VdcActionType.EditAffinityGroup, new AffinityGroupCRUDParameters(affinityGroup.getId(), affinityGroup)); } @Override protected org.ovirt.engine.core.common.scheduling.AffinityGroup getEntity() { return getEntity(org.ovirt.engine.core.common.scheduling.AffinityGroup.class, VdcQueryType.GetAffinityGroupById, new IdQueryParameters(affinityGroupId), affinityGroupId.toString()); } @Override public AffinityGroupVmResource getVmResource(String id) { return inject(new BackendAffinityGroupVmResource(affinityGroupId, id)); } }