diff --git a/pom.xml b/pom.xml index f8a0691fb15ab140541fdb859f9a0ad97cba5627..a86343008d8275dbaedd9bb7a5733469467c6e76 100644 --- a/pom.xml +++ b/pom.xml @@ -68,7 +68,12 @@ spring-security-oauth2-jose - + + org.springdoc + springdoc-openapi-ui + 1.6.9 + + com.fasterxml.jackson.core jackson-databind diff --git a/src/main/java/es/bsc/inb/ades/rest/api/controllers/DocumentController.java b/src/main/java/es/bsc/inb/ades/rest/api/controllers/DocumentController.java deleted file mode 100644 index d1d7d9bcb1d9099729aa64735f19d0b9eee138db..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/controllers/DocumentController.java +++ /dev/null @@ -1,170 +0,0 @@ -package es.bsc.inb.ades.rest.api.controllers; - -import java.security.Principal; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import es.bsc.inb.ades.rest.api.model.Document; -import es.bsc.inb.ades.rest.api.model.DocumentAnnotations; -import es.bsc.inb.ades.rest.api.model.DocumentTracking; -import es.bsc.inb.ades.rest.api.model.Status; -import es.bsc.inb.ades.rest.api.services.DocumentService; - - -@RestController -@CrossOrigin(origins="*") -public class DocumentController { - - - - @Autowired - public DocumentService documentService; - - @RequestMapping("/documents") - public List findAll() { - return documentService.findAll(); - } - - @RequestMapping("/documents/{id}") - public DocumentAnnotations find(@PathVariable(value="id") Long id) { - return documentService.findDocumentAnnotationsByDocumentId(id); - } - - @RequestMapping("/document_data/{id}") - public Document findDocument(@PathVariable(value="id") Long id) { - return documentService.findByDocumentId(id); - } - - @RequestMapping("/documents/{id}/srdomain") - public DocumentAnnotations findDocumentSRDomain(@PathVariable(value="id") Long id) { - return documentService.findDocumentSRDomainByDocumentId(id); - } - -// @RequestMapping("/documents/{id}") -// public Document find2(@PathVariable(value="id") Long id) { -// return documentService.findByDocumentId2(id); -// } - - @RequestMapping("/documents/{id}/finding/{findingId}") - public String findFinding(@PathVariable(value="id") Long id, @PathVariable(value="findingId") Integer findingId) { - String snippet = documentService.findFindingEvidenceByDocumentIdAndFindingId(id, findingId); - return snippet; - } - - @RequestMapping("/documents/{id}/findings/{findingIds}") - public String findFindings(@PathVariable(value="id") Long id, @PathVariable(value="findingIds") List findingIds) { - //String snippet = documentService.findFindingEvidenceByDocumentIdAndFindingId(id, findingId); - //return snippet; - return ""; - } - - @RequestMapping("/documents/{id}/move/{status}") - public String moveDocument(@PathVariable(value="id") Long id, @PathVariable(value="status") Status status) { - documentService.moveDocument(id, status); - return "true"; - } - - - - @RequestMapping("/documents/{id}/setExportSRDomain/{srDomainId}/{export_srDomain}") - public String setExportFinding(@PathVariable(value="id") Long id, @PathVariable(value="srDomainId") Integer srDomainId, @PathVariable(value="export_srDomain") Boolean export_srDomain) { - documentService.setExportSRDomainFinding(id, srDomainId, export_srDomain); - return "true"; - } - - @RequestMapping("/documents/{id}/srFindingValidation/{srDomainId}/{status}") - public String setSRFindingValidation(@PathVariable(value="id") Long id, @PathVariable(value="srDomainId") Integer srDomainId, @PathVariable(value="status") String status) { - documentService.setValidationSRDomainFinding(id, srDomainId, status); - return "true"; - } - - @RequestMapping("/documents/{id}/findingValidation/{findingId}/{status}") - public String setFindingValidation(@PathVariable(value="id") Long id, @PathVariable(value="findingId") Integer findingId, @PathVariable(value="status") String status) { - documentService.setFindingValidation(id, findingId, status); - return "true"; - } - - @RequestMapping("/documents/{id}/sentence/{sentenceId}") - public String findSentence(@PathVariable(value="id") Long id, @PathVariable(value="sentenceId") Integer sentenceId) { - String snippet = documentService.findSentenceEvidenceByDocumentIdAndSentenceId(id, sentenceId); - return snippet; - } - - @RequestMapping("/documents/{id}/evidence/findings") - public String findAllFindingEvidence(@PathVariable(value="id") Long id) { - String snippet = documentService.findFindingsEvidenceByDocumentId(id); - return snippet; - } - - @RequestMapping("/documents/{id}/evidence/all") - public String findAllEvidence(@PathVariable(value="id") Long id) { - String snippet = documentService.findAllEvidenceByDocumentId(id); - return snippet; - } - - @RequestMapping("/documents/{id}/evidence/sentences") - public String findSentencesEvidence(@PathVariable(value="id") Long id) { - String snippet = documentService.findSentencesEvidenceByDocumentId(id); - //String snippet = documentService.findAllEvidenceByDocumentId(id); - return snippet; - } - - @RequestMapping("/documents/{id}/text") - public String findDocumentText(@PathVariable(value="id") Long id) { - String snippet = documentService.findTextByDocumentId(id); - return snippet; - } - -// @RequestMapping("/documents/{id}/finding2/{findingId}") -// public String findFinding2(@PathVariable(value="id") Long id, @PathVariable(value="findingId") Integer findingId) { -// String snippet = documentService.findTextSnippetByDocumentIdAndFindingId2(id, findingId); -// return snippet; -// } - - @RequestMapping(value = "/documents/export/{id}") - public ResponseEntity generateReport(@PathVariable("id") long documentId){ - String filename = "Study_Report_" + documentId +".txt"; - byte[] content = documentService.exportDocumentAnnotation(documentId); - HttpHeaders head = new HttpHeaders(); - head.setContentType(MediaType.parseMediaType("text/plain")); - head.add("content-disposition", "attachment; filename="+filename); - head.setContentDispositionFormData(filename, filename); - head.setCacheControl("must-revalidate, post-check=0, pre-check=0"); - return new ResponseEntity<>(content, head,HttpStatus.OK); - } - - @RequestMapping(value = "/documents/remove/{id}") - public String removeDocument(@PathVariable("id") long documentId){ - documentService.removeDocument(documentId); - return "true"; - } - - @RequestMapping(value = "/documents/restore/{id}") - public String restoreDocument(@PathVariable("id") long documentId){ - documentService.restoreDocument(documentId); - return "true"; - } - - @RequestMapping("/documents/{id}/tracking") - public DocumentTracking findTrackings(@PathVariable(value="id") Long id) { - return documentService.findTrackings(id); - } - - - - - - -} \ No newline at end of file diff --git a/src/main/java/es/bsc/inb/ades/rest/api/controllers/LivenessController.java b/src/main/java/es/bsc/inb/ades/rest/api/controllers/LivenessController.java deleted file mode 100644 index 05e09822afbecb10b6a377d77adfb38703ac98f5..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/controllers/LivenessController.java +++ /dev/null @@ -1,25 +0,0 @@ -package es.bsc.inb.ades.rest.api.controllers; - -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@CrossOrigin("*") -@RestController -public class LivenessController { - - @GetMapping(path = "/liveness") - public String liveness() { - return "true"; - } - - @GetMapping(path = "/readiness") - public String readeness() { - return "true"; - } - - @GetMapping(path = "/hello") - public String hello() { - return "holita"; - } -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Status.java b/src/main/java/es/bsc/inb/ades/rest/api/model/Status.java deleted file mode 100644 index afbb3606ded52ed02c0f348ffc0277865251d673..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Status.java +++ /dev/null @@ -1,5 +0,0 @@ -package es.bsc.inb.ades.rest.api.model; - -public enum Status { - DRAFT, IN_PROGRESS, FINISHED, CLOSED -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentTrackingRepositoryCustom.java b/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentTrackingRepositoryCustom.java deleted file mode 100644 index a9c9b6ec197a1f4b286ca6014489d275776b26e0..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentTrackingRepositoryCustom.java +++ /dev/null @@ -1,5 +0,0 @@ -package es.bsc.inb.ades.rest.api.repository; - -public interface DocumentTrackingRepositoryCustom { - -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/SecurityConfig.java b/src/main/java/es/bsc/inb/ades/rest/api/security/SecurityConfig.java deleted file mode 100644 index 51715bc1b2f8181855103e0a32f895b929fff8a0..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/SecurityConfig.java +++ /dev/null @@ -1,41 +0,0 @@ -package es.bsc.inb.ades.rest.api.security; - -//@KeycloakConfiguration -public class SecurityConfig /*extends KeycloakWebSecurityConfigurerAdapter*/ -{ - -// /** -// * Registers the KeycloakAuthenticationProvider with the authentication manager. -// */ -// @Autowired -// public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { -// auth.authenticationProvider(keycloakAuthenticationProvider()); -// } -// -// /** -// * Defines the session authentication strategy. -// */ -// @Bean -// @Override -// protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { -// return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); -// } -// -// @Override -// protected void configure(HttpSecurity http) throws Exception -// { -// super.configure(http); -// http.authorizeRequests() -// .antMatchers("/greeting").hasRole("user") -// //.antMatchers("/admin*").hasRole("ADMIN") http://localhost:8087/greeting -// .anyRequest().permitAll(); -// } -// -// @Bean -// public KeycloakSpringBootConfigResolver KeycloakConfigResolver() { -// return new KeycloakSpringBootConfigResolver(); -// } - -} - - diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/SecurityConfiguration.java b/src/main/java/es/bsc/inb/ades/rest/api/security/SecurityConfiguration.java deleted file mode 100644 index 2a8dfb3372397bcdcbe3b42cf69a86c748a9192e..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/SecurityConfiguration.java +++ /dev/null @@ -1,18 +0,0 @@ -package es.bsc.inb.ades.rest.api.security; - -import org.springframework.context.annotation.Configuration; -//import org.springframework.security.config.annotation.web.builders.HttpSecurity; -//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -@Configuration -public class SecurityConfiguration /*extends WebSecurityConfigurerAdapter */{ - - -// @Override -// public void configure(HttpSecurity http) throws Exception { -// http.authorizeRequests() -// .anyRequest().authenticated() -// .and() -// .oauth2Login(); -// } - -} \ No newline at end of file diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/WebController.java b/src/main/java/es/bsc/inb/ades/rest/api/security/WebController.java deleted file mode 100644 index b675377acfbc09a047fe2695b56caa562ed50e01..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/WebController.java +++ /dev/null @@ -1,22 +0,0 @@ -package es.bsc.inb.ades.rest.api.security; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -import java.security.Principal; -@Controller -public class WebController { - - @RequestMapping("/api/v1/nada") - public String index(Model model, Principal principal) { - return "login correct"; - } - @GetMapping("/greeting") - public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) { - model.addAttribute("name", name); - return "index"; - } - -} \ No newline at end of file diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/AuthenticationBean.java b/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/AuthenticationBean.java deleted file mode 100644 index 7f26752ac3bc33139ca0795d8fd648906007da94..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/AuthenticationBean.java +++ /dev/null @@ -1,24 +0,0 @@ -package es.bsc.inb.ades.rest.api.security.basic.inmemory; - -public class AuthenticationBean { - - private String message; - - public AuthenticationBean(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - @Override - public String toString() { - return String.format("HelloWorldBean [message=%s]", message); - } - -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/BasicAuthenticationController.java b/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/BasicAuthenticationController.java deleted file mode 100644 index 014039723efa1dcefca281007b1a47316e5fbb9c..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/BasicAuthenticationController.java +++ /dev/null @@ -1,17 +0,0 @@ -package es.bsc.inb.ades.rest.api.security.basic.inmemory; - -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -//Controller -@CrossOrigin() -@RestController -public class BasicAuthenticationController { - - @GetMapping(path = "/basicauth") - public AuthenticationBean helloWorldBean() { - //throw new RuntimeException("Some Error has Happened! Contact Support at ***-***"); - return new AuthenticationBean("You are authenticated"); - } -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/SecurityConfig.java b/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/SecurityConfig.java deleted file mode 100644 index 68ae896b735bf85237f929bab89e48c66060f441..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/basic/inmemory/SecurityConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package es.bsc.inb.ades.rest.api.security.basic.inmemory; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpMethod; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -//@Configuration -public class SecurityConfig extends WebSecurityConfigurerAdapter { - @Override - protected void configure(HttpSecurity http) throws Exception { - http.cors().and().csrf().disable(). - //http.csrf().disable(). - - authorizeRequests(). - antMatchers(HttpMethod.OPTIONS, "/**").permitAll(). - antMatchers(HttpMethod.GET, "/liveness").permitAll(). - antMatchers(HttpMethod.GET, "/readiness").permitAll().anyRequest().authenticated() - .and().httpBasic(); - - } - - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication().withUser("admin").password("{noop}eTRAN2019!").roles("USER"); - for (int i = 1; i < 41; i++) { - auth.inMemoryAuthentication().withUser("user"+i).password("{noop}user"+i+"2021!").roles("USER"); - } - } -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/services/FileService.java b/src/main/java/es/bsc/inb/ades/rest/api/services/FileService.java deleted file mode 100644 index b9fd2e54749a4e80cc718c9006c19a4cde447969..0000000000000000000000000000000000000000 --- a/src/main/java/es/bsc/inb/ades/rest/api/services/FileService.java +++ /dev/null @@ -1,48 +0,0 @@ -package es.bsc.inb.ades.rest.api.services; - -import org.springframework.core.io.Resource; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.stream.Stream; - -public interface FileService { - - /* - Metodo para crear la carpeta donde vamos a guardar los archivos - */ - public void init(); - - /* - Metodo para guardar los archivos - */ - public void save(MultipartFile file); - - /* - Metodo para cargar un archivo - */ - public Resource load(String filename); - - /* - Metodo para borrar todos los archivos cada vez que se inicie el servidor - */ - public void deleteAll(); - - /* - Metodo para Cargar todos los archivos - */ - public Stream loadAll(); - - /* - Metodo para Borrar un archivo - */ - public String deleteFile(String filename); - /** - * - * @param files - * @return - */ - public List validate(MultipartFile[] files, Boolean allow_duplicates); -} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/App.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/App.java similarity index 79% rename from src/main/java/es/bsc/inb/ades/rest/api/App.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/App.java index 8e738bf16ce4b05bea565bfb112a73199e9285f2..5b31e1f0c692aa310a8db00b8c099367a42d89b5 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/App.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/App.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api; +package es.bsc.inb.etransafe.pretox.rest.api; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -6,7 +6,7 @@ import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan("es.bsc.inb.ades") +@ComponentScan("es.bsc.inb.etransafe") public class App { public static void main(String[] args) { diff --git a/src/main/java/es/bsc/inb/ades/rest/api/config/Config.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/config/Config.java similarity index 65% rename from src/main/java/es/bsc/inb/ades/rest/api/config/Config.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/config/Config.java index 892c188c398cf3d14e61b91e5508047795627ea7..76adc7ba379fb66468c7167c6fe36f965fbae4c0 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/config/Config.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/config/Config.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.config; +package es.bsc.inb.etransafe.pretox.rest.api.config; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/es/bsc/inb/ades/rest/api/config/PersistenceJPAConfig.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/config/PersistenceJPAConfig.java similarity index 77% rename from src/main/java/es/bsc/inb/ades/rest/api/config/PersistenceJPAConfig.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/config/PersistenceJPAConfig.java index 7ba7893c9be98d5a466cff598e4906dc6ffd9d24..8e80e7b0d78179a682621e05e240d0c1911c779e 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/config/PersistenceJPAConfig.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/config/PersistenceJPAConfig.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.config; +package es.bsc.inb.etransafe.pretox.rest.api.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/DocumentController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/DocumentController.java new file mode 100644 index 0000000000000000000000000000000000000000..b483654095c2d8c3858814f4194da3f7f3217bcf --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/DocumentController.java @@ -0,0 +1,164 @@ +package es.bsc.inb.etransafe.pretox.rest.api.controllers; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import es.bsc.inb.etransafe.pretox.rest.api.model.Document; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentAnnotations; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentTracking; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainDocument; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainFinding; +import es.bsc.inb.etransafe.pretox.rest.api.model.Status; +import es.bsc.inb.etransafe.pretox.rest.api.services.DocumentService; + + +@RestController +@CrossOrigin(origins="*") +@RequestMapping("/documents") +public class DocumentController { + + @Autowired + public DocumentService documentService; + + @PutMapping(value ="/{id}/srfinding/update") + public ResponseEntity updateFinding(@PathVariable(value="id") Long id,@RequestBody SRDomainFinding srDomainFinding) { + return new ResponseEntity(documentService.saveFinding(id, srDomainFinding), HttpStatus.OK); + } + + @PutMapping(value ="/{id}/srfinding/add") + public ResponseEntity addFinding(@PathVariable(value="id") Long id, @RequestBody SRDomainFinding srDomainFinding) { + return new ResponseEntity(documentService.addFinding(id, srDomainFinding), HttpStatus.OK); + } + + @GetMapping + public ResponseEntity> findAll() { + return new ResponseEntity>(documentService.findAll(), HttpStatus.OK); + } + + @GetMapping(value ="/{id}") + public ResponseEntity find(@PathVariable(value="id") Long id) { + return new ResponseEntity(documentService.findDocumentAnnotationsByDocumentId(id), HttpStatus.OK); + } + + @GetMapping(value = "/srdomain/{id}") + public ResponseEntity findSRDomainDocument(@PathVariable(value="id") Long id) { + return new ResponseEntity(documentService.findSRDomainDocumentByDocumentId(id), HttpStatus.OK); + } + +// @GetMapping(value = "/document_data/{id}") +// public Document findDocument(@PathVariable(value="id") Long id) { +// return documentService.findByDocumentId(id); +// } + +// @GetMapping(value = "/{id}/srdomain") +// public ResponseEntity findDocumentSRDomain(@PathVariable(value="id") Long id) { +// return new ResponseEntity(documentService.findDocumentSRDomainByDocumentId(id), HttpStatus.OK); +// } + + @PutMapping(value = "/{id}/move/{status}") + public ResponseEntity moveDocument(@PathVariable(value="id") Long id, @PathVariable(value="status") Status status) { + documentService.moveDocument(id, status); + return new ResponseEntity(HttpStatus.OK); + } + + @PutMapping(value = "/{id}/srfinding/{srFindingId}/export/{export}") + public ResponseEntity setExportFinding(@PathVariable(value="id") Long id, @PathVariable(value="srFindingId") Integer srDomainId, @PathVariable(value="export") Boolean export_srDomain) { + documentService.setExportSRDomainFinding(id, srDomainId, export_srDomain); + return new ResponseEntity(HttpStatus.OK); + } + + @PutMapping(value = "/{id}/srfinding/{srFindingId}/validation/{status}") + public ResponseEntity setSRFindingValidation(@PathVariable(value="id") Long id, @PathVariable(value="srFindingId") Integer srDomainId, @PathVariable(value="status") String status) { + documentService.setValidationSRDomainFinding(id, srDomainId, status); + return new ResponseEntity(HttpStatus.OK); + } + +// @RequestMapping(value = "/{id}/findingValidation/{findingId}/{status}") +// public String setFindingValidation(@PathVariable(value="id") Long id, @PathVariable(value="findingId") Integer findingId, @PathVariable(value="status") String status) { +// documentService.setFindingValidation(id, findingId, status); +// return "true"; +// } + + + + @GetMapping(value = "/{id}/evidence/sentences") + public ResponseEntity findSentencesEvidence(@PathVariable(value="id") Long id) { + String snippet = documentService.findSentencesEvidenceByDocumentId(id); + return new ResponseEntity(snippet, HttpStatus.OK); + } + + @GetMapping(value = "/{id}/evidence/sentence/{sentenceId}") + public ResponseEntity findSentence(@PathVariable(value="id") Long id, @PathVariable(value="sentenceId") Integer sentenceId) { + String snippet = documentService.findSentenceEvidenceByDocumentIdAndSentenceId(id, sentenceId); + return new ResponseEntity(snippet, HttpStatus.OK); + } + + @GetMapping(value = "/{id}/evidence/findings") + public ResponseEntity findAllFindingEvidence(@PathVariable(value="id") Long id) { + String snippet = documentService.findFindingsEvidenceByDocumentId(id); + return new ResponseEntity(snippet, HttpStatus.OK); + } + + @GetMapping(value = "/{id}/evidence/finding/{findingId}") + public ResponseEntity findFinding(@PathVariable(value="id") Long id, @PathVariable(value="findingId") Integer findingId) { + String snippet = documentService.findFindingEvidenceByDocumentIdAndFindingId(id, findingId); + return new ResponseEntity(snippet, HttpStatus.OK); + } + + + + @GetMapping(value = "/{id}/evidence/all") + public ResponseEntity findAllEvidence(@PathVariable(value="id") Long id) { + String snippet = documentService.findAllEvidenceByDocumentId(id); + return new ResponseEntity(snippet, HttpStatus.OK); + } + + @GetMapping(value = "/{id}/text") + public ResponseEntity findDocumentText(@PathVariable(value="id") Long id) { + String snippet = documentService.findTextByDocumentId(id); + return new ResponseEntity(snippet, HttpStatus.OK); + } + + + @GetMapping(value = "/export/{id}") + public ResponseEntity generateReport(@PathVariable("id") long documentId){ + String filename = "Study_Report_" + documentId +".txt"; + byte[] content = documentService.exportDocumentAnnotation(documentId); + HttpHeaders head = new HttpHeaders(); + head.setContentType(MediaType.parseMediaType("text/plain")); + head.add("content-disposition", "attachment; filename="+filename); + head.setContentDispositionFormData(filename, filename); + head.setCacheControl("must-revalidate, post-check=0, pre-check=0"); + return new ResponseEntity<>(content, head,HttpStatus.OK); + } + + @DeleteMapping(value = "/remove/{id}") + public ResponseEntity removeDocument(@PathVariable("id") long documentId){ + documentService.removeDocument(documentId); + return new ResponseEntity(HttpStatus.OK); + } + + @GetMapping(value = "/restore/{id}") + public ResponseEntity restoreDocument(@PathVariable("id") long documentId){ + documentService.restoreDocument(documentId); + return new ResponseEntity(HttpStatus.OK); + } + + @GetMapping(value = "/{id}/tracking") + public ResponseEntity findTrackings(@PathVariable(value="id") Long id) { + return new ResponseEntity(documentService.findTrackings(id), HttpStatus.OK); + } +} \ No newline at end of file diff --git a/src/main/java/es/bsc/inb/ades/rest/api/controllers/FileController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/FileController.java similarity index 50% rename from src/main/java/es/bsc/inb/ades/rest/api/controllers/FileController.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/FileController.java index 9e10790fc63b609bb1f0383fa8d6ece79fa8e78a..5f28c967922b2254f39fd0c100303d58b3729355 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/controllers/FileController.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/FileController.java @@ -1,29 +1,21 @@ -package es.bsc.inb.ades.rest.api.controllers; +package es.bsc.inb.etransafe.pretox.rest.api.controllers; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder; -import es.bsc.inb.ades.rest.api.model.FileMessage; -import es.bsc.inb.ades.rest.api.model.FileModel; -import es.bsc.inb.ades.rest.api.services.FileService; +import es.bsc.inb.etransafe.pretox.rest.api.services.FileService; @Controller @CrossOrigin("*") @@ -56,36 +48,7 @@ public class FileController { } } - @GetMapping("/files") - public ResponseEntity> getFiles(){ - List fileInfos = fileService.loadAll().map(path -> { - String filename = path.getFileName().toString(); - String url = MvcUriComponentsBuilder.fromMethodName(FileController.class, "getFile", - path.getFileName().toString()).build().toString(); - return new FileModel(filename, url); - }).collect(Collectors.toList()); - - return ResponseEntity.status(HttpStatus.OK).body(fileInfos); - } - - - @GetMapping("/files/{filename:.+}") - public ResponseEntity getFile(@PathVariable String filename){ - Resource file = fileService.load(filename); - return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, - "attachment; filename=\""+file.getFilename() + "\"").body(file); - } - - @GetMapping("/delete/{filename:.+}") - public ResponseEntity deleteFile(@PathVariable String filename) { - String message = ""; - try { - message = fileService.deleteFile(filename); - return ResponseEntity.status(HttpStatus.OK).body(new FileMessage(message)); - } catch (Exception e) { - - return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new FileMessage(message)); - } - } - + + + } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/LivenessController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/LivenessController.java new file mode 100644 index 0000000000000000000000000000000000000000..3e265d4eb1d3a41592dee4b47f131bcce6faebdc --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/LivenessController.java @@ -0,0 +1,23 @@ +package es.bsc.inb.etransafe.pretox.rest.api.controllers; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@CrossOrigin("*") +@RestController +public class LivenessController { + + @GetMapping(path = "/liveness") + public ResponseEntity liveness() { + return new ResponseEntity(HttpStatus.OK); + } + + @GetMapping(path = "/readiness") + public ResponseEntity readeness() { + return new ResponseEntity(HttpStatus.OK); + } + +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java new file mode 100644 index 0000000000000000000000000000000000000000..adb3fec09fcd3962b09ac0c53d16b7ef94b7f6e3 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/controllers/ReportController.java @@ -0,0 +1,100 @@ +package es.bsc.inb.etransafe.pretox.rest.api.controllers; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; +import es.bsc.inb.etransafe.pretox.rest.api.services.ReportService; + + +@RestController +@CrossOrigin(origins="*") +@RequestMapping("/reports") +public class ReportController { + + @Autowired + ReportService reportService; + + @PostMapping("/upload") + public ResponseEntity uploadLegacyReports(@RequestParam("files")MultipartFile[] files){ + List messages = new ArrayList(); + List reports = new ArrayList(); + try{ + List fileNames = new ArrayList<>(); + List errors = reportService.validateUpload(files); + if(errors.size()==0) { + messages.add("The legacy reports were uploaded correctly:"); + Arrays.asList(files).stream().forEach(file->{ + try { + Report report = reportService.upload(file); + messages.add(report.getFileName()); + reports.add(report); + } catch (IOException e) { + messages.clear(); + errors.add("There was an IOException problem uploading the report: " + file.getName()); + e.printStackTrace(); + } + fileNames.add(file.getOriginalFilename()); + }); + } + if(errors.size()!=0) { + errors.add("Validation fail, no legacy report was uploaded."); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors); + } + return ResponseEntity.status(HttpStatus.OK).body(reports); + }catch (Exception e){ + e.printStackTrace(); + messages.add("An error occurred while uploading legacy reports."); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messages); + } + } + + @GetMapping("/download/{gridFSId}") + public ResponseEntity download(@PathVariable String gridFSId) throws IOException { + Report legacyReport = reportService.download(gridFSId); + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType(legacyReport.getFileType() )) + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + legacyReport.getFileName() + "\"") + .body(new ByteArrayResource(legacyReport.getFile())); + } + + @GetMapping + public ResponseEntity> listLegacyReports() throws IOException { + List list = reportService.list(); + return ResponseEntity.ok().body(list); + } + + @DeleteMapping(value = "/remove/{id}") + public ResponseEntity removeDocument(@PathVariable("id") String reportId){ + return ResponseEntity.ok().body(reportService.remove(reportId)); + } + + @PostMapping(value = "/restore/{id}") + public ResponseEntity restoreDocument(@PathVariable("id") String reportId){ + return ResponseEntity.ok().body(reportService.restore(reportId)); + } + + @GetMapping(value ="/{id}") + public ResponseEntity find(@PathVariable(value="id") String id) { + return new ResponseEntity(reportService.findById(id), HttpStatus.OK); + } + +} \ No newline at end of file diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Action.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Action.java similarity index 62% rename from src/main/java/es/bsc/inb/ades/rest/api/model/Action.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Action.java index 7116b1a31e64e0d4109509183b693d0c5fdc4235..c79685046bd24392aec6a7a7cb5d81f8f14419c2 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Action.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Action.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; public enum Action { MOVE, REJECT, ACCEPT, EXPORT_SR_FINDING, NOT_EXPORT_SR_FINDING diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Annotation.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Annotation.java similarity index 96% rename from src/main/java/es/bsc/inb/ades/rest/api/model/Annotation.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Annotation.java index 33ffa9422d7ef54b38c40c2c8d068cb06369b01f..cd5fe43f0a3a8414b4d76d7576fe447a217d5916 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Annotation.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Annotation.java @@ -1,11 +1,11 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; import java.util.ArrayList; import java.util.List; import org.springframework.data.mongodb.core.mapping.Field; -import es.bsc.inb.ades.rest.api.util.VisualizationHTMLUtil; +import es.bsc.inb.etransafe.pretox.rest.api.util.VisualizationHTMLUtil; /** * diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Document.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Document.java similarity index 92% rename from src/main/java/es/bsc/inb/ades/rest/api/model/Document.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Document.java index bff1e3c00a9812c26ea3d7c782e40c12f34c2007..01696cd7ac255514410ec76364e447b68a4d0919 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Document.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Document.java @@ -1,10 +1,7 @@ -package es.bsc.inb.ades.rest.api.model; - -import java.util.List; +package es.bsc.inb.etransafe.pretox.rest.api.model; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.DBRef; import org.springframework.data.mongodb.core.mapping.Field; @org.springframework.data.mongodb.core.mapping.Document(collection="documents") diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/DocumentAnnotations.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/DocumentAnnotations.java similarity index 73% rename from src/main/java/es/bsc/inb/ades/rest/api/model/DocumentAnnotations.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/DocumentAnnotations.java index 8552ed6f01b7f2f0c3a94c649afb25188aa75f66..43d685a89cb747fd381c6159714aa014a0346cbd 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/DocumentAnnotations.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/DocumentAnnotations.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; import java.util.ArrayList; import java.util.List; @@ -21,9 +21,7 @@ public class DocumentAnnotations { @Field("relevant_sentences") private ArrayList relevantSentences; - private ArrayList findings; - - private List srdomainfindings; + private List srDomainFindings; private Status status; @@ -62,20 +60,12 @@ public class DocumentAnnotations { this.documentId = documentId; } - public ArrayList getFindings() { - return findings; - } - - public void setFindings(ArrayList findings) { - this.findings = findings; - } - - public List getSrdomainfindings() { - return srdomainfindings; + public List getSrDomainFindings() { + return srDomainFindings; } - public void setSrdomainfindings(List srdomainfindings) { - this.srdomainfindings = srdomainfindings; + public void setSrDomainFindings(List srDomainFindings) { + this.srDomainFindings = srDomainFindings; } public Status getStatus() { @@ -86,8 +76,5 @@ public class DocumentAnnotations { public void setStatus(Status status) { this.status = status; } - - - } diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/DocumentTracking.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/DocumentTracking.java similarity index 95% rename from src/main/java/es/bsc/inb/ades/rest/api/model/DocumentTracking.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/DocumentTracking.java index 69a6d4d0c3243351cc9027d3a77799ac123d585d..bc844488270bb7554c0aad6743a31c3039469679 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/DocumentTracking.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/DocumentTracking.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Feature.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Feature.java similarity index 87% rename from src/main/java/es/bsc/inb/ades/rest/api/model/Feature.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Feature.java index 5722fde8976a93f7cfabe4eac991ec338913a26d..49478b5e858eaf940e7ec7a30897dffc28ccd2a8 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Feature.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Feature.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; /** * * @author jcorvi diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/FileMessage.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/FileMessage.java similarity index 84% rename from src/main/java/es/bsc/inb/ades/rest/api/model/FileMessage.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/FileMessage.java index f000e463f40f59f5b18cc135eaa0d5e1a7fbe757..0d51e3e2fee9ccfbc0d7239b5b6cc40bde72da1a 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/FileMessage.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/FileMessage.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; public class FileMessage { diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/FileModel.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/FileModel.java similarity index 90% rename from src/main/java/es/bsc/inb/ades/rest/api/model/FileModel.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/FileModel.java index 8d2c5ae93e8c09c08b5986b4f7bea8d342097016..d9ad2478994b068b2aa016a574d4e3b9b3b702b6 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/FileModel.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/FileModel.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; /** * File model diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Finding.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Finding.java similarity index 98% rename from src/main/java/es/bsc/inb/ades/rest/api/model/Finding.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Finding.java index 2834940219cde491d2e442d96159c7a2eb66c6c1..d4f40198192252ae88f5f943bfa8eda1be2fd98c 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Finding.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Finding.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; import java.util.ArrayList; import java.util.List; @@ -436,7 +436,7 @@ public class Finding { public String getTrackingSummary() { - return findingId.toString(); + return findingId==null?"":findingId.toString(); } diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/RecordState.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/RecordState.java similarity index 50% rename from src/main/java/es/bsc/inb/ades/rest/api/model/RecordState.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/RecordState.java index 51ab40a5f2f1b42f80138ebdbbd3efbd2db04916..b050f95a1148e83ab3dfa437022e5f15381f9701 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/RecordState.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/RecordState.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; public enum RecordState { diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/RelevantSentence.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/RelevantSentence.java similarity index 99% rename from src/main/java/es/bsc/inb/ades/rest/api/model/RelevantSentence.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/RelevantSentence.java index 995de73ef59abfb9e6201771b0bd5982c0df7d5f..7a4afbcc76e745fc984dfae56e9d09cc57753cb8 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/RelevantSentence.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/RelevantSentence.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Report.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Report.java new file mode 100644 index 0000000000000000000000000000000000000000..066bbb3badd68cb64e964007ae0bdc02cef3c72d --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Report.java @@ -0,0 +1,140 @@ +package es.bsc.inb.etransafe.pretox.rest.api.model; + +import java.util.Date; +import java.util.List; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.DBRef; + + +@org.springframework.data.mongodb.core.mapping.Document(collection="reports") +public class Report { + + @Id + private String id; + + private Date uploadDate; + + private String fileName; + + private String name; + + private String fileType; + + private String fileSize; + + //This field is only for response, the file is stored in the gridFS object + private byte[] file; + + private String gridFSId; + + private Status status; + + private RecordState recordState; + + private Boolean hasSections; + + @DBRef + private List
sections; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public byte[] getFile() { + return file; + } + + public void setFile(byte[] file) { + this.file = file; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public Date getUploadDate() { + return uploadDate; + } + + public void setUploadDate(Date uploadDate) { + this.uploadDate = uploadDate; + } + + public String getGridFSId() { + return gridFSId; + } + + public void setGridFSId(String gridFSId) { + this.gridFSId = gridFSId; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public RecordState getRecordState() { + return recordState; + } + + public void setRecordState(RecordState recordState) { + this.recordState = recordState; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List
getSections() { + return sections; + } + + public void setSections(List
sections) { + this.sections = sections; + } + + public Boolean getHasSections() { + return hasSections; + } + + public void setHasSections(Boolean hasSections) { + this.hasSections = hasSections; + } + + + + + +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainDocument.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainDocument.java new file mode 100644 index 0000000000000000000000000000000000000000..8a2025e4243e6038367c049f3580f457c86cb1c0 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainDocument.java @@ -0,0 +1,91 @@ +package es.bsc.inb.etransafe.pretox.rest.api.model; + +import java.util.List; + +public class SRDomainDocument { + + private Long documentId; + + private String name; + + private String processDate; + + private String fileName; + + private Status status; + + private List srDomainFindings; + + private RecordState recordState; + + private Long pretoxDocumentId; + + public SRDomainDocument() { + super(); + } + + public Long getDocumentId() { + return documentId; + } + + public void setDocumentId(Long documentId) { + this.documentId = documentId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Status getStatus() { + if(status==null)return Status.DRAFT; + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public String getProcessDate() { + return processDate; + } + + public void setProcessDate(String processDate) { + this.processDate = processDate; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public RecordState getRecordState() { + return recordState; + } + + public void setRecordState(RecordState recordState) { + this.recordState = recordState; + } + + public List getSrDomainFindings() { + return srDomainFindings; + } + + public void setSrDomainFindings(List srDomainFindings) { + this.srDomainFindings = srDomainFindings; + } + + public Long getPretoxDocumentId() { + return pretoxDocumentId; + } + + public void setPretoxDocumentId(Long pretoxDocumentId) { + this.pretoxDocumentId = pretoxDocumentId; + } +} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/SRDomainFinding.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainFinding.java similarity index 53% rename from src/main/java/es/bsc/inb/ades/rest/api/model/SRDomainFinding.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainFinding.java index bd2b6da2a2604182b3bbf854af2a11b9351230cc..014e51d781f63967cda9f1d1f94f13f489cc2f62 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/SRDomainFinding.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainFinding.java @@ -1,328 +1,299 @@ -package es.bsc.inb.ades.rest.api.model; - -import org.apache.tomcat.util.bcel.classfile.Constant; - -import es.bsc.inb.ades.rest.api.util.Constants; +package es.bsc.inb.etransafe.pretox.rest.api.model; /** - * This class describes a finding in SR-Domain format. - * No textual evidence. + * This class describes a finding in SR-Domain format. No textual evidence. + * * @author javi * */ -public class SRDomainFinding implements Cloneable{ - - private String STUDYID=""; - private String DOMAIN=""; - private String SRSEQ=""; - private String SRRISK=""; - private String SPGRPCD=""; - private String GRPLBL=""; - private String SRGRPDOS=""; - private String SRSEX=""; - private String SRSTDY=""; - private String SRSTPHSE=""; - private String SROBSTDY=""; - private String SRENDY=""; - private String SRENPHSE=""; - private String SROBENDY=""; - private String SRDOMAIN=""; - private String SRDOMAIN_DESC=""; - private String SRSPEC=""; - private String SRSPEC_DESC=""; - private String SRTSTCD=""; - private String SRTSTCD_DESC=""; - private String SRFNDG=""; - private String SRFNDG_DESC=""; - private String SRORES=""; - private String SROBSV=""; - private String SROBSV_DESC=""; - private String SROBSQ=""; - private String SRSEV=""; - private String SRPCNT=""; - private String SRSIGF=""; - private String SRTRTEF=""; - private String SRCOMNT=""; +public class SRDomainFinding implements Cloneable { + + private String STUDYID = ""; // Study Identifier + private String DOMAIN = ""; // Domain Abbreviation + private String SRSEQ = ""; // Sequence number + private String SRRISK = ""; // Risk Level Associated with this Group/Sex + private String SPGRPCD = ""; // Sponsor-Defined Group Code + private String SRGRPNAM = ""; // Group Name + private String SRGRPDOS = ""; // Group Dose Level + private String SRSEX = ""; // Sex + private String SRSTDY = ""; // Study Day of Start of Finding + private String SRSTPHSE = ""; // Study Phase of first Observation + private String SROBSTDY = ""; // Start Phase Day of Observation + private String SRENDY = ""; // Study Day of End of Finding + private String SRENPHSE = ""; // Study Phase of last Observation + private String SROBENDY = ""; // End Phase Day of Observation + private String SRDOMAIN = ""; // Domain of Finding + private String SRSPEC = ""; // Specimen of Finding + private String SRTSTCD = ""; // Test Short Name + private String SRFNDG = ""; // Finding + private String SRORES = ""; // Observation (original result) + private String SROBSV = ""; // Manifestation of Finding + private String SROBSQ = ""; // Observation Qualifier + private String SRSEV = ""; // Severity of Finding + private String SRPCNT = ""; // Scale of this Finding + private String SRSIGF = ""; // Statistical Significance + private String SRTRTEF = ""; // Treatment-Related? + private String SRCOMNT = ""; // Comment private Boolean export; private Integer findingId; private Integer srDomainId; - private String status="non_curated"; - - - - - public String getStatus() { + private SRDomainFindingStatus status = SRDomainFindingStatus.non_curated; + + public SRDomainFindingStatus getStatus() { return status; } - public void setStatus(String status) { + public void setStatus(SRDomainFindingStatus status) { this.status = status; } - public String getSrdomain_value() { - if(Constants.SEND_DOMAIN_NAMES.get(SRDOMAIN)!=null) { - return Constants.SEND_DOMAIN_NAMES.get(SRDOMAIN) + "(" + SRDOMAIN + ")"; - }else if(SRDOMAIN==null || SRDOMAIN.equals("")) { - return ""; - }else { - return SRDOMAIN; - } - - } - - public String getSrfndg_value() { - if(SRFNDG ==null || SRFNDG.equals("")) { - return SRORES; - } - return SRFNDG_DESC + "(" + SRFNDG + ")"; - } - - public String getSrtstcd_value() { - if(SRTSTCD ==null || SRTSTCD.equals("")) { - return SRTSTCD_DESC; - } - return SRTSTCD_DESC + "(" + SRTSTCD + ")"; - } - - public String getSrobsv_value() { - if(SROBSV ==null || SROBSV.equals("")) { - return SROBSV_DESC; - } - return SROBSV_DESC + "(" + SROBSV + ")"; - } - - public String getSrspec_value() { - if(SRSPEC ==null || SRSPEC.equals("")) { - return SRSPEC_DESC; - } - return SRSPEC_DESC + "(" + SRSPEC + ")"; - } - - - public String getSTUDYID() { return STUDYID; } + public void setSTUDYID(String sTUDYID) { STUDYID = sTUDYID; } + public String getDOMAIN() { return DOMAIN; } + public void setDOMAIN(String dOMAIN) { DOMAIN = dOMAIN; } + public String getSRSEQ() { return SRSEQ; } + public void setSRSEQ(String sRSEQ) { SRSEQ = sRSEQ; } + public String getSRRISK() { return SRRISK; } + public void setSRRISK(String sRRISK) { SRRISK = sRRISK; } + public String getSPGRPCD() { return SPGRPCD; } + public void setSPGRPCD(String sPGRPCD) { SPGRPCD = sPGRPCD; } - public String getGRPLBL() { - return GRPLBL; - } - public void setGRPLBL(String gRPLBL) { - GRPLBL = gRPLBL; - } + public String getSRGRPDOS() { return SRGRPDOS; } + public void setSRGRPDOS(String sRGRPDOS) { SRGRPDOS = sRGRPDOS; } + public String getSRSEX() { return SRSEX; } + public void setSRSEX(String sRSEX) { SRSEX = sRSEX; } + public String getSRSTDY() { return SRSTDY; } + public void setSRSTDY(String sRSTDY) { SRSTDY = sRSTDY; } + public String getSRSTPHSE() { return SRSTPHSE; } + public void setSRSTPHSE(String sRSTPHSE) { SRSTPHSE = sRSTPHSE; } + public String getSROBSTDY() { return SROBSTDY; } + public void setSROBSTDY(String sROBSTDY) { SROBSTDY = sROBSTDY; } + public String getSRENDY() { return SRENDY; } + public void setSRENDY(String sRENDY) { SRENDY = sRENDY; } + public String getSRENPHSE() { return SRENPHSE; } + public void setSRENPHSE(String sRENPHSE) { SRENPHSE = sRENPHSE; } + public String getSROBENDY() { return SROBENDY; } + public void setSROBENDY(String sROBENDY) { SROBENDY = sROBENDY; } + public String getSRDOMAIN() { return SRDOMAIN; } + public void setSRDOMAIN(String sRDOMAIN) { SRDOMAIN = sRDOMAIN; } + public String getSRSPEC() { return SRSPEC; } + public void setSRSPEC(String sRSPEC) { SRSPEC = sRSPEC; } + public String getSRTSTCD() { return SRTSTCD; } + public void setSRTSTCD(String sRTSTCD) { SRTSTCD = sRTSTCD; } + public String getSRFNDG() { return SRFNDG; } + public void setSRFNDG(String sRFNDG) { SRFNDG = sRFNDG; } + public String getSRORES() { return SRORES; } + public void setSRORES(String sRORES) { SRORES = sRORES; } + public String getSROBSV() { return SROBSV; } - - + public void setSROBSV(String sROBSV) { + SROBSV = sROBSV; + } + public String getSROBSQ() { return SROBSQ; } + public void setSROBSQ(String sROBSQ) { SROBSQ = sROBSQ; } + public String getSRSEV() { return SRSEV; } + public void setSRSEV(String sRSEV) { SRSEV = sRSEV; } + public String getSRPCNT() { return SRPCNT; } + public void setSRPCNT(String sRPCNT) { SRPCNT = sRPCNT; } + public String getSRSIGF() { return SRSIGF; } + public void setSRSIGF(String sRSIGF) { SRSIGF = sRSIGF; } + public String getSRTRTEF() { return SRTRTEF; } + public void setSRTRTEF(String sRTRTEF) { SRTRTEF = sRTRTEF; } + public String getSRCOMNT() { return SRCOMNT; } + public void setSRCOMNT(String sRCOMNT) { SRCOMNT = sRCOMNT; } - public void setSRDOMAIN_DESC(String sRDOMAIN_DESC) { - SRDOMAIN_DESC = sRDOMAIN_DESC; - } - public void setSROBSV(String sROBSV) { - SROBSV = sROBSV; - } - - public String getSRDOMAIN_DESC() { - return SRDOMAIN_DESC; - } - - public String getSRSPEC_DESC() { - return SRSPEC_DESC; - } - public void setSRSPEC_DESC(String sRSPEC_DESC) { - SRSPEC_DESC = sRSPEC_DESC; - } - public String getSRTSTCD_DESC() { - return SRTSTCD_DESC; - } - public void setSRTSTCD_DESC(String sRTSTCD_DESC) { - SRTSTCD_DESC = sRTSTCD_DESC; - } - public String getSRFNDG_DESC() { - return SRFNDG_DESC; - } - public void setSRFNDG_DESC(String sRFNDG_DESC) { - SRFNDG_DESC = sRFNDG_DESC; - } - public String getSROBSV_DESC() { - return SROBSV_DESC; - } - public void setSROBSV_DESC(String sROBSV_DESC) { - SROBSV_DESC = sROBSV_DESC; - } + public Boolean getExport() { - if(export==null)return true; + if (export == null) + return true; return export; } + public void setExport(Boolean export) { this.export = export; } + public Integer getSrDomainId() { return srDomainId; } + public void setSrDomainId(Integer srDomainId) { this.srDomainId = srDomainId; } + public Integer getFindingId() { return findingId; } + public void setFindingId(Integer findingId) { this.findingId = findingId; } + public SRDomainFinding clone() { try { - return (SRDomainFinding)super.clone(); + return (SRDomainFinding) super.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } + + public String getSRGRPNAM() { + return SRGRPNAM; + } + + public void setSRGRPNAM(String sRGRPNAM) { + SRGRPNAM = sRGRPNAM; + } + public String getTrackingSummary() { - String summary = SRSEQ ; - return summary; + return SRSEQ; } - + } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainFindingStatus.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainFindingStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..d5878b58645f8bda535b1cb9684ef4e2dfe3e8bd --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/SRDomainFindingStatus.java @@ -0,0 +1,5 @@ +package es.bsc.inb.etransafe.pretox.rest.api.model; + +public enum SRDomainFindingStatus { + non_curated, rejected, accepted, added; +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java new file mode 100644 index 0000000000000000000000000000000000000000..33999f72d0e11821cfc62e55b4f8460e57dcf87b --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Section.java @@ -0,0 +1,81 @@ +package es.bsc.inb.etransafe.pretox.rest.api.model; + +import org.bson.types.ObjectId; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.DBRef; +import org.springframework.data.mongodb.core.mapping.Field; + +@org.springframework.data.mongodb.core.mapping.Document(collection="sections") +public class Section{ + @Field("_id") + @Id + private ObjectId _id; + + @Field("id") + private Long id; + + private String name; + + private String text; + + private String processDate; + + private String fileName; + + @DBRef + private DocumentAnnotations annotations; + + public Section() { + super(); + } + + public ObjectId get_id() { + return _id; + } + + public void set_id(ObjectId _id) { + this._id = _id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public String getProcessDate() { + return processDate; + } + + public void setProcessDate(String processDate) { + this.processDate = processDate; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public DocumentAnnotations getAnnotations() { + return annotations; + } + + public void setAnnotations(DocumentAnnotations annotations) { + this.annotations = annotations; + } + +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Status.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Status.java new file mode 100644 index 0000000000000000000000000000000000000000..9ba495e5fae6b23df421c1d25d1db8decf149f3a --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Status.java @@ -0,0 +1,8 @@ +package es.bsc.inb.etransafe.pretox.rest.api.model; + +public enum Status { + //workflow + WAITING,READY,RUNNING,COMPLETED,FAIL, + + DRAFT, IN_PROGRESS, FINISHED, CLOSED, +} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/model/Tracking.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Tracking.java similarity index 94% rename from src/main/java/es/bsc/inb/ades/rest/api/model/Tracking.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Tracking.java index 94a6cafdef609d2e63988812757d91a3526f30e6..84bf18bae5e0b9f0be5b638e4429e1f181aaba08 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/model/Tracking.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/model/Tracking.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.model; +package es.bsc.inb.etransafe.pretox.rest.api.model; import java.util.Date; diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentAnnotationsRepository.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentAnnotationsRepository.java similarity index 71% rename from src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentAnnotationsRepository.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentAnnotationsRepository.java index 38a021cb399bc8307422040c0b37248357e86119..3259e0f0986dd9c9415f42267bbca75bae012bf9 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentAnnotationsRepository.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentAnnotationsRepository.java @@ -1,9 +1,9 @@ -package es.bsc.inb.ades.rest.api.repository; +package es.bsc.inb.etransafe.pretox.rest.api.repository; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; -import es.bsc.inb.ades.rest.api.model.DocumentAnnotations; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentAnnotations; @Repository public interface DocumentAnnotationsRepository extends DocumentAnnotationsRepositoryCustom, MongoRepository { diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentAnnotationsRepositoryCustom.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentAnnotationsRepositoryCustom.java similarity index 68% rename from src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentAnnotationsRepositoryCustom.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentAnnotationsRepositoryCustom.java index 8cddfbe84c237a22d0b47ba77af82b181cc0454f..3c6aa15376a047aa19da2e6f63f17714798d28f9 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentAnnotationsRepositoryCustom.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentAnnotationsRepositoryCustom.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.repository; +package es.bsc.inb.etransafe.pretox.rest.api.repository; /** * Custom Interface for Document diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepository.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepository.java similarity index 82% rename from src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepository.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepository.java index 0a7317ad4c15e9aedd4356c758baef7d0a3626db..284629019dc92ecf7cce2f5ab8ab548f75920ce8 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepository.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepository.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.repository; +package es.bsc.inb.etransafe.pretox.rest.api.repository; import java.util.List; @@ -6,7 +6,7 @@ import org.bson.types.ObjectId; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; -import es.bsc.inb.ades.rest.api.model.Document; +import es.bsc.inb.etransafe.pretox.rest.api.model.Document; @Repository public interface DocumentRepository extends DocumentRepositoryCustom, MongoRepository { diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepositoryCustom.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepositoryCustom.java similarity index 59% rename from src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepositoryCustom.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepositoryCustom.java index 4951ad57111eb7cc4ea4108c0c7a7dddef5baad0..f2e8c16d63777153c590ab0f10e9b52f46a60015 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepositoryCustom.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepositoryCustom.java @@ -1,7 +1,7 @@ -package es.bsc.inb.ades.rest.api.repository; +package es.bsc.inb.etransafe.pretox.rest.api.repository; -import es.bsc.inb.ades.rest.api.model.DocumentAnnotations; -import es.bsc.inb.ades.rest.api.model.Finding; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentAnnotations; +import es.bsc.inb.etransafe.pretox.rest.api.model.Finding; /** * Custom Interface for Document diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepositoryImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepositoryImpl.java similarity index 91% rename from src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepositoryImpl.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepositoryImpl.java index 260542d08814ad4d76de31ca14c18e33830d4a0a..cfc1611902d7260a2bb1bba8df7e697706bbb32c 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentRepositoryImpl.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentRepositoryImpl.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.repository; +package es.bsc.inb.etransafe.pretox.rest.api.repository; import java.util.List; @@ -12,9 +12,9 @@ import org.springframework.data.mongodb.core.aggregation.ProjectionOperation; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; -import es.bsc.inb.ades.rest.api.model.Document; -import es.bsc.inb.ades.rest.api.model.DocumentAnnotations; -import es.bsc.inb.ades.rest.api.model.Finding; +import es.bsc.inb.etransafe.pretox.rest.api.model.Document; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentAnnotations; +import es.bsc.inb.etransafe.pretox.rest.api.model.Finding; /** * Custom implementation of DocumentRepository diff --git a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentTrackingRepository.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentTrackingRepository.java similarity index 72% rename from src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentTrackingRepository.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentTrackingRepository.java index 126b1f050475e2ce020c8331145a0e9d2379a9d1..19d7f6dd01cfe1648af1d057f4eab07571d39200 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/repository/DocumentTrackingRepository.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentTrackingRepository.java @@ -1,9 +1,9 @@ -package es.bsc.inb.ades.rest.api.repository; +package es.bsc.inb.etransafe.pretox.rest.api.repository; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; -import es.bsc.inb.ades.rest.api.model.DocumentTracking; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentTracking; @Repository public interface DocumentTrackingRepository extends DocumentTrackingRepositoryCustom, MongoRepository { diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentTrackingRepositoryCustom.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentTrackingRepositoryCustom.java new file mode 100644 index 0000000000000000000000000000000000000000..d3db001f9165a3fd994c6c3db71d0857ac10f023 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/DocumentTrackingRepositoryCustom.java @@ -0,0 +1,5 @@ +package es.bsc.inb.etransafe.pretox.rest.api.repository; + +public interface DocumentTrackingRepositoryCustom { + +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepository.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..81e0ca20af76b49ad4fc978a272447dd5db32be4 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepository.java @@ -0,0 +1,17 @@ +package es.bsc.inb.etransafe.pretox.rest.api.repository; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; + +@Repository +public interface ReportRepository extends ReportRepositoryCustom, MongoRepository { + + List findByFileName(String name); + + Optional findById(String reportId); +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepositoryCustom.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepositoryCustom.java new file mode 100644 index 0000000000000000000000000000000000000000..ceafc2a35c326d6f6fa0c7b09f4dbcef7c32de90 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepositoryCustom.java @@ -0,0 +1,16 @@ +package es.bsc.inb.etransafe.pretox.rest.api.repository; + +import java.util.List; + +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; + +/** + * Custom Interface for Report repository + * @author jcorvi + * + */ +public interface ReportRepositoryCustom { + + public List findAllActiveReports(); + +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepositoryImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepositoryImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..01a79e9fb283ce92d5a075713fd78daa72812f4c --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/repository/ReportRepositoryImpl.java @@ -0,0 +1,41 @@ +package es.bsc.inb.etransafe.pretox.rest.api.repository; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; + +/** + * Custom implementation of DocumentRepository + * @author jcorvi + * + */ +public class ReportRepositoryImpl implements ReportRepositoryCustom{ + + @Autowired + MongoTemplate mongoTemplate; + + public List findAllActiveReports(){ + Query query = new Query(); + query.fields().include("id"); + query.fields().include("fileName"); + query.fields().include("gridFSId"); + query.fields().include("uploadDate"); + query.fields().include("status"); + query.fields().include("recordState"); + query.fields().include("hasSections"); + query.addCriteria(Criteria.where("recordState").ne("DELETED")); + //Sort sort = new Sort(Sort.Direction.ASC, "name"); + //query.with(sort); + List reports = mongoTemplate.find(query, Report.class); + return reports; + } + + + + +} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/security/pkce/SecurityConfig.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/security/pkce/SecurityConfig.java similarity index 73% rename from src/main/java/es/bsc/inb/ades/rest/api/security/pkce/SecurityConfig.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/security/pkce/SecurityConfig.java index 7bfef2b3e9dbb033347acc2396a2db685e57a98b..5f1363b300b8d7e6d02f195f83d6479d2bad54a8 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/security/pkce/SecurityConfig.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/security/pkce/SecurityConfig.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.security.pkce; +package es.bsc.inb.etransafe.pretox.rest.api.security.pkce; @@ -19,7 +19,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .authorizeRequests() .antMatchers(HttpMethod.GET, "/liveness").permitAll() .antMatchers(HttpMethod.GET, "/readiness").permitAll() + .antMatchers(HttpMethod.GET, "/reports/**").permitAll() .antMatchers(HttpMethod.GET, "/documents/restore/*").permitAll() + .antMatchers(HttpMethod.GET, "/reports/restore/*").permitAll() + .antMatchers(HttpMethod.GET, "/api-docs").permitAll() + .antMatchers(HttpMethod.GET, "/api-docs/**").permitAll() + .antMatchers(HttpMethod.GET, "/api.html").permitAll() + .antMatchers(HttpMethod.GET, "/swagger-ui/**").permitAll() .anyRequest().authenticated() .and() .sessionManagement() diff --git a/src/main/java/es/bsc/inb/ades/rest/api/services/DocumentService.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/DocumentService.java similarity index 62% rename from src/main/java/es/bsc/inb/ades/rest/api/services/DocumentService.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/DocumentService.java index c1d632c460513dc25aa09d821ae32100132aa16c..7733e21cc9e1e8f19dbaee7b8afea2851a80439a 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/services/DocumentService.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/DocumentService.java @@ -1,11 +1,13 @@ -package es.bsc.inb.ades.rest.api.services; +package es.bsc.inb.etransafe.pretox.rest.api.services; import java.util.List; -import es.bsc.inb.ades.rest.api.model.Document; -import es.bsc.inb.ades.rest.api.model.DocumentAnnotations; -import es.bsc.inb.ades.rest.api.model.DocumentTracking; -import es.bsc.inb.ades.rest.api.model.Status; +import es.bsc.inb.etransafe.pretox.rest.api.model.Document; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentAnnotations; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentTracking; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainDocument; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainFinding; +import es.bsc.inb.etransafe.pretox.rest.api.model.Status; public interface DocumentService { @@ -24,7 +26,7 @@ public interface DocumentService { DocumentAnnotations findDocumentAnnotationsByDocumentId(Long id); - DocumentAnnotations findDocumentSRDomainByDocumentId(Long id); + SRDomainDocument findSRDomainDocumentByDocumentId(Long id); String findSentenceEvidenceByDocumentIdAndSentenceId(Long id, Integer sentenceId); @@ -50,5 +52,9 @@ public interface DocumentService { void removeDocument(long documentId); - void restoreDocument(long documentId); + void restoreDocument(long documentId); + + SRDomainFinding saveFinding(Long documentId, SRDomainFinding srDomainFinding); + + SRDomainFinding addFinding(Long documentId, SRDomainFinding srDomainFinding); } diff --git a/src/main/java/es/bsc/inb/ades/rest/api/services/DocumentServiceImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/DocumentServiceImpl.java similarity index 79% rename from src/main/java/es/bsc/inb/ades/rest/api/services/DocumentServiceImpl.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/DocumentServiceImpl.java index e007ac084bc428169152fb51063bc6fa1da5f08d..10495759c0ae04f7ac73d84d4269dbf87f90c9b3 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/services/DocumentServiceImpl.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/DocumentServiceImpl.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.services; +package es.bsc.inb.etransafe.pretox.rest.api.services; import java.nio.charset.Charset; import java.security.Principal; @@ -10,10 +10,8 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; import org.springframework.stereotype.Service; @@ -21,22 +19,23 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.nimbusds.jwt.JWT; -import es.bsc.inb.ades.rest.api.model.Action; -import es.bsc.inb.ades.rest.api.model.Annotation; -import es.bsc.inb.ades.rest.api.model.Document; -import es.bsc.inb.ades.rest.api.model.DocumentAnnotations; -import es.bsc.inb.ades.rest.api.model.DocumentTracking; -import es.bsc.inb.ades.rest.api.model.Finding; -import es.bsc.inb.ades.rest.api.model.RecordState; -import es.bsc.inb.ades.rest.api.model.SRDomainFinding; -import es.bsc.inb.ades.rest.api.model.Status; -import es.bsc.inb.ades.rest.api.model.Tracking; -import es.bsc.inb.ades.rest.api.repository.DocumentAnnotationsRepository; -import es.bsc.inb.ades.rest.api.repository.DocumentRepository; -import es.bsc.inb.ades.rest.api.repository.DocumentTrackingRepository; -import es.bsc.inb.ades.rest.api.util.Constants; +import es.bsc.inb.etransafe.pretox.rest.api.model.Action; +import es.bsc.inb.etransafe.pretox.rest.api.model.Annotation; +import es.bsc.inb.etransafe.pretox.rest.api.model.Document; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentAnnotations; +import es.bsc.inb.etransafe.pretox.rest.api.model.DocumentTracking; +import es.bsc.inb.etransafe.pretox.rest.api.model.Finding; +import es.bsc.inb.etransafe.pretox.rest.api.model.RecordState; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainDocument; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainFinding; +import es.bsc.inb.etransafe.pretox.rest.api.model.SRDomainFindingStatus; +import es.bsc.inb.etransafe.pretox.rest.api.model.Status; +import es.bsc.inb.etransafe.pretox.rest.api.model.Tracking; +import es.bsc.inb.etransafe.pretox.rest.api.repository.DocumentAnnotationsRepository; +import es.bsc.inb.etransafe.pretox.rest.api.repository.DocumentRepository; +import es.bsc.inb.etransafe.pretox.rest.api.repository.DocumentTrackingRepository; +import es.bsc.inb.etransafe.pretox.rest.api.util.Constants; @Service @@ -76,20 +75,28 @@ public class DocumentServiceImpl implements DocumentService { return documentAnnotationsRepository.findByDocumentId(id); } - public DocumentAnnotations findDocumentSRDomainByDocumentId(Long id) { - DocumentAnnotations docAnno = documentAnnotationsRepository.findByDocumentId(id); - List srdomains = new ArrayList(); - for (Annotation sentence : docAnno.getRelevantSentences()) { + + public SRDomainDocument findSRDomainDocumentByDocumentId(Long id) { + DocumentAnnotations documentAnnotations = documentAnnotationsRepository.findByDocumentId(id); + SRDomainDocument srdomainDocument = new SRDomainDocument(); + List srDomainFindings = documentAnnotations.getSrDomainFindings(); + if (srDomainFindings == null) { + srDomainFindings = new ArrayList<>(); + } + + for (Annotation sentence : documentAnnotations.getRelevantSentences()) { for (Finding finding : sentence.getFindings()) { - for (SRDomainFinding sr : finding.getSrDomainFindings()) { - srdomains.add(sr); + for (SRDomainFinding srFinding : finding.getSrDomainFindings()) { + srDomainFindings.add(srFinding); } } } - docAnno.setSrdomainfindings(srdomains); - docAnno.setRelevantSentences(null); - docAnno.setFindings(null); - return docAnno; + + srdomainDocument.setName(documentAnnotations.getName()); + srdomainDocument.setStatus(documentAnnotations.getStatus()); + srdomainDocument.setSrDomainFindings(srDomainFindings); + srdomainDocument.setPretoxDocumentId(documentAnnotations.getDocumentId()); + return srdomainDocument; } public Document findByDocumentId2(Long id) { @@ -140,7 +147,7 @@ public class DocumentServiceImpl implements DocumentService { } if(srDomainFindingelected!=null) { //https://stackoverflow.com/questions/47699646/updating-replacing-a-deeply-nested-object-in-mongodb-with-spring-data-mongodb - srDomainFindingelected.setStatus(status); + srDomainFindingelected.setStatus(SRDomainFindingStatus.valueOf(status)); documentAnnotationsRepository.save(documentAnnotations); createTracking(id, Action.ACCEPT, srDomainFindingelected.getTrackingSummary()); return true; @@ -325,7 +332,7 @@ public class DocumentServiceImpl implements DocumentService { retStr.append(srDomainFinding.getSPGRPCD()==null?"":srDomainFinding.getSPGRPCD()); retStr.append("|"); //GRPLBL --> Sponsor-defined Group Name, "low dose", "mid dose" - retStr.append(srDomainFinding.getGRPLBL()==null?"":srDomainFinding.getGRPLBL()); + retStr.append(srDomainFinding.getSRGRPNAM()==null?"":srDomainFinding.getSRGRPNAM()); retStr.append("|"); //SRGRPDOS --> Group Dose Level, "20 mg/kg" retStr.append(srDomainFinding.getSRGRPDOS()==null?"":srDomainFinding.getSRGRPDOS()); @@ -421,195 +428,7 @@ public class DocumentServiceImpl implements DocumentService { json_to_return.add("entities", entities); return gsonBuilder.toJson(json_to_return).toString(); } - - - -// /** -// * Generate the evidence snippet for a findind -// * @param text -// * @param findingSelected -// * @return -// */ -// private void generateFindingEvidence(JsonObject evidence, Finding findingSelected) { -// List all = findingSelected.generateSortedAnnotationsAll(); -// JsonArray entities = new JsonArray(); -// JsonArray attributes = new JsonArray(); -// JsonArray relations = new JsonArray(); -// int t = 1; -// int a = 1; -// int r = 1; -// String id_finding = ""; -// for (Annotation annotation : all) { -// JsonArray values = new JsonArray(); -// String type = annotation.getFeature("ANNOTATION_TYPE"); -// values.add("T"+t); -// values.add(type); -// JsonArray offste = new JsonArray(); -// JsonArray offste2 = new JsonArray(); -// offste.add(annotation.getStartOffset()); -// offste.add(annotation.getEndOffset()); -// offste2.add(offste); -// values.add(offste2); -// entities.add(values); -// if(type.equals("FINDING") || type.equals("STUDY_TESTCD") ) { -// id_finding = "T"+t; -// JsonArray values_a = new JsonArray(); -// values_a.add("A"+a); -// values_a.add("Notorious"); -// values_a.add(id_finding); -// attributes.add(values_a); -// a++; -// }else { -// JsonArray values_r = new JsonArray(); -// values_r.add("R"+r); -// values_r.add("Relation"); -// JsonArray values_r_e = new JsonArray(); -// JsonArray values_r_e_v = new JsonArray(); -// values_r_e_v.add("Entity"); -// values_r_e_v.add(id_finding); -// values_r_e.add(values_r_e_v); -// JsonArray values_r_e_v_2 = new JsonArray(); -// values_r_e_v_2.add("Subentity"); -// values_r_e_v_2.add("T"+t); -// values_r_e.add(values_r_e_v_2); -// values_r.add(values_r_e); -// relations.add(values_r); -// r++; -// } -// t++; -// } -// evidence.add("entities", entities); -// evidence.add("attributes", attributes); -// evidence.add("relations", relations); -// } -// -// /** -// * -// * @param text -// * @param findingSelected -// * @return -// */ -// private String generateFindingSnippet2(String text, Finding findingSelected) { -// Gson gsonBuilder = new GsonBuilder().create(); -// JsonObject finding = new JsonObject(); -// finding.addProperty("text", text); -// List all = findingSelected.generateSortedAnnotationsAll(); -// JsonArray entities = new JsonArray(); -// JsonArray attributes = new JsonArray(); -// JsonArray relations = new JsonArray(); -// int t = 1; -// int a = 1; -// int r = 1; -// String id_finding = ""; -// for (Annotation annotation : all) { -// JsonArray values = new JsonArray(); -// String type = annotation.getFeature("ANNOTATION_TYPE"); -// values.add("T"+t); -// values.add(type); -// JsonArray offste = new JsonArray(); -// JsonArray offste2 = new JsonArray(); -// offste.add(annotation.getStartOffset()); -// offste.add(annotation.getEndOffset()); -// offste2.add(offste); -// values.add(offste2); -// entities.add(values); -// if(type.equals("FINDING") || type.equals("STUDY_TESTCD") ) { -// id_finding = "T"+t; -// JsonArray values_a = new JsonArray(); -// values_a.add("A"+a); -// values_a.add("Notorious"); -// values_a.add(id_finding); -// attributes.add(values_a); -// a++; -// }else { -// JsonArray values_r = new JsonArray(); -// values_r.add("R"+r); -// values_r.add("Relation"); -// JsonArray values_r_e = new JsonArray(); -// JsonArray values_r_e_v = new JsonArray(); -// values_r_e_v.add("Entity"); -// values_r_e_v.add(id_finding); -// values_r_e.add(values_r_e_v); -// JsonArray values_r_e_v_2 = new JsonArray(); -// values_r_e_v_2.add("Subentity"); -// values_r_e_v_2.add("T"+t); -// values_r_e.add(values_r_e_v_2); -// values_r.add(values_r_e); -// relations.add(values_r); -// r++; -// } -// t++; -// } -// finding.add("entities", entities); -// finding.add("attributes", attributes); -// finding.add("relations", relations); -// return gsonBuilder.toJson(finding).toString(); -// } - -// /** -// * -// * @param text -// * @param findingSelected -// * @return -// */ -// private String generateFindingsSnippet4(String text, List findings) { -// Gson gsonBuilder = new GsonBuilder().create(); -// JsonObject findings_evidence = new JsonObject(); -// findings_evidence.addProperty("text", text); -// JsonArray entities = new JsonArray(); -// JsonArray attributes = new JsonArray(); -// JsonArray relations = new JsonArray(); -// int t = 1; -// int a = 1; -// int r = 1; -// for (Finding findingSelected : findings) { -// List all = findingSelected.generateSortedAnnotationsAll(); -// String id_finding = ""; -// for (Annotation annotation : all) { -// JsonArray values = new JsonArray(); -// String type = annotation.getFeature("ANNOTATION_TYPE"); -// values.add("T"+t); -// values.add(type); -// JsonArray offste = new JsonArray(); -// JsonArray offste2 = new JsonArray(); -// offste.add(annotation.getStartOffset()); -// offste.add(annotation.getEndOffset()); -// offste2.add(offste); -// values.add(offste2); -// entities.add(values); -// if(type.equals("FINDING") || type.equals("STUDY_TESTCD") ) { -// id_finding = "T"+t; -// JsonArray values_a = new JsonArray(); -// values_a.add("A"+a); -// values_a.add("Notorious"); -// values_a.add(id_finding); -// attributes.add(values_a); -// a++; -// }else { -// JsonArray values_r = new JsonArray(); -// values_r.add("R"+r); -// values_r.add("Relation"); -// JsonArray values_r_e = new JsonArray(); -// JsonArray values_r_e_v = new JsonArray(); -// values_r_e_v.add("Entity"); -// values_r_e_v.add(id_finding); -// values_r_e.add(values_r_e_v); -// JsonArray values_r_e_v_2 = new JsonArray(); -// values_r_e_v_2.add("Subentity"); -// values_r_e_v_2.add("T"+t); -// values_r_e.add(values_r_e_v_2); -// values_r.add(values_r_e); -// relations.add(values_r); -// r++; -// } -// t++; -// } -// findings_evidence.add("entities", entities); -// findings_evidence.add("attributes", attributes); -// findings_evidence.add("relations", relations); -// } -// return gsonBuilder.toJson(findings_evidence).toString(); -// } + /** * Generate the snippet only of the text without annotations. @@ -986,7 +805,7 @@ public class DocumentServiceImpl implements DocumentService { documentAnnotation.setStatus(status); documentRepository.save(document); documentAnnotationsRepository.save(documentAnnotation); - createTracking(id, Action.MOVE, status.toString()); + createTracking(id, Action.MOVE, status.toString()); return status; } @@ -1046,5 +865,41 @@ public class DocumentServiceImpl implements DocumentService { public void setRequest(HttpServletRequest request) { this.request = request; } - + + @Override + public SRDomainFinding saveFinding(Long documentId, SRDomainFinding srDomainFinding) { + DocumentAnnotations documentAnnotations = this.findDocumentAnnotationsByDocumentId(documentId); + SRDomainFinding srDomainFinding2 = findSRDomainFinding(documentAnnotations, srDomainFinding.getSrDomainId()); + BeanUtils.copyProperties(srDomainFinding, srDomainFinding2); + documentAnnotationsRepository.save(documentAnnotations); + return srDomainFinding; + } + + private SRDomainFinding findSRDomainFinding(DocumentAnnotations documentAnnotations, Integer id) { + for (Annotation annotation : documentAnnotations.getRelevantSentences()) { + for (Finding finding : annotation.getFindings()) { + for (SRDomainFinding srDomainFinding : finding.getSrDomainFindings()) { + if(srDomainFinding.getSrDomainId().equals(id)) { + return srDomainFinding; + } + } + + } + } + return null; + } + + @Override + public SRDomainFinding addFinding(Long documentId, SRDomainFinding srDomainFinding) { + DocumentAnnotations documentAnnotations = this.findDocumentAnnotationsByDocumentId(documentId); + List srdomainfindings = documentAnnotations.getSrDomainFindings(); + if (srdomainfindings == null) { + srdomainfindings = new ArrayList<>(); + documentAnnotations.setSrDomainFindings(srdomainfindings); + } + + srdomainfindings.add(srDomainFinding); + documentAnnotationsRepository.save(documentAnnotations); + return srDomainFinding; + } } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/FileService.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/FileService.java new file mode 100644 index 0000000000000000000000000000000000000000..e1a2a03d14c0fe9f5666155cdfbe2613841b14e2 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/FileService.java @@ -0,0 +1,26 @@ +package es.bsc.inb.etransafe.pretox.rest.api.services; + +import java.util.List; + +import org.springframework.web.multipart.MultipartFile; + +public interface FileService { + + + /* + Metodo para guardar los archivos + */ + public void save(MultipartFile file); + + /* + Metodo para Borrar un archivo + */ + public String deleteFile(String filename); + /** + * + * @param files + * @return + */ + public List validate(MultipartFile[] files, Boolean allow_duplicates); + +} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/services/FileServiceImp.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/FileServiceImp.java similarity index 76% rename from src/main/java/es/bsc/inb/ades/rest/api/services/FileServiceImp.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/FileServiceImp.java index 1aafb88b050d6761142478ad40663ed430442245..1474e6ab3e8a69ab116796b7def2f9b4a86b20fb 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/services/FileServiceImp.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/FileServiceImp.java @@ -1,29 +1,9 @@ -package es.bsc.inb.ades.rest.api.services; +package es.bsc.inb.etransafe.pretox.rest.api.services; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.bson.Document; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.stereotype.Service; -import org.springframework.util.FileSystemUtils; -import org.springframework.web.multipart.MultipartFile; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.mongodb.client.MongoCollection; -import com.mongodb.client.MongoDatabase; - -import es.bsc.inb.ades.rest.api.model.RecordState; - import java.io.ByteArrayInputStream; -import java.io.File; import java.io.IOException; -import java.net.MalformedURLException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -34,7 +14,20 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Stream; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.bson.Document; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.gridfs.GridFsOperations; +import org.springframework.data.mongodb.gridfs.GridFsTemplate; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; @Service public class FileServiceImp implements FileService { @@ -48,15 +41,12 @@ public class FileServiceImp implements FileService { @Autowired DocumentService documentService; - @Override - public void init() { - try { - Files.createDirectory(root); - } catch (IOException e) { - throw new RuntimeException("No se puede inicializar la carpeta uploads"); - } - } + @Autowired + private GridFsOperations operations; + @Autowired + private GridFsTemplate gridFsTemplate; + /** * Execute process in a document * @param file @@ -82,13 +72,31 @@ public class FileServiceImp implements FileService { e.printStackTrace(); } } + + /** + * Execute process in a document + * @param file + * @param outputGATEFile + * @throws ResourceInstantiationException + * @throws IOException + * @throws JsonGenerationException + * @throws InvalidOffsetException + */ + public String saveLegacyReport(MultipartFile file) throws IOException{ + DBObject metadata = new BasicDBObject(); + metadata.put("fileSize", file.getSize()); + metadata.put("type", "legacy_report"); + Object fileID = gridFsTemplate.store(file.getInputStream(), file.getOriginalFilename(), file.getContentType(), metadata); + return fileID.toString(); + } + /** * return if document id exist in database. * @param doc */ private Boolean documentIdExist(Document doc) { Long documentId = doc.getLong("id"); - es.bsc.inb.ades.rest.api.model.Document document = documentService.findByDocumentId(documentId); + es.bsc.inb.etransafe.pretox.rest.api.model.Document document = documentService.findByDocumentId(documentId); if(document!=null) { return true; } @@ -101,48 +109,14 @@ public class FileServiceImp implements FileService { */ private Boolean documentNameExist(Document doc) { String name = doc.getString("name"); - List documents = documentService.findByDocumentsName(name); + List documents = documentService.findByDocumentsName(name); if(documents!=null && documents.size()>0) { return true; } return false; } - @Override - public Resource load(String filename) { - try { - Path file = root.resolve(filename); - Resource resource = new UrlResource(file.toUri()); - - if(resource.exists() || resource.isReadable()){ - return resource; - }else{ - throw new RuntimeException("No se puede leer el archivo "); - } - - }catch (MalformedURLException e){ - throw new RuntimeException("Error: " + e.getMessage()); - } - } - @Override - public void deleteAll() { - FileSystemUtils.deleteRecursively(root.toFile()); - } - - @Override - public Stream loadAll(){ - //Files.walk recorre nuestras carpetas (uploads) buscando los archivos - // el 1 es la profundidad o nivel que queremos recorrer - // :: Referencias a metodos - // Relativize sirve para crear una ruta relativa entre la ruta dada y esta ruta - try{ - return Files.walk(this.root,1).filter(path -> !path.equals(this.root)) - .map(this.root::relativize); - }catch (RuntimeException | IOException e){ - throw new RuntimeException("No se pueden cargar los archivos "); - } - } @Override public String deleteFile(String filename){ @@ -158,7 +132,6 @@ public class FileServiceImp implements FileService { @Override public List validate(MultipartFile[] files, Boolean allow_duplicates) { List errors = new ArrayList(); - Map map = new HashMap(); List annotations_files = new ArrayList(); List documents_files = new ArrayList(); List documents_files_multipart = new ArrayList(); @@ -250,4 +223,6 @@ public class FileServiceImp implements FileService { return new ArrayList(errors); } + + } diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java new file mode 100644 index 0000000000000000000000000000000000000000..4dae59218999616acfe4e8bfe84a6919f65b8a6f --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportService.java @@ -0,0 +1,59 @@ +package es.bsc.inb.etransafe.pretox.rest.api.services; + +import java.io.IOException; +import java.util.List; + +import org.springframework.web.multipart.MultipartFile; + +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; + +public interface ReportService { + + + /** + * Save legacy report + * @param file + */ + public Report upload(MultipartFile file) throws IOException; + /** + * Validate legacy report save + * @param files + * @param allow_duplicates + * @return + */ + public List validateUpload(MultipartFile[] files); + + /** + * download legacy report content, + * @param id + * @return + * @throws IOException + * @throws IllegalStateException + */ + public Report download(String id) throws IllegalStateException, IOException; + /** + * List of reports. + * @return + */ + public List list(); + /** + * Remove report + * @param documentId + * @return + */ + public Report remove(String reportId); + /** + * Restore report + * @param documentId + * @return + */ + public Report restore(String reportId); + /** + * + * @param id + * @return + */ + public Report findById(String id); + + +} diff --git a/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..67d086c65b8ce3298973b696ca6e6c261d239b75 --- /dev/null +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/services/ReportServiceImpl.java @@ -0,0 +1,128 @@ +package es.bsc.inb.etransafe.pretox.rest.api.services; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.bson.types.ObjectId; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.gridfs.GridFsOperations; +import org.springframework.data.mongodb.gridfs.GridFsTemplate; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.fasterxml.jackson.core.JsonGenerationException; +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; +import com.mongodb.client.gridfs.model.GridFSFile; + +import es.bsc.inb.etransafe.pretox.rest.api.model.RecordState; +import es.bsc.inb.etransafe.pretox.rest.api.model.Report; +import es.bsc.inb.etransafe.pretox.rest.api.model.Status; +import es.bsc.inb.etransafe.pretox.rest.api.repository.ReportRepository; + +@Service +public class ReportServiceImpl implements ReportService { + + @Autowired + ReportRepository reportRepository; + + @Autowired + private GridFsOperations operations; + + @Autowired + private GridFsTemplate gridFsTemplate; + + /** + * Execute process in a document + * + * @param file + * @param outputGATEFile + * @throws ResourceInstantiationException + * @throws IOException + * @throws JsonGenerationException + * @throws InvalidOffsetException + */ + public Report upload(MultipartFile file) throws IOException { + DBObject metadata = new BasicDBObject(); + metadata.put("fileSize", file.getSize()); + metadata.put("type", "legacy_report"); + ObjectId fileID = gridFsTemplate.store(file.getInputStream(), file.getOriginalFilename(), file.getContentType(), + metadata); + GridFSFile gridFSFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(fileID))); + Report report = new Report(); + if (gridFSFile != null && gridFSFile.getMetadata() != null) { + report.setFileName(gridFSFile.getFilename()); + report.setName(gridFSFile.getFilename().replace(".pdf", "")); + report.setFileType(gridFSFile.getMetadata().get("_contentType").toString()); + report.setFileSize(gridFSFile.getMetadata().get("fileSize").toString()); + report.setGridFSId(fileID.toString()); + report.setUploadDate(gridFSFile.getUploadDate()); + report.setStatus(Status.READY); + report.setRecordState(RecordState.ACTIVE); + } + reportRepository.save(report); + return report; + } + + @Override + public List validateUpload(MultipartFile[] files) { + List errors = new ArrayList(); + for (MultipartFile multipartFile : files) { + if (!multipartFile.getOriginalFilename().endsWith(".pdf")) { + errors.add("Only pdf files are allowed to upload" + multipartFile.getOriginalFilename() + "."); + } else { + List reports = reportRepository.findByFileName(multipartFile.getOriginalFilename()); + boolean isRepeated = reports != null && reports.stream().anyMatch(report -> report.getRecordState() == RecordState.ACTIVE); + if (isRepeated) { + errors.add("There is an active report with the file name already in the database: " + + multipartFile.getOriginalFilename() + "."); + } + } + } + + return errors; + } + + @Override + public Report download(String id) throws IllegalStateException, IOException { + GridFSFile gridFSFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id))); + Report loadFile = new Report(); + if (gridFSFile != null && gridFSFile.getMetadata() != null) { + loadFile.setFileName(gridFSFile.getFilename()); + loadFile.setFileType(gridFSFile.getMetadata().get("_contentType").toString()); + loadFile.setFileSize(gridFSFile.getMetadata().get("fileSize").toString()); + loadFile.setFile(IOUtils.toByteArray(operations.getResource(gridFSFile).getInputStream())); + } + return loadFile; + } + + @Override + public List list() { + return reportRepository.findAllActiveReports(); + } + + @Override + public Report remove(String reportId) { + Report report = this.findById(reportId); + report.setRecordState(RecordState.DELETED); + return reportRepository.save(report); + } + + @Override + public Report findById(String reportId) { + return reportRepository.findById(reportId).get(); + } + + @Override + public Report restore(String reportId) { + Report report = this.findById(reportId); + report.setRecordState(RecordState.ACTIVE); + return reportRepository.save(report); + } + + +} diff --git a/src/main/java/es/bsc/inb/ades/rest/api/util/Constants.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/util/Constants.java similarity index 94% rename from src/main/java/es/bsc/inb/ades/rest/api/util/Constants.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/util/Constants.java index 13caede0d343d42a6a70725b70340d8962983686..5a2844dcd2c74b1e7e5b7334a1bef87167af4bdf 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/util/Constants.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/util/Constants.java @@ -1,4 +1,4 @@ -package es.bsc.inb.ades.rest.api.util; +package es.bsc.inb.etransafe.pretox.rest.api.util; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/es/bsc/inb/ades/rest/api/util/VisualizationHTMLUtil.java b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/util/VisualizationHTMLUtil.java similarity index 97% rename from src/main/java/es/bsc/inb/ades/rest/api/util/VisualizationHTMLUtil.java rename to src/main/java/es/bsc/inb/etransafe/pretox/rest/api/util/VisualizationHTMLUtil.java index f81953242783960d589b3c0350f3c86d101edce9..de358e0d8d62263ffc42fea564c30642633b1b59 100644 --- a/src/main/java/es/bsc/inb/ades/rest/api/util/VisualizationHTMLUtil.java +++ b/src/main/java/es/bsc/inb/etransafe/pretox/rest/api/util/VisualizationHTMLUtil.java @@ -1,7 +1,7 @@ -package es.bsc.inb.ades.rest.api.util; +package es.bsc.inb.etransafe.pretox.rest.api.util; -import es.bsc.inb.ades.rest.api.model.Annotation; -import es.bsc.inb.ades.rest.api.model.Feature; +import es.bsc.inb.etransafe.pretox.rest.api.model.Annotation; +import es.bsc.inb.etransafe.pretox.rest.api.model.Feature; public class VisualizationHTMLUtil { diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 5b31d2b7691cecf6419c7e46346b57514f2ab539..58bf9452995b305f058d8ce657a06116222b8ad2 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -1,8 +1,15 @@ spring.application.name =ades_rest_api server.servlet.context-path=/pretoxapi +springdoc.api-docs.path=/api-docs +springdoc.swagger-ui.path=/api.html #Spring Boot Port server.port = ${SERVER_PORT} #PRETOX Database spring.data.mongodb.uri=${MONGO_URI} #KEYCLOCK configuration variables spring.security.oauth2.resourceserver.jwt.jwk-set-uri=${OAUTH2_RS_CERTS} +#spring upload configuration +spring.servlet.multipart.enabled = true +spring.servlet.multipart.max-file-size = 200MB +spring.servlet.multipart.max-request-size = 200MB +