@Path("/{containerName}/delete/pool/{poolName}")
  @DELETE
  @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  @StatusCodes({
    @ResponseCode(code = 200, condition = "Pool deleted successfully"),
    @ResponseCode(code = 404, condition = "The containerName not found"),
    @ResponseCode(code = 503, condition = "Load balancer service is unavailable"),
    @ResponseCode(code = 404, condition = "Pool not found"),
    @ResponseCode(code = 500, condition = "Failed to delete Pool")
  })
  public Response deletePool(
      @PathParam(value = "containerName") String containerName,
      @PathParam(value = "poolName") String poolName) {

    if (poolName.isEmpty())
      throw new UnsupportedMediaTypeException(RestMessages.INVALIDDATA.toString());

    IConfigManager configManager = getConfigManagerService(containerName);
    if (configManager == null) {
      throw new ServiceUnavailableException(
          "Load Balancer" + RestMessages.SERVICEUNAVAILABLE.toString());
    }

    if (!configManager.poolExists(poolName))
      throw new ResourceNotFoundException(NBConst.RES_POOL_NOT_FOUND);

    for (Pool pool : configManager.getAllPools()) {
      if (pool.getName().equals(poolName)) {
        configManager.deletePool(poolName);
        return Response.ok().build();
      }
    }
    throw new InternalServerErrorException(NBConst.RES_POOL_DELETION_FAILED);
  }
  @Path("/{containerName}/create/poolmember")
  @POST
  @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  @StatusCodes({
    @ResponseCode(code = 201, condition = "Pool member created successfully"),
    @ResponseCode(code = 404, condition = "The containerName not found"),
    @ResponseCode(code = 503, condition = "Load balancer service is unavailable"),
    @ResponseCode(code = 404, condition = "Pool not found"),
    @ResponseCode(code = 409, condition = "Pool member already exist"),
    @ResponseCode(code = 415, condition = "Invalid input data")
  })
  public Response addPoolMember(
      @PathParam("containerName") String containerName,
      @TypeHint(PoolMember.class) PoolMember inPoolMember) {

    PoolMember pmInput = inPoolMember;
    String name = pmInput.getName();
    String memberIP = pmInput.getIp();
    String poolName = pmInput.getPoolName();

    if (name.isEmpty() || memberIP.isEmpty() || poolName.isEmpty()) {
      throw new UnsupportedMediaTypeException(RestMessages.INVALIDDATA.toString());
    }

    IConfigManager configManager = getConfigManagerService(containerName);
    if (configManager == null) {
      throw new ServiceUnavailableException(
          "Load Balancer " + RestMessages.SERVICEUNAVAILABLE.toString());
    }

    if (!configManager.poolExists(poolName))
      throw new ResourceNotFoundException(NBConst.RES_POOL_NOT_FOUND);

    if (!configManager.memberExists(name, memberIP, poolName)) {

      PoolMember poolMember = configManager.addPoolMember(name, memberIP, poolName);
      if (poolMember != null) {
        return Response.status(Response.Status.CREATED).build();
      }
    } else {
      throw new ResourceConflictException(NBConst.RES_POOLMEMBER_ALREADY_EXIST);
    }
    throw new InternalServerErrorException(NBConst.RES_POOLMEMBER_CREATION_FAILED);
  }
  @Path("/{containerName}/vips")
  @GET
  @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  @TypeHint(VIPs.class)
  @StatusCodes({
    @ResponseCode(code = 200, condition = "Operation successful"),
    @ResponseCode(code = 404, condition = "The containerName is not found"),
    @ResponseCode(code = 503, condition = "Load balancer service is unavailable")
  })
  public VIPs getAllVIPs(@PathParam("containerName") String containerName) {

    IConfigManager configManager = getConfigManagerService(containerName);
    if (configManager == null) {
      throw new ServiceUnavailableException(
          "Load Balancer " + RestMessages.SERVICEUNAVAILABLE.toString());
    }

    return new VIPs(configManager.getAllVIPs());
  }
  @Path("/{containerName}/create/vip")
  @POST
  @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  @StatusCodes({
    @ResponseCode(code = 201, condition = "VIP created successfully"),
    @ResponseCode(code = 404, condition = "The Container Name not found"),
    @ResponseCode(code = 503, condition = "Load balancer service is unavailable"),
    @ResponseCode(code = 409, condition = "VIP already exist"),
    @ResponseCode(code = 415, condition = "Invalid input data")
  })
  public Response addVIP(
      @PathParam("containerName") String containerName, @TypeHint(VIP.class) VIP inVIP) {

    VIP vipInput = inVIP;
    String name = vipInput.getName();
    String ip = vipInput.getIp();
    String protocol = vipInput.getProtocol();
    short protocolPort = vipInput.getPort();
    String poolName = vipInput.getPoolName();
    if (name.isEmpty() || ip.isEmpty() || protocol.isEmpty() || protocolPort < 0) {
      throw new UnsupportedMediaTypeException(RestMessages.INVALIDDATA.toString());
    }

    IConfigManager configManager = getConfigManagerService(containerName);

    if (configManager == null) {
      throw new ServiceUnavailableException(
          "Load Balancer " + RestMessages.SERVICEUNAVAILABLE.toString());
    }

    if (!configManager.vipExists(name, ip, protocol, protocolPort, poolName)) {

      VIP vip = configManager.createVIP(name, ip, protocol, protocolPort, poolName);
      if (vip != null) {
        return Response.status(Response.Status.CREATED).build();
      }
    } else {
      throw new ResourceConflictException(NBConst.RES_VIP_ALREADY_EXIST);
    }
    throw new InternalServerErrorException(NBConst.RES_VIP_CREATION_FAILED);
  }
  @Path("/{containerName}/update/vip")
  @PUT
  @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  @StatusCodes({
    @ResponseCode(code = 201, condition = "VIP updated successfully"),
    @ResponseCode(code = 404, condition = "The containerName not found"),
    @ResponseCode(code = 503, condition = "VIP not found"),
    @ResponseCode(code = 404, condition = "Pool not found"),
    @ResponseCode(code = 405, condition = "Pool already attached to the VIP"),
    @ResponseCode(code = 415, condition = "Invalid input name")
  })
  public Response updateVIP(
      @PathParam("containerName") String containerName, @TypeHint(VIP.class) VIP inVIP) {

    VIP vipInput = inVIP;
    String name = vipInput.getName();
    String poolName = vipInput.getPoolName();
    if (name.isEmpty() || poolName.isEmpty()) {
      throw new UnsupportedMediaTypeException(RestMessages.INVALIDDATA.toString());
    }

    IConfigManager configManager = getConfigManagerService(containerName);
    if (configManager == null) {
      throw new ServiceUnavailableException(
          "Load Balancer " + RestMessages.SERVICEUNAVAILABLE.toString());
    }

    if (!configManager.poolExists(poolName))
      throw new ResourceNotFoundException(NBConst.RES_POOL_NOT_FOUND);

    if (configManager.getVIPAttachedPool(name) != null)
      throw new MethodNotAllowedException(NBConst.RES_VIP_POOL_EXIST);

    if (configManager.updateVIP(name, poolName) != null)
      return Response.status(Response.Status.ACCEPTED).build();

    throw new InternalServerErrorException(NBConst.RES_VIP_UPDATE_FAILED);
  }