package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.HostNic; import org.ovirt.engine.api.resource.NetworkAttachmentResource; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendHostNicNetworkAttachmentsResource extends AbstractBackendNetworkAttachmentsResource { private Guid nicId; public BackendHostNicNetworkAttachmentsResource(Guid nicId, Guid hostId) { super(hostId); this.nicId = nicId; } @Override public NetworkAttachmentResource getAttachmentResource(String id) { return inject(new BackendHostNicNetworkAttachmentResource(id, this)); } protected List<NetworkAttachment> getNetworkAttachments() { verifyHostAndNicExistence(); return getBackendCollection(VdcQueryType.GetNetworkAttachmentsByHostNicId, new IdQueryParameters(nicId)); } protected void verifyHostAndNicExistence() { verifyHostExistenceToHandle404StatusCode(); verifyNicExistenceToHandle404StatusCode(); } private void verifyHostExistenceToHandle404StatusCode() { Guid hostId = getHostId(); getEntity(VDS.class, VdcQueryType.GetVdsByVdsId, new IdQueryParameters(hostId), hostId.toString(), true); } private void verifyNicExistenceToHandle404StatusCode() { List<VdsNetworkInterface> hostInterfaces = getBackendCollection(VdsNetworkInterface.class, VdcQueryType.GetVdsInterfacesByVdsId, new IdQueryParameters(getHostId())); boolean found = false; for (VdsNetworkInterface hostInterface : hostInterfaces) { if (hostInterface.getId().equals(nicId)) { found = true; break; } } if (!found) { notFound(VdsNetworkInterface.class); } } @Override protected Class<? extends BaseResource> getParentClass() { return HostNic.class; } @Override protected org.ovirt.engine.api.model.NetworkAttachment addParents(org.ovirt.engine.api.model.NetworkAttachment model) { model.setHostNic(new HostNic()); model.getHostNic().setId(nicId.toString()); model.getHostNic().setHost(new Host()); model.getHostNic().getHost().setId(getHostId().toString()); return model; } @Override public Response add(org.ovirt.engine.api.model.NetworkAttachment attachment) { verifyHostAndNicExistence(); if (attachment.isSetHostNic()) { Guid hostNicGuid = Guid.createGuidFromString(attachment.getHostNic().getId()); if (!nicId.equals(hostNicGuid)) { //TODO MM: add message. return Response.status(Response.Status.BAD_REQUEST).build(); } } else { HostNic hostNIC = new HostNic(); hostNIC.setId(nicId.toString()); attachment.setHostNic(hostNIC); } return super.add(attachment); } }