package org.opennaas.extensions.ofertie.ncl.provisioner.api;
import java.util.Collection;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.opennaas.extensions.ofertie.ncl.provisioner.api.exceptions.FlowAllocationException;
import org.opennaas.extensions.ofertie.ncl.provisioner.api.exceptions.FlowNotFoundException;
import org.opennaas.extensions.ofertie.ncl.provisioner.api.exceptions.ProvisionerException;
import org.opennaas.extensions.ofertie.ncl.provisioner.api.model.Flow;
import org.opennaas.extensions.ofertie.ncl.provisioner.api.model.FlowRequest;
/**
*
* @author Isart Canyameres Gimenez (i2cat)
*
*/
@Path("/flows")
public interface INCLProvisioner {
/**
* Allocates a flow.
*
* @param flowRequest
* @return flowId of allocated flow
* @throws AllocationException
* @throws ProvisionerException
*/
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public String allocateFlow(FlowRequest flowRequest) throws FlowAllocationException, ProvisionerException;
/**
* Updates already allocated flow having flowId. May cause re-allocating the flow.
*
* @param flowId
* of flow to update
* @param updatedFlowRequest
* @return flowId of allocated flow
* @throws AllocationException
* @throws FlowNotFoundException
* @throws ProvisionerException
*/
@Path("/{id}")
@PUT
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public String updateFlow(@PathParam("id") String flowId, FlowRequest updatedFlowRequest) throws FlowAllocationException, FlowNotFoundException,
ProvisionerException;
/**
* Deallocates an allocated flow.
*
* @param flowId
* id of flow to deallocate
* @throws FlowNotFoundException
* @throws ProvisionerException
*/
@Path("/{id}")
@DELETE
public void deallocateFlow(@PathParam("id") String flowId) throws FlowNotFoundException, ProvisionerException;
/**
* Returns currently allocated flows.
*
* @return Currently allocated flows
* @throws ProvisionerException
*/
@GET
@Produces(MediaType.APPLICATION_XML)
public Collection<Flow> readAllocatedFlows() throws ProvisionerException;
}