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.NetworkAttachment; import org.ovirt.engine.api.model.NetworkAttachments; import org.ovirt.engine.api.resource.NetworkAttachmentsResource; import org.ovirt.engine.core.common.action.NetworkAttachmentParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public abstract class AbstractBackendNetworkAttachmentsResource extends AbstractBackendCollectionResource<NetworkAttachment, org.ovirt.engine.core.common.businessentities.network.NetworkAttachment> implements NetworkAttachmentsResource { private Guid hostId; protected AbstractBackendNetworkAttachmentsResource(Guid hostId) { super(NetworkAttachment.class, org.ovirt.engine.core.common.businessentities.network.NetworkAttachment.class); this.hostId = hostId; } public Guid getHostId() { return hostId; } @Override public NetworkAttachments list() { verifyIfHostExistsToHandle404StatusCode(); return mapCollection(getNetworkAttachments()); } protected void verifyIfHostExistsToHandle404StatusCode() { Guid hostId = getHostId(); //verify if host exists to handle 404 status code. getEntity(VDS.class, VdcQueryType.GetVdsByVdsId, new IdQueryParameters(hostId), hostId.toString(), true); } @Override public Response add(NetworkAttachment attachment) { validateParameters(attachment, "network.id|name"); org.ovirt.engine.core.common.businessentities.network.NetworkAttachment networkAttachment = map(attachment); NetworkAttachmentParameters params = new NetworkAttachmentParameters(hostId, networkAttachment); return performCreate(VdcActionType.AddNetworkAttachment, params, new QueryIdResolver<Guid>(VdcQueryType.GetNetworkAttachmentById, IdQueryParameters.class)); } @Override protected NetworkAttachment addLinks(NetworkAttachment model, Class<? extends BaseResource> suggestedParent, String... excludeSubCollectionMembers) { return super.addLinks(model, getParentClass()); } protected abstract Class<? extends BaseResource> getParentClass(); protected abstract List<org.ovirt.engine.core.common.businessentities.network.NetworkAttachment> getNetworkAttachments(); private NetworkAttachments mapCollection(List<org.ovirt.engine.core.common.businessentities.network.NetworkAttachment> networkAttachments) { NetworkAttachments collection = new NetworkAttachments(); for (org.ovirt.engine.core.common.businessentities.network.NetworkAttachment networkAttachmentEntity : networkAttachments) { NetworkAttachment networkAttachmentModel = populate(map(networkAttachmentEntity), networkAttachmentEntity); collection.getNetworkAttachments().add(addLinks(networkAttachmentModel, getParentClass())); } return collection; } }