private Response getTenantKey(
     final TenantKey key, @Nullable final String keyPostfix, final HttpServletRequest request)
     throws TenantApiException {
   final TenantContext tenantContext = context.createContext(request);
   final String tenantKey = keyPostfix != null ? key.toString() + keyPostfix : key.toString();
   final List<String> values = tenantApi.getTenantValuesForKey(tenantKey, tenantContext);
   final TenantKeyJson result = new TenantKeyJson(tenantKey, values);
   return Response.status(Status.OK).entity(result).build();
 }
 @TimedResource
 @GET
 @Produces(APPLICATION_JSON)
 @ApiOperation(value = "Retrieve a tenant by its API key", response = TenantJson.class)
 @ApiResponses(value = {@ApiResponse(code = 404, message = "Tenant not found")})
 public Response getTenantByApiKey(@QueryParam(QUERY_API_KEY) final String externalKey)
     throws TenantApiException {
   final Tenant tenant = tenantApi.getTenantByApiKey(externalKey);
   return Response.status(Status.OK).entity(new TenantJson(tenant)).build();
 }
 private Response deleteTenantKey(
     final TenantKey key,
     @Nullable final String keyPostfix,
     final String createdBy,
     final String reason,
     final String comment,
     final HttpServletRequest request)
     throws TenantApiException {
   final CallContext callContext = context.createContext(createdBy, reason, comment, request);
   final String tenantKey = keyPostfix != null ? key.toString() + keyPostfix : key.toString();
   tenantApi.deleteTenantKey(tenantKey, callContext);
   return Response.status(Status.OK).build();
 }
 @TimedResource
 @GET
 @Path("/{tenantId:" + UUID_PATTERN + "}")
 @Produces(APPLICATION_JSON)
 @ApiOperation(value = "Retrieve a tenant by id", response = TenantJson.class)
 @ApiResponses(
     value = {
       @ApiResponse(code = 400, message = "Invalid tenantId supplied"),
       @ApiResponse(code = 404, message = "Tenant not found")
     })
 public Response getTenant(@PathParam("tenantId") final String tenantId)
     throws TenantApiException {
   final Tenant tenant = tenantApi.getTenantById(UUID.fromString(tenantId));
   return Response.status(Status.OK).entity(new TenantJson(tenant)).build();
 }
 @TimedResource
 @GET
 @Path("/" + USER_KEY_VALUE + "/{keyName:" + ANYTHING_PATTERN + "}")
 @Produces(APPLICATION_JSON)
 @ApiOperation(value = "Retrieve a per tenant user key/value", response = TenantKeyJson.class)
 @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid tenantId supplied")})
 public Response getUserKeyValue(
     @PathParam("keyName") final String key,
     @javax.ws.rs.core.Context final HttpServletRequest request)
     throws TenantApiException {
   final TenantContext tenantContext = context.createContext(request);
   final List<String> values = tenantApi.getTenantValuesForKey(key, tenantContext);
   final TenantKeyJson result = new TenantKeyJson(key, values);
   return Response.status(Status.OK).entity(result).build();
 }
 @TimedResource
 @DELETE
 @Path("/" + USER_KEY_VALUE + "/{keyName:" + ANYTHING_PATTERN + "}")
 @ApiOperation(value = "Delete  a per tenant user key/value")
 @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid tenantId supplied")})
 public Response deleteUserKeyValue(
     @PathParam("keyName") final String key,
     @HeaderParam(HDR_CREATED_BY) final String createdBy,
     @HeaderParam(HDR_REASON) final String reason,
     @HeaderParam(HDR_COMMENT) final String comment,
     @javax.ws.rs.core.Context final HttpServletRequest request)
     throws TenantApiException {
   final CallContext callContext = context.createContext(createdBy, reason, comment, request);
   tenantApi.deleteTenantKey(key, callContext);
   return Response.status(Status.OK).build();
 }
  private Response insertTenantKey(
      final TenantKey key,
      @Nullable final String keyPostfix,
      final String value,
      final UriInfo uriInfo,
      final String getMethodStr,
      final String createdBy,
      final String reason,
      final String comment,
      final HttpServletRequest request)
      throws TenantApiException {
    final CallContext callContext = context.createContext(createdBy, reason, comment, request);
    final String tenantKey = keyPostfix != null ? key.toString() + keyPostfix : key.toString();
    tenantApi.addTenantKeyValue(tenantKey, value, callContext);

    return uriBuilder.buildResponse(uriInfo, TenantResource.class, getMethodStr, keyPostfix);
  }
 @TimedResource
 @POST
 @Path("/" + USER_KEY_VALUE + "/{keyName:" + ANYTHING_PATTERN + "}")
 @Consumes(TEXT_PLAIN)
 @Produces(APPLICATION_JSON)
 @ApiOperation(value = "Add a per tenant user key/value")
 @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid tenantId supplied")})
 public Response insertUserKeyValue(
     @PathParam("keyName") final String key,
     final String value,
     @HeaderParam(HDR_CREATED_BY) final String createdBy,
     @HeaderParam(HDR_REASON) final String reason,
     @HeaderParam(HDR_COMMENT) final String comment,
     @javax.ws.rs.core.Context final HttpServletRequest request,
     @javax.ws.rs.core.Context final UriInfo uriInfo)
     throws TenantApiException {
   final CallContext callContext = context.createContext(createdBy, reason, comment, request);
   tenantApi.addTenantKeyValue(key, value, callContext);
   return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getUserKeyValue", key);
 }
  @TimedResource
  @POST
  @Consumes(APPLICATION_JSON)
  @Produces(APPLICATION_JSON)
  @ApiOperation(value = "Create a tenant")
  @ApiResponses(value = {@ApiResponse(code = 500, message = "Tenant already exists")})
  public Response createTenant(
      final TenantJson json,
      @HeaderParam(HDR_CREATED_BY) final String createdBy,
      @HeaderParam(HDR_REASON) final String reason,
      @HeaderParam(HDR_COMMENT) final String comment,
      @javax.ws.rs.core.Context final HttpServletRequest request,
      @javax.ws.rs.core.Context final UriInfo uriInfo)
      throws TenantApiException {
    verifyNonNullOrEmpty(json, "TenantJson body should be specified");
    verifyNonNullOrEmpty(
        json.getApiKey(), "TenantJson apiKey needs to be set",
        json.getApiSecret(), "TenantJson apiSecret needs to be set");

    final TenantData data = json.toTenantData();
    final Tenant tenant =
        tenantApi.createTenant(data, context.createContext(createdBy, reason, comment, request));
    return uriBuilder.buildResponse(uriInfo, TenantResource.class, "getTenant", tenant.getId());
  }