use of de.tudarmstadt.ukp.clarin.webanno.webapp.remoteapi.aero.exception.ObjectExistsException in project webanno by webanno.
the class AeroRemoteApiController method projectCreate.
@ApiOperation(value = "Create a new project")
@ApiImplicitParams({ @ApiImplicitParam(name = PARAM_NAME, paramType = "form", required = true), @ApiImplicitParam(name = PARAM_CREATOR, paramType = "form") })
@//
RequestMapping(//
value = ("/" + PROJECTS), //
method = RequestMethod.POST, //
consumes = MULTIPART_FORM_DATA_VALUE, produces = APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<RResponse<RProject>> projectCreate(@RequestParam(PARAM_NAME) String aName, @RequestParam(PARAM_CREATOR) Optional<String> aCreator, UriComponentsBuilder aUcb) throws Exception {
// Get current user - this will throw an exception if the current user does not exit
User user = getCurrentUser();
// Check for the access
assertPermission("User [" + user.getUsername() + "] is not allowed to create projects", userRepository.isProjectCreator(user) || userRepository.isAdministrator(user));
// Check if the user can create projects for another user
assertPermission("User [" + user.getUsername() + "] is not allowed to create projects for user [" + aCreator.orElse("<unspecified>") + "]", userRepository.isAdministrator(user) || (aCreator.isPresent() && aCreator.get().equals(user.getUsername())));
// Existing project
if (projectService.existsProject(aName)) {
throw new ObjectExistsException("A project with name [" + aName + "] already exists");
}
// Create the project and initialize tags
LOG.info("Creating project [" + aName + "]");
Project project = new Project();
project.setName(aName);
project.setMode(WebAnnoConst.PROJECT_TYPE_ANNOTATION);
project.setScriptDirection(ScriptDirection.LTR);
project.setState(ProjectState.NEW);
projectService.createProject(project);
projectService.initializeProject(project);
// Create permission for the project creator
String owner = aCreator.isPresent() ? aCreator.get() : user.getUsername();
projectService.createProjectPermission(new ProjectPermission(project, owner, PermissionLevel.MANAGER));
projectService.createProjectPermission(new ProjectPermission(project, owner, PermissionLevel.CURATOR));
projectService.createProjectPermission(new ProjectPermission(project, owner, PermissionLevel.ANNOTATOR));
RResponse<RProject> response = new RResponse<>(new RProject(project));
return ResponseEntity.created(aUcb.path(API_BASE + "/" + PROJECTS + "/{id}").buildAndExpand(project.getId()).toUri()).body(response);
}
Aggregations