{
          put(
              ROOT_APPLICATION_COLLECTION_FOR_USER_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer
                      .GetRootApplicationCollectionForUserRequest.newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.CatalogCollectionResponse
                      .newBuilder()));

          put(
              ROOT_PARTITION_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer
                      .GetRootPartitionCollectionRequest.newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.CatalogCollectionResponse
                      .newBuilder()));

          put(
              ROOT_USER_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.GetUserRootCollectionRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.CatalogCollectionResponse
                      .newBuilder()));

          put(
              GET_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.GetCollectionRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.CatalogCollectionResponse
                      .newBuilder()));

          put(
              ADD_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.AddCollectionRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.CatalogCollectionResponse
                      .newBuilder()));

          put(
              SHARE_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.ShareCollectionRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.Response.newBuilder()));

          put(
              SHARE_REFERENCE_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.ShareReferenceRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.Response.newBuilder()));

          put(
              DELETE_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.DeleteCatalogCollectionRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.Response.newBuilder()));

          put(
              GET_REFERENCE_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.GetReferenceRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ReferenceResponse
                      .newBuilder()));

          put(
              ADD_DOCUMENT_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.AddDocumentRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ReferenceResponse
                      .newBuilder()));

          put(
              DELETE_REFERENCE_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.DeleteReferenceRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.Response.newBuilder()));

          put(
              MODIFY_COLLECTION_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.ModifyCatalogCollectionRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.CatalogCollectionResponse
                      .newBuilder()));

          put(
              MODIFY_REFERENCE_REQUEST,
              new RequestResponse(
                  com.c9a.buffers.CatalogServiceRequestProtocalBuffer.ModifyReferenceRequest
                      .newBuilder(),
                  com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ReferenceResponse
                      .newBuilder()));
        }
  @RequestMapping(
      value = SHARE_COLLECTION_REQUEST,
      method = {RequestMethod.POST})
  public void shareCollection(
      HttpServletRequest request,
      HttpServletResponse response,
      @RequestParam(value = "api", required = false) boolean api)
      throws IOException {

    if (apiRequested(response, api, SHARE_COLLECTION_REQUEST)) return;

    com.c9a.buffers.CatalogServiceRequestProtocalBuffer.ShareCollectionRequest
        shareCollectionForUserRequest =
            com.c9a.buffers.CatalogServiceRequestProtocalBuffer.ShareCollectionRequest.parseFrom(
                GoogleProtoclBufferRequestContentUtils.getContentForRequest(request));

    try {
      Map<String, String> userAndPartitionsToShareWith =
          createNewMap(shareCollectionForUserRequest.getUsersAndPartitionsToShareWithList());
      Set<Long> sharePermissionIds =
          createPermissionListFromProtoBufEnumList(
              shareCollectionForUserRequest.getPermissionsList());
      catalogService.shareCollection(
          shareCollectionForUserRequest.getUserId(),
          shareCollectionForUserRequest.getPartitionId(),
          shareCollectionForUserRequest.getApplicationName(),
          shareCollectionForUserRequest.getCollectionUniqueId(),
          userAndPartitionsToShareWith,
          sharePermissionIds);
      CatalogGPBUtils.generateResponseProtoBuf(
              com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ResponseCode.SUCCESS, "")
          .build()
          .writeTo(response.getOutputStream());
      return;
    } catch (CollectionNotFoundException e) {
      CatalogGPBUtils.generateResponseProtoBuf(
              com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ResponseCode
                  .COLLECTION_NOT_FOUND,
              "The collection was not found with the give unique id : "
                  + shareCollectionForUserRequest.getCollectionUniqueId())
          .build()
          .writeTo(response.getOutputStream());
      return;
    } catch (CollectionSharingException e) {
      CatalogGPBUtils.generateResponseProtoBuf(
              com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ResponseCode
                  .COLLECTION_CAN_NOT_BE_SHARED,
              "The collection does not have the needed permissions to be shared.")
          .build()
          .writeTo(response.getOutputStream());
      return;
    } catch (InvalidCatalogNameException e) {
      CatalogGPBUtils.generateResponseProtoBuf(
              com.c9a.buffers.CatalogServiceResponseProtocalBuffer.ResponseCode
                  .CATALOG_NAME_INVALID,
              "Invalid catalog name.")
          .build()
          .writeTo(response.getOutputStream());
      return;
    }
  }