use of org.apache.wicket.ajax.json.JSONObject in project webanno by webanno.
the class RemoteApiController method annotationDocumentList.
/**
* List annotation documents for a source document in a projects where user is ADMIN
*
* Test when running in Eclipse: Open your browser, paste following URL with appropriate values:
*
* http://USERNAME:PASSWORD@localhost:8080/webanno-webapp/api/projects/{aProjectId}/sourcedocs/{
* aSourceDocumentId}/annos
*
* @param aProjectId
* {@link Project} ID
* @param aSourceDocumentId
* {@link SourceDocument} ID
* @return JSON string of all the annotation documents with their projects.
* @throws Exception
* if there was an error.
*/
@RequestMapping(value = "/" + PROJECTS + "/{" + PARAM_PROJECT_ID + "}/" + DOCUMENTS + "/{" + PARAM_DOCUMENT_ID + "}/" + ANNOTATIONS, method = RequestMethod.GET)
public ResponseEntity<String> annotationDocumentList(@PathVariable(PARAM_PROJECT_ID) long aProjectId, @PathVariable(PARAM_DOCUMENT_ID) long aSourceDocumentId) 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 project
Project project;
try {
project = projectRepository.getProject(aProjectId);
} catch (NoResultException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Project [" + aProjectId + "] not found.");
}
// Check for the access
boolean hasAccess = SecurityUtil.isProjectAdmin(project, projectRepository, user) || SecurityUtil.isSuperAdmin(projectRepository, user);
if (!hasAccess) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("User [" + username + "] is not allowed to access project [" + aProjectId + "]");
}
// Get source document
SourceDocument srcDocument;
try {
srcDocument = documentRepository.getSourceDocument(aProjectId, aSourceDocumentId);
} catch (NoResultException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Source document [" + aSourceDocumentId + "] not found in project [" + aProjectId + "] not found.");
}
List<AnnotationDocument> annList = documentRepository.listAllAnnotationDocuments(srcDocument);
JSONArray annDocArr = new JSONArray();
for (AnnotationDocument annDoc : annList) {
if (annDoc.getState().equals(AnnotationDocumentState.FINISHED) || annDoc.getState().equals(AnnotationDocumentState.IN_PROGRESS)) {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ssZ");
JSONObject annDocObj = new JSONObject();
annDocObj.put("user", annDoc.getUser());
annDocObj.put("state", annDoc.getState().getId());
if (annDoc.getTimestamp() != null) {
annDocObj.put("timestamp", sdf.format(annDoc.getTimestamp()));
}
annDocArr.put(annDocObj);
}
}
JSONObject returnJSON = new JSONObject();
returnJSON.put(srcDocument.getName(), annDocArr);
return ResponseEntity.ok(returnJSON.toString());
}
use of org.apache.wicket.ajax.json.JSONObject in project webanno by webanno.
the class RemoteApiController method sourceDocumentCreate.
/**
* Upload a source document into project where user has "ADMIN" role
*
* Test when running in Eclipse, use the Linux "curl" command.
*
* curl -v -F 'file=@test.txt' -F 'filetype=text'
* 'http://USERNAME:PASSWORD@localhost:8080/webanno-webapp/api/projects/{aProjectId}/sourcedocs/
* '
*
* @param aFile
* File for {@link SourceDocument}.
* @param aProjectId
* {@link Project} id.
* @param aFileType
* Extension of the file.
* @return returns JSON string with id to the created source document.
* @throws Exception
* if there was an error.
*/
@RequestMapping(value = "/" + PROJECTS + "/{" + PARAM_PROJECT_ID + "}/" + DOCUMENTS, method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<String> sourceDocumentCreate(@RequestParam(PARAM_FILE) MultipartFile aFile, @RequestParam(PARAM_FILETYPE) String aFileType, @PathVariable(PARAM_PROJECT_ID) long aProjectId) 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 project
Project project;
try {
project = projectRepository.getProject(aProjectId);
} catch (NoResultException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Project [" + aProjectId + "] not found.");
}
// Check for the access
boolean hasAccess = SecurityUtil.isProjectAdmin(project, projectRepository, user) || SecurityUtil.isSuperAdmin(projectRepository, user);
if (!hasAccess) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("User [" + username + "] is not allowed to access project [" + aProjectId + "]");
}
// Existing project
if (documentRepository.existsSourceDocument(project, aFile.getOriginalFilename())) {
return ResponseEntity.status(HttpStatus.CONFLICT).body("A document with name [" + aFile.getOriginalFilename() + "] already exists");
}
// Check if file already present or not
try (InputStream is = aFile.getInputStream()) {
uploadSourceDocumentFile(is, aFile.getOriginalFilename(), project, aFileType);
}
// add id of added source document in return json string
JSONObject returnJSON = new JSONObject();
returnJSON.put("id", documentRepository.getSourceDocument(project, aFile.getOriginalFilename()).getId());
return ResponseEntity.ok(returnJSON.toString());
}
use of org.apache.wicket.ajax.json.JSONObject 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 org.apache.wicket.ajax.json.JSONObject 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());
}
use of org.apache.wicket.ajax.json.JSONObject in project webanno by webanno.
the class RemoteApiController method sourceDocumentList.
/**
* Show source documents in given project where user has ADMIN access
*
* http://USERNAME:PASSWORD@localhost:8080/webanno-webapp/api/projects/{aProjectId}/sourcedocs
*
* @param aProjectId the project ID
* @return JSON with {@link SourceDocument} : id
*/
@RequestMapping(value = "/" + PROJECTS + "/{" + PARAM_PROJECT_ID + "}/" + DOCUMENTS, method = RequestMethod.GET)
public ResponseEntity<String> sourceDocumentList(@PathVariable(PARAM_PROJECT_ID) long aProjectId) 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 project
Project project;
try {
project = projectRepository.getProject(aProjectId);
} catch (NoResultException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Project [" + aProjectId + "] not found.");
}
// Check for the access
boolean hasAccess = SecurityUtil.isProjectAdmin(project, projectRepository, user) || SecurityUtil.isSuperAdmin(projectRepository, user);
if (!hasAccess) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("User [" + username + "] is not allowed to access project [" + aProjectId + "]");
}
List<SourceDocument> srcDocumentList = documentRepository.listSourceDocuments(project);
JSONArray sourceDocumentJSONArr = new JSONArray();
for (SourceDocument s : srcDocumentList) {
JSONObject sourceDocumentJSONObj = new JSONObject();
sourceDocumentJSONObj.put("id", s.getId());
sourceDocumentJSONObj.put("name", s.getName());
sourceDocumentJSONObj.put("state", s.getState());
sourceDocumentJSONArr.put(sourceDocumentJSONObj);
}
return ResponseEntity.ok(sourceDocumentJSONArr.toString());
}
Aggregations