@RvdAuth
  @PUT
  @Path("{name}/upgrade")
  public Response upgradeProject(@PathParam("name") String projectName) {

    // TODO IMPORTANT!!! sanitize the project name!!
    if (!RvdUtils.isEmpty(projectName)) {
      try {
        UpgradeService upgradeService = new UpgradeService(workspaceStorage);
        upgradeService.upgradeProject(projectName);
        logger.info(
            "project '"
                + projectName
                + "' upgraded to version "
                + RvdConfiguration.getRvdProjectVersion());
        // re-build project
        BuildService buildService = new BuildService(workspaceStorage);
        buildService.buildProject(projectName, activeProject);
        logger.info("project '" + projectName + "' built");
        return Response.ok().build();
      } catch (StorageException e) {
        return Response.status(Status.INTERNAL_SERVER_ERROR).build();
      } catch (UpgradeException e) {
        logger.error(e.getMessage(), e);
        return Response.status(Status.INTERNAL_SERVER_ERROR)
            .entity(e.asJson())
            .type(MediaType.APPLICATION_JSON)
            .build();
      }
    } else return Response.status(Status.BAD_REQUEST).build();
  }
 @PostConstruct
 void init() {
   rvdContext = new RvdContext(request, servletContext);
   rvdSettings = rvdContext.getSettings();
   marshaler = rvdContext.getMarshaler();
   workspaceStorage = new WorkspaceStorage(rvdSettings.getWorkspaceBasePath(), marshaler);
   projectService = new ProjectService(rvdContext, workspaceStorage);
 }