class RUploadHandler extends UploadHandlerSupport {

  @Override
  public UploadResponse handle(final Repository repository, final ComponentUpload upload) throws IOException {
    final AssetUpload assetUpload = upload.getAssetUploads().get(0);
    final PartPayload payload = assetUpload.getPayload();
    final Map<String, String> fields = assetUpload.getFields();
    final String uploadPath = removeInitialSlashFromPath(fields.get(PATH_ID));
    final String assetPath = buildPath(uploadPath, payload.getName());

    ensurePermitted(repository.getName(), RFormat.NAME, assetPath, Collections.emptyMap());
    validateArchiveUploadPath(assetPath);

    try {
      UnitOfWork.begin(repository.facet(StorageFacet.class).txSupplier());
      Asset asset = repository.facet(RHostedFacet.class).upload(assetPath, payload);
      return new UploadResponse(asset);
    }
    finally {
      UnitOfWork.end();
    }
  }

  @Inject public  RUploadHandler(@Named("simple") final VariableResolverAdapter variableResolverAdapter,
                        final ContentPermissionChecker contentPermissionChecker,
                        final Set<UploadDefinitionExtension> uploadDefinitionExtensions);

}