package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.UriInfo; import org.ovirt.engine.core.common.action.AddVmInterfaceParameters; import org.ovirt.engine.core.common.action.RemoveVmInterfaceParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network; import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider; import org.ovirt.engine.api.common.util.DetailHelper; import org.ovirt.engine.api.common.util.LinkHelper; import org.ovirt.engine.api.model.NIC; import org.ovirt.engine.api.model.Nics; import org.ovirt.engine.api.model.Statistic; import org.ovirt.engine.api.model.Statistics; import org.ovirt.engine.api.resource.DeviceResource; import org.ovirt.engine.api.resource.DevicesResource; public class BackendVmNicsResource extends BackendNicsResource implements DevicesResource<NIC, Nics>{ public BackendVmNicsResource(Guid parentId) { super(parentId, VdcQueryType.GetVmInterfacesByVmId, new GetVmByVmIdParameters(parentId), VdcActionType.AddVmInterface, VdcActionType.RemoveVmInterface, VdcActionType.UpdateVmInterface); } @Override protected ParametersProvider<NIC, VmNetworkInterface> getUpdateParametersProvider() { return new UpdateParametersProvider(); } protected class UpdateParametersProvider implements ParametersProvider<NIC, VmNetworkInterface> { @Override public VdcActionParametersBase getParameters(NIC incoming, VmNetworkInterface entity) { return new AddVmInterfaceParameters(parentId, map(incoming, entity)); } } @Override protected NIC populate(NIC model, VmNetworkInterface entity) { return addStatistics(model, entity, uriInfo, httpHeaders); } NIC addStatistics(NIC model, VmNetworkInterface entity, UriInfo ui, HttpHeaders httpHeaders) { if (DetailHelper.include(httpHeaders, "statistics")) { model.setStatistics(new Statistics()); NicStatisticalQuery query = new NicStatisticalQuery(newModel(model.getId())); List<Statistic> statistics = query.getStatistics(entity); for (Statistic statistic : statistics) { LinkHelper.addLinks(ui, statistic, query.getParentType()); } model.getStatistics().getStatistics().addAll(statistics); } return model; } @Override protected VdcActionParametersBase getAddParameters(VmNetworkInterface entity, NIC nic) { return new AddVmInterfaceParameters(parentId, setNetwork(nic, entity)); } @Override protected VdcActionParametersBase getRemoveParameters(String id) { return new RemoveVmInterfaceParameters(parentId, asGuid(id)); } @Override @SingleEntityResource public DeviceResource<NIC> getDeviceSubResource(String id) { return inject(new BackendVmNicResource(id, this, updateType, getUpdateParametersProvider(), getRequiredUpdateFields(), subCollections)); } @Override protected VmNetworkInterface setNetwork(NIC device, VmNetworkInterface ni) { if (device.isSetNetwork()) { Guid clusterId = getClusterId(); network net = lookupClusterNetwork(clusterId, device.getNetwork().isSetId() ? asGuid(device.getNetwork().getId()) : null, device.getNetwork().getName()); if (net != null) { ni.setNetworkName(net.getname()); } } return ni; } @Override protected Guid getClusterId() { Guid clusterId = getEntity(VM.class, VdcQueryType.GetVmByVmId, new GetVmByVmIdParameters(parentId), "id").getvds_group_id(); return clusterId; } }