/**
  * Create a signup specifying the user.
  *
  * @param userId The ID of the user to be signed up. If <code>null</code> the we use the email
  *     address to lookup user. If the string "newUser" is supplied we attempt to create a new user
  *     anyway (deprecated).
  * @param userName The name of the user if we are creating a new user.
  * @param userEmail The email address of the user.
  * @param courseId The course ID to sign up to. Cannot be <code>null</code>.
  * @param components The components IDs to sign up to. Cannot be <code>null</code>.
  * @param supervisorId The ID of the supervisor to link the signups to. Can be <code>null</code>.
  * @return The created CourseSignup.
  * @see CourseSignupService#signup(String, String, String, String, java.util.Set, String)
  */
 @Path("/new")
 @POST
 @Produces(MediaType.APPLICATION_JSON)
 public Response signup(
     @FormParam("userId") String userId,
     @FormParam("userName") String userName,
     @FormParam("userEmail") String userEmail,
     @FormParam("courseId") String courseId,
     @FormParam("components") Set<String> components,
     @FormParam("supervisorId") String supervisorId) {
   checkAuthenticated();
   // Support old idea of a special ID for new users.
   // When the frontend is refactored this can be removed.
   if ("newUser".equals(userId)) {
     userId = null;
   }
   CourseSignup signup =
       courseService.signup(userId, userName, userEmail, courseId, components, supervisorId);
   return Response.status(Response.Status.CREATED).entity(signup).build();
 }
 /**
  * Make a new signup for the current user.
  *
  * @param courseId the courseId of the signup
  * @param components the components to sign up to
  * @param email the email of the supervisor
  * @param message the reason for the signup
  * @param specialReq any special requirements
  * @return CourseSignup the coursesignup object created
  */
 @Path("/my/new")
 @POST
 @Produces(MediaType.APPLICATION_JSON)
 public Response signup(
     @FormParam("courseId") String courseId,
     @FormParam("components") Set<String> components,
     @FormParam("email") String email,
     @FormParam("message") String message,
     @FormParam("specialReq") String specialReq) {
   checkAuthenticated();
   try {
     CourseSignup entity = courseService.signup(courseId, components, email, message, specialReq);
     ResponseBuilder builder = Response.status(Response.Status.CREATED);
     builder.entity(entity);
     return builder.build();
   } catch (IllegalStateException e) {
     throw new WebAppBadRequestException(new FailureMessage(e.getMessage()));
   } catch (IllegalArgumentException e) {
     throw new WebAppBadRequestException(new FailureMessage(e.getMessage()));
   }
 }