use of de.tudarmstadt.ukp.clarin.webanno.model.ProjectPermission in project webanno by webanno.
the class UserSelectionPanel method makeUserChoiceRenderer.
private IChoiceRenderer<User> makeUserChoiceRenderer() {
return new ChoiceRenderer<User>() {
private static final long serialVersionUID = 4607720784161484145L;
@Override
public Object getDisplayValue(User aObject) {
List<ProjectPermission> projectPermissions = projectRepository.listProjectPermissionLevel(aObject, projectModel.getObject());
List<String> permissionLevels = new ArrayList<>();
for (ProjectPermission projectPermission : projectPermissions) {
permissionLevels.add(projectPermission.getLevel().getName());
}
return aObject.getUsername() + " " + permissionLevels + (aObject.isEnabled() ? "" : " (login disabled)");
}
};
}
use of de.tudarmstadt.ukp.clarin.webanno.model.ProjectPermission in project webanno by webanno.
the class ProjectServiceImpl method createProjectPermission.
/**
* Create {@link ProjectPermission} from the exported
* {@link de.tudarmstadt.ukp.clarin.webanno.export.model.ProjectPermission}
*
* @param aImportedProjectSetting
* the imported project.
* @param aImportedProject
* the project.
* @throws IOException
* if an I/O error occurs.
*/
private void createProjectPermission(de.tudarmstadt.ukp.clarin.webanno.export.model.Project aImportedProjectSetting, Project aImportedProject) throws IOException {
for (de.tudarmstadt.ukp.clarin.webanno.export.model.ProjectPermission importedPermission : aImportedProjectSetting.getProjectPermissions()) {
ProjectPermission permission = new ProjectPermission();
permission.setLevel(importedPermission.getLevel());
permission.setProject(aImportedProject);
permission.setUser(importedPermission.getUser());
createProjectPermission(permission);
}
}
use of de.tudarmstadt.ukp.clarin.webanno.model.ProjectPermission in project webanno by webanno.
the class RemoteApiController method projectCreate.
/**
* Create a new project.
*
* To test when running in Eclipse, use the Linux "curl" command.
*
* curl -v -F 'file=@test.zip' -F 'name=Test' -F 'filetype=tcf'
* 'http://USERNAME:PASSWORD@localhost:8080/webanno-webapp/api/projects'
*
* @param aName
* the name of the project to create.
* @param aFileType
* the type of the files contained in the ZIP. The possible file types are configured
* in the formats.properties configuration file of WebAnno.
* @param aFile
* a ZIP file containing the project data.
* @throws Exception if there was an error.
*/
@RequestMapping(value = ("/" + PROJECTS), method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<String> projectCreate(@RequestParam(PARAM_FILE) MultipartFile aFile, @RequestParam(PARAM_NAME) String aName, @RequestParam(PARAM_FILETYPE) String aFileType) throws Exception {
// Get current user
String username = SecurityContextHolder.getContext().getAuthentication().getName();
User user = userRepository.get(username);
if (user == null) {
return ResponseEntity.badRequest().body("User [" + username + "] not found.");
}
// Check for the access
boolean hasAccess = SecurityUtil.isProjectCreator(projectRepository, user) || SecurityUtil.isSuperAdmin(projectRepository, user);
if (!hasAccess) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("User [" + username + "] is not allowed to create projects");
}
// Existing project
if (projectRepository.existsProject(aName)) {
return ResponseEntity.status(HttpStatus.CONFLICT).body("A project with name [" + aName + "] already exists");
}
// Check archive
try (InputStream is = new BufferedInputStream(aFile.getInputStream())) {
if (!ZipUtils.isZipStream(is)) {
return ResponseEntity.badRequest().body("Invalid ZIP file");
}
}
// Create the project and initialize tags
LOG.info("Creating project [" + aName + "]");
Project project = new Project();
project.setName(aName);
projectRepository.createProject(project);
annotationService.initializeProject(project);
// Create permission for the project creator
projectRepository.createProjectPermission(new ProjectPermission(project, username, PermissionLevel.ADMIN));
projectRepository.createProjectPermission(new ProjectPermission(project, username, PermissionLevel.CURATOR));
projectRepository.createProjectPermission(new ProjectPermission(project, username, PermissionLevel.USER));
// Iterate through all the files in the ZIP
// If the current filename does not start with "." and is in the root folder of the ZIP,
// import it as a source document
File zipFile = File.createTempFile(aFile.getOriginalFilename(), ".zip");
aFile.transferTo(zipFile);
ZipFile zip = new ZipFile(zipFile);
for (Enumeration<?> zipEnumerate = zip.entries(); zipEnumerate.hasMoreElements(); ) {
// Get ZipEntry which is a file or a directory
ZipEntry entry = (ZipEntry) zipEnumerate.nextElement();
// If it is the zip name, ignore it
if ((FilenameUtils.removeExtension(aFile.getOriginalFilename()) + "/").equals(entry.toString())) {
continue;
} else // project meta data
if (entry.toString().replace("/", "").equals((META_INF + "webanno/source-meta-data.properties").replace("/", ""))) {
InputStream zipStream = zip.getInputStream(entry);
projectRepository.savePropertiesFile(project, zipStream, entry.toString());
} else // META-INF/webanno/source-meta-data.properties
if (StringUtils.countMatches(entry.toString(), "/") > 1) {
continue;
} else // ZIP, import it as a source document
if (!FilenameUtils.getExtension(entry.toString()).equals("") && !FilenameUtils.getName(entry.toString()).equals(".")) {
uploadSourceDocument(zip, entry, project, aFileType);
}
}
LOG.info("Successfully created project [" + aName + "] for user [" + username + "]");
JSONObject projectJSON = new JSONObject();
long pId = projectRepository.getProject(aName).getId();
projectJSON.append(aName, pId);
return ResponseEntity.ok(projectJSON.toString());
}
use of de.tudarmstadt.ukp.clarin.webanno.model.ProjectPermission in project webanno by webanno.
the class RemoteApiController method projectList.
/**
* List all the projects for a given user with their roles
*
* Test when running in Eclipse: Open your browser, paste following URL with appropriate values
* for username and password:
*
* http://USERNAME:PASSWORD@localhost:8080/webanno-webapp/api/projects
*
* @return JSON string of project where user has access to and respective roles in the project.
* @throws Exception
* if there was an error.
*/
@RequestMapping(value = ("/" + PROJECTS), method = RequestMethod.GET)
public ResponseEntity<String> projectList() throws Exception {
// Get current user
String username = SecurityContextHolder.getContext().getAuthentication().getName();
User user = userRepository.get(username);
if (user == null) {
return ResponseEntity.badRequest().body("User [" + username + "] not found.");
}
// Get projects with permission
List<Project> accessibleProjects = projectRepository.listAccessibleProjects(user);
// Add permissions for each project into JSON array and store in JSON object
JSONObject returnJSONObj = new JSONObject();
for (Project project : accessibleProjects) {
String projectId = Long.toString(project.getId());
List<ProjectPermission> projectPermissions = projectRepository.listProjectPermissionLevel(user, project);
JSONArray permissionArr = new JSONArray();
JSONObject projectJSON = new JSONObject();
for (ProjectPermission p : projectPermissions) {
permissionArr.put(p.getLevel().getName());
}
projectJSON.put(project.getName(), permissionArr);
returnJSONObj.put(projectId, projectJSON);
}
return ResponseEntity.ok(returnJSONObj.toString());
}
Aggregations