X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnorthbound%2Fnetworkconfiguration%2Fneutron%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetworkconfig%2Fneutron%2Fnorthbound%2FNeutronNetworksNorthbound.java;h=9de5aef5f421eb2436ac73a6dff63e24efcf4c64;hb=c46e223995956f1f759c551163c212947c1e2fb7;hp=c08ee80e24c44f3551d949e0ff607c7264be9167;hpb=97ec40086c461eae4ab2075a11da61fabf755b42;p=controller.git diff --git a/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronNetworksNorthbound.java b/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronNetworksNorthbound.java index c08ee80e24..9de5aef5f4 100644 --- a/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronNetworksNorthbound.java +++ b/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronNetworksNorthbound.java @@ -15,6 +15,7 @@ import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -22,23 +23,29 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.Response; import org.codehaus.enunciate.jaxrs.ResponseCode; import org.codehaus.enunciate.jaxrs.StatusCodes; import org.codehaus.enunciate.jaxrs.TypeHint; + import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware; import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD; import org.opendaylight.controller.networkconfig.neutron.NeutronCRUDInterfaces; import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork; import org.opendaylight.controller.northbound.commons.RestMessages; +import org.opendaylight.controller.northbound.commons.exception.BadRequestException; +import org.opendaylight.controller.northbound.commons.exception.ResourceConflictException; +import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException; import org.opendaylight.controller.northbound.commons.exception.ServiceUnavailableException; import org.opendaylight.controller.sal.utils.ServiceHelper; /** - * Open DOVE Northbound REST APIs for Network.
- * This class provides REST APIs for managing open DOVE internals related to Networks + * Neutron Northbound REST APIs for Network.
+ * This class provides REST APIs for managing neutron Networks * *
*
@@ -57,6 +64,9 @@ import org.opendaylight.controller.sal.utils.ServiceHelper; @Path("/networks") public class NeutronNetworksNorthbound { + @Context + UriInfo uriInfo; + private NeutronNetwork extractFields(NeutronNetwork o, List fields) { return o.extractFields(fields); } @@ -69,7 +79,7 @@ public class NeutronNetworksNorthbound { //@TypeHint(OpenStackNetworks.class) @StatusCodes({ @ResponseCode(code = 200, condition = "Operation successful"), - @ResponseCode(code = 401, condition = "Unauthorized") }) + @ResponseCode(code = 401, condition = "Unauthorized")}) public Response listNetworks( // return fields @QueryParam("fields") List fields, @@ -84,13 +94,13 @@ public class NeutronNetworksNorthbound { @QueryParam("provider_network_type") String queryProviderNetworkType, @QueryParam("provider_physical_network") String queryProviderPhysicalNetwork, @QueryParam("provider_segmentation_id") String queryProviderSegmentationID, - // pagination - @QueryParam("limit") String limit, + // linkTitle + @QueryParam("limit") Integer limit, @QueryParam("marker") String marker, - @QueryParam("page_reverse") String pageReverse + @DefaultValue("false") @QueryParam("page_reverse") Boolean pageReverse // sorting not supported ) { - INeutronNetworkCRUD networkInterface = NeutronCRUDInterfaces.getINeutronNetworkCRUD( this); + INeutronNetworkCRUD networkInterface = NeutronCRUDInterfaces.getINeutronNetworkCRUD(this); if (networkInterface == null) { throw new ServiceUnavailableException("Network CRUD Interface " + RestMessages.SERVICEUNAVAILABLE.toString()); @@ -127,9 +137,16 @@ public class NeutronNetworksNorthbound { } } } - //TODO: apply pagination to results - return Response.status(200).entity( - new NeutronNetworkRequest(ans)).build(); + + if (limit != null && ans.size() > 1) { + // Return a paginated request + NeutronNetworkRequest request = (NeutronNetworkRequest) PaginatedRequestFactory.createRequest(limit, + marker, pageReverse, uriInfo, ans, NeutronNetwork.class); + return Response.status(200).entity(request).build(); + } + + return Response.status(200).entity(new NeutronNetworkRequest(ans)).build(); + } /** @@ -154,7 +171,7 @@ public class NeutronNetworksNorthbound { + RestMessages.SERVICEUNAVAILABLE.toString()); } if (!networkInterface.networkExists(netUUID)) { - return Response.status(404).build(); + throw new ResourceNotFoundException("network UUID does not exist."); } if (fields.size() > 0) { NeutronNetwork ans = networkInterface.getNetwork(netUUID); @@ -189,7 +206,7 @@ public class NeutronNetworksNorthbound { * network ID can't already exist */ if (networkInterface.networkExists(singleton.getID())) { - return Response.status(400).build(); + throw new BadRequestException("network UUID already exists"); } Object[] instances = ServiceHelper.getGlobalInstances(INeutronNetworkAware.class, this, null); @@ -226,10 +243,10 @@ public class NeutronNetworksNorthbound { * already in this bulk request */ if (networkInterface.networkExists(test.getID())) { - return Response.status(400).build(); + throw new BadRequestException("network UUID already exists"); } if (testMap.containsKey(test.getID())) { - return Response.status(400).build(); + throw new BadRequestException("network UUID already exists"); } if (instances != null) { for (Object instance: instances) { @@ -285,10 +302,10 @@ public class NeutronNetworksNorthbound { * network has to exist and only a single delta is supported */ if (!networkInterface.networkExists(netUUID)) { - return Response.status(404).build(); + throw new ResourceNotFoundException("network UUID does not exist."); } if (!input.isSingleton()) { - return Response.status(400).build(); + throw new BadRequestException("only singleton edits supported"); } NeutronNetwork delta = input.getSingleton(); @@ -297,7 +314,7 @@ public class NeutronNetworksNorthbound { */ if (delta.getID() != null || delta.getTenantID() != null || delta.getStatus() != null) { - return Response.status(400).build(); + throw new BadRequestException("attribute edit blocked by Neutron"); } Object[] instances = ServiceHelper.getGlobalInstances(INeutronNetworkAware.class, this, null); @@ -347,10 +364,10 @@ public class NeutronNetworksNorthbound { * network has to exist and not be in use before it can be removed */ if (!networkInterface.networkExists(netUUID)) { - return Response.status(404).build(); + throw new ResourceNotFoundException("network UUID does not exist."); } if (networkInterface.networkInUse(netUUID)) { - return Response.status(409).build(); + throw new ResourceConflictException("Network ID in use"); } NeutronNetwork singleton = networkInterface.getNetwork(netUUID);