diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c28d4d..38b5906 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Changelog + All notable changes to this project will be documented in this file. ## [Unreleased] diff --git a/bamboo-specs/pom.xml b/bamboo-specs/pom.xml index d35f676..73e9175 100644 --- a/bamboo-specs/pom.xml +++ b/bamboo-specs/pom.xml @@ -1,4 +1,4 @@ - 4.0.0 diff --git a/bamboo-specs/src/main/java/buildjob/PlanSpec.java b/bamboo-specs/src/main/java/buildjob/PlanSpec.java index c6f9629..49dfcf3 100644 --- a/bamboo-specs/src/main/java/buildjob/PlanSpec.java +++ b/bamboo-specs/src/main/java/buildjob/PlanSpec.java @@ -40,6 +40,7 @@ public class PlanSpec { private static final String SERVICE_KEY = SERVICE_NAME.toUpperCase().replaceAll("-", ""); + /** * Run main to publish plan on Bamboo */ @@ -58,9 +59,15 @@ public class PlanSpec { bambooServer.publish(secPlanPermission); } + private PlanPermissions createPlanPermission(PlanIdentifier planIdentifier) { - Permissions permission = new Permissions() - .userPermissions("atlbamboo", PermissionType.EDIT, PermissionType.VIEW, PermissionType.ADMIN, PermissionType.CLONE, PermissionType.BUILD) + + Permissions permission = new Permissions().userPermissions("atlbamboo", + PermissionType.EDIT, + PermissionType.VIEW, + PermissionType.ADMIN, + PermissionType.CLONE, + PermissionType.BUILD) .groupPermissions("development", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE, PermissionType.BUILD) .groupPermissions("devplant", PermissionType.EDIT, PermissionType.VIEW, PermissionType.CLONE, PermissionType.BUILD) .loggedInUserPermissions(PermissionType.VIEW) @@ -68,104 +75,52 @@ public class PlanSpec { return new PlanPermissions(planIdentifier.getProjectKey(), planIdentifier.getPlanKey()).permissions(permission); } + private Project project() { - return new Project() - .name("RED") - .key(new BambooKey("RED")); + + return new Project().name("RED").key(new BambooKey("RED")); } + public Plan createPlan() { - return new Plan( - project(), - SERVICE_NAME, new BambooKey(SERVICE_KEY)) - .description("Plan created from (enter repository url of your plan)") + + return new Plan(project(), SERVICE_NAME, new BambooKey(SERVICE_KEY)).description("Plan created from (enter repository url of your plan)") .variables(new Variable("maven_add_param", "")) - .stages(new Stage("Default Stage") - .jobs(new Job("Default Job", - new BambooKey("JOB1")) - .tasks( - new ScriptTask() - .description("Clean") - .inlineBody("#!/bin/bash\n" + - "set -e\n" + - "rm -rf ./*"), - new VcsCheckoutTask() - .description("Checkout Default Repository") - .cleanCheckout(true) - .checkoutItems(new CheckoutItem().defaultRepository()), - new ScriptTask() - .description("Build") - .location(Location.FILE) - .fileFromPath("bamboo-specs/src/main/resources/scripts/build-java.sh") - .argument(SERVICE_NAME), - createJUnitParserTask() - .description("Resultparser") - .resultDirectories("**/test-reports/*.xml, **/target/surefire-reports/*.xml, **/target/failsafe-reports/*.xml") - .enabled(true), - new InjectVariablesTask() - .description("Inject git Tag") - .path("git.tag") - .namespace("g") - .scope(InjectVariablesScope.LOCAL), - new VcsTagTask() - .description("${bamboo.g.gitTag}") - .tagName("${bamboo.g.gitTag}") - .defaultRepository()) - .dockerConfiguration( - new DockerConfiguration() - .image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") - .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") - .volume("/var/run/docker.sock", "/var/run/docker.sock") - ) - ) - ) + .stages(new Stage("Default Stage").jobs(new Job("Default Job", new BambooKey("JOB1")).tasks(new ScriptTask().description("Clean") + .inlineBody("#!/bin/bash\n" + "set -e\n" + "rm -rf ./*"), + new VcsCheckoutTask().description("Checkout Default Repository").cleanCheckout(true).checkoutItems(new CheckoutItem().defaultRepository()), + new ScriptTask().description("Build").location(Location.FILE).fileFromPath("bamboo-specs/src/main/resources/scripts/build-java.sh").argument(SERVICE_NAME), + createJUnitParserTask().description("Resultparser") + .resultDirectories("**/test-reports/*.xml, **/target/surefire-reports/*.xml, **/target/failsafe-reports/*.xml") + .enabled(true), + new InjectVariablesTask().description("Inject git Tag").path("git.tag").namespace("g").scope(InjectVariablesScope.LOCAL), + new VcsTagTask().description("${bamboo.g.gitTag}").tagName("${bamboo.g.gitTag}").defaultRepository()) + .dockerConfiguration(new DockerConfiguration().image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") + .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") + .volume("/var/run/docker.sock", "/var/run/docker.sock")))) .linkedRepositories("RED / " + SERVICE_NAME) .triggers(new BitbucketServerTrigger()) - .planBranchManagement(new PlanBranchManagement() - .createForVcsBranch() - .delete(new BranchCleanup() - .whenInactiveInRepositoryAfterDays(14)) + .planBranchManagement(new PlanBranchManagement().createForVcsBranch() + .delete(new BranchCleanup().whenInactiveInRepositoryAfterDays(14)) .notificationForCommitters()); } + + public Plan createSecBuild() { - return new Plan( - project(), - SERVICE_NAME + "-Sec", new BambooKey(SERVICE_KEY + "SEC")) - .description("Security Analysis Plan") - .stages(new Stage("Default Stage") - .jobs(new Job("Default Job", - new BambooKey("JOB1")) - .tasks( - new ScriptTask() - .description("Clean") - .inlineBody("#!/bin/bash\n" + - "set -e\n" + - "rm -rf ./*"), - new VcsCheckoutTask() - .description("Checkout Default Repository") - .cleanCheckout(true) - .checkoutItems(new CheckoutItem().defaultRepository()), - new ScriptTask() - .description("Sonar") - .location(Location.FILE) - .fileFromPath("bamboo-specs/src/main/resources/scripts/sonar-java.sh") - .argument(SERVICE_NAME)) - .dockerConfiguration( - new DockerConfiguration() - .image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") - .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") - .dockerRunArguments("--net=host") - .volume("/var/run/docker.sock", "/var/run/docker.sock") - ) - ) - ) + + return new Plan(project(), SERVICE_NAME + "-Sec", new BambooKey(SERVICE_KEY + "SEC")).description("Security Analysis Plan") + .stages(new Stage("Default Stage").jobs(new Job("Default Job", new BambooKey("JOB1")).tasks(new ScriptTask().description("Clean") + .inlineBody("#!/bin/bash\n" + "set -e\n" + "rm -rf ./*"), + new VcsCheckoutTask().description("Checkout Default Repository").cleanCheckout(true).checkoutItems(new CheckoutItem().defaultRepository()), + new ScriptTask().description("Sonar").location(Location.FILE).fileFromPath("bamboo-specs/src/main/resources/scripts/sonar-java.sh").argument(SERVICE_NAME)) + .dockerConfiguration(new DockerConfiguration().image("nexus.iqser.com:5001/infra/maven:3.8.4-openjdk-17-slim") + .volume("/etc/maven/settings.xml", "/usr/share/maven/conf/settings.xml") + .dockerRunArguments("--net=host") + .volume("/var/run/docker.sock", "/var/run/docker.sock")))) .linkedRepositories("RED / " + SERVICE_NAME) - .triggers( - new ScheduledTrigger() - .scheduleOnceDaily(LocalTime.of(23, 00))) - .planBranchManagement(new PlanBranchManagement() - .createForVcsBranchMatching("release.*") - .notificationForCommitters()); - } + .triggers(new ScheduledTrigger().scheduleOnceDaily(LocalTime.of(23, 00))) + .planBranchManagement(new PlanBranchManagement().createForVcsBranchMatching("release.*").notificationForCommitters()); + } + } diff --git a/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java b/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java index 68b4ae7..6e1b615 100644 --- a/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java +++ b/bamboo-specs/src/test/java/buildjob/PlanSpecTest.java @@ -1,6 +1,5 @@ package buildjob; - import org.junit.Test; import com.atlassian.bamboo.specs.api.builders.plan.Plan; diff --git a/pom.xml b/pom.xml index 24844f3..3883610 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/redaction-report-service-image-v1/pom.xml b/redaction-report-service-image-v1/pom.xml index 67fcb73..ca046d8 100644 --- a/redaction-report-service-image-v1/pom.xml +++ b/redaction-report-service-image-v1/pom.xml @@ -1,12 +1,12 @@ - com.iqser.red platform-docker-dependency 1.2.0 - + 4.0.0 diff --git a/redaction-report-service-v1/pom.xml b/redaction-report-service-v1/pom.xml index fefbea3..5567f4a 100644 --- a/redaction-report-service-v1/pom.xml +++ b/redaction-report-service-v1/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -8,7 +8,7 @@ com.iqser.red platform-dependency 1.10.0 - + com.iqser.red.service @@ -48,7 +48,7 @@ org.sonarsource.scanner.maven sonar-maven-plugin 3.9.0.2155 - + org.owasp dependency-check-maven diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml b/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml index bf5bafe..0350a6d 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml +++ b/redaction-report-service-v1/redaction-report-service-api-v1/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/ReportRequestMessage.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/ReportRequestMessage.java index dfa01be..c5e4ad8 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/ReportRequestMessage.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/ReportRequestMessage.java @@ -1,15 +1,15 @@ package com.iqser.red.service.redaction.report.v1.api.model; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @AllArgsConstructor diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/StoredFileInformation.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/StoredFileInformation.java index 7c66631..a3302c7 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/StoredFileInformation.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/model/StoredFileInformation.java @@ -1,6 +1,7 @@ package com.iqser.red.service.redaction.report.v1.api.model; import com.dslplatform.json.CompiledJson; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java index 2f712ed..9f40aa8 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/PlaceholderResource.java @@ -1,11 +1,11 @@ package com.iqser.red.service.redaction.report.v1.api.resource; +import java.util.List; + import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import java.util.List; - public interface PlaceholderResource { String PLACEHOLDERS_PATH = "/placeholders"; @@ -17,11 +17,12 @@ public interface PlaceholderResource { String REPORT_TEMPLATE_ID_PATH_VARIABLE = "/report-template-id/{" + REPORT_TEMPLATE_ID + "}"; String PLACEHOLDER_PATH_VARIABLE = "/placeholder/{" + PLACEHOLDER + "}"; + @GetMapping(value = PLACEHOLDERS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) List getPlaceholders(); + @GetMapping(value = PLACEHOLDERS_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + REPORT_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) - List getPlaceholdersOfTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, - @PathVariable(REPORT_TEMPLATE_ID) String reportTemplateId); + List getPlaceholdersOfTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(REPORT_TEMPLATE_ID) String reportTemplateId); } diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/RSSResource.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/RSSResource.java index 8cafa52..2ffb714 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/RSSResource.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/RSSResource.java @@ -19,7 +19,6 @@ public interface RSSResource { @GetMapping(value = RSS_PATH + DOSSIER_ID_PATH_VARIABLE, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}) - RSSResponse getRSS(@PathVariable(DOSSIER_ID) String dossierId, - @RequestParam(value = "fileId", required = false) String fileId); + RSSResponse getRSS(@PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = "fileId", required = false) String fileId); } diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java index 28b6d1f..082877e 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/ReportTemplateResource.java @@ -1,13 +1,14 @@ package com.iqser.red.service.redaction.report.v1.api.resource; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +import java.util.List; + import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import java.util.List; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; public interface ReportTemplateResource { @@ -17,8 +18,8 @@ public interface ReportTemplateResource { String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/dossier-template-id/{" + DOSSIER_TEMPLATE_ID + "}"; + @PostMapping(value = REPORT_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, - @RequestBody JSONPrimitive placeholder); + List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody JSONPrimitive placeholder); } diff --git a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/StatusReportResource.java b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/StatusReportResource.java index 53228e4..6e2b9d3 100644 --- a/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/StatusReportResource.java +++ b/redaction-report-service-v1/redaction-report-service-api-v1/src/main/java/com/iqser/red/service/redaction/report/v1/api/resource/StatusReportResource.java @@ -1,10 +1,11 @@ package com.iqser.red.service.redaction.report.v1.api.resource; -import com.iqser.red.service.redaction.report.v1.api.model.StatusReportResponse; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import com.iqser.red.service.redaction.report.v1.api.model.StatusReportResponse; + public interface StatusReportResource { String STATUS_REPORT = "/statusReport"; diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml b/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml index 3cac3de..1ff49c7 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml +++ b/redaction-report-service-v1/redaction-report-service-server-v1/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/Application.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/Application.java index 6f33fa7..28ede20 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/Application.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/Application.java @@ -1,10 +1,5 @@ package com.iqser.red.service.redaction.report.v1.server; -import com.iqser.red.commons.spring.DefaultWebMvcConfiguration; -import com.iqser.red.service.redaction.report.v1.server.client.DossierClient; -import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration; -import com.iqser.red.service.redaction.report.v1.server.settings.ReportTemplateSettings; - import org.springframework.boot.SpringApplication; import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -15,6 +10,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.scheduling.annotation.EnableAsync; +import com.iqser.red.commons.spring.DefaultWebMvcConfiguration; +import com.iqser.red.service.redaction.report.v1.server.client.DossierClient; +import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration; +import com.iqser.red.service.redaction.report.v1.server.settings.ReportTemplateSettings; + import io.micrometer.core.aop.TimedAspect; import io.micrometer.core.instrument.MeterRegistry; @@ -35,8 +35,10 @@ public class Application { SpringApplication.run(Application.class, args); } + @Bean public TimedAspect timedAspect(MeterRegistry registry) { + return new TimedAspect(registry); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java index 7416110..ce8f839 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesClient.java @@ -1,9 +1,10 @@ package com.iqser.red.service.redaction.report.v1.server.client; +import org.springframework.cloud.openfeign.FeignClient; import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesResource; -import org.springframework.cloud.openfeign.FeignClient; @FeignClient(name = "DossierAttributesResource", url = "${persistence-service.url}") public interface DossierAttributesClient extends DossierAttributesResource { + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java index 8ef52f8..5bab6be 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierAttributesConfigClient.java @@ -1,8 +1,10 @@ package com.iqser.red.service.redaction.report.v1.server.client; -import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesConfigResource; import org.springframework.cloud.openfeign.FeignClient; +import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesConfigResource; + @FeignClient(name = "DossierAttributesConfigResource", url = "${persistence-service.url}") public interface DossierAttributesConfigClient extends DossierAttributesConfigResource { + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierClient.java index c6c773f..b0759dd 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/DossierClient.java @@ -1,8 +1,9 @@ package com.iqser.red.service.redaction.report.v1.server.client; -import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource; import org.springframework.cloud.openfeign.FeignClient; +import com.iqser.red.service.persistence.service.v1.api.resources.DossierResource; + @FeignClient(name = "DossierResource", url = "${persistence-service.url}") public interface DossierClient extends DossierResource { diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileAttributesConfigClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileAttributesConfigClient.java index 8276cfe..63c8a4e 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileAttributesConfigClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileAttributesConfigClient.java @@ -1,8 +1,10 @@ package com.iqser.red.service.redaction.report.v1.server.client; -import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesConfigResource; import org.springframework.cloud.openfeign.FeignClient; +import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesConfigResource; + @FeignClient(name = "FileAttributesResource", url = "${persistence-service.url}") public interface FileAttributesConfigClient extends FileAttributesConfigResource { + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileStatusClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileStatusClient.java index cdaad36..cc05c85 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileStatusClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/FileStatusClient.java @@ -1,8 +1,9 @@ package com.iqser.red.service.redaction.report.v1.server.client; -import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource; import org.springframework.cloud.openfeign.FeignClient; +import com.iqser.red.service.persistence.service.v1.api.resources.StatusResource; + @FeignClient(name = "StatusResource", url = "${persistence-service.url}") public interface FileStatusClient extends StatusResource { diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/RedactionLogClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/RedactionLogClient.java index 6f2bf72..f712b42 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/RedactionLogClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/RedactionLogClient.java @@ -1,8 +1,10 @@ package com.iqser.red.service.redaction.report.v1.server.client; -import com.iqser.red.service.persistence.service.v1.api.resources.RedactionLogResource; import org.springframework.cloud.openfeign.FeignClient; +import com.iqser.red.service.persistence.service.v1.api.resources.RedactionLogResource; + @FeignClient(name = "RedactionLogResource", url = "${persistence-service.url}") public interface RedactionLogClient extends RedactionLogResource { + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/ReportTemplateClient.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/ReportTemplateClient.java index 072a765..d58c4c5 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/ReportTemplateClient.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/client/ReportTemplateClient.java @@ -1,8 +1,9 @@ package com.iqser.red.service.redaction.report.v1.server.client; -import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource; import org.springframework.cloud.openfeign.FeignClient; +import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource; + @FeignClient(name = "ReportTemplateResource", url = "${persistence-service.url}") public interface ReportTemplateClient extends ReportTemplateResource { diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/configuration/MessagingConfiguration.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/configuration/MessagingConfiguration.java index 66a1403..bd3dd9a 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/configuration/MessagingConfiguration.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/configuration/MessagingConfiguration.java @@ -1,11 +1,12 @@ package com.iqser.red.service.redaction.report.v1.server.configuration; -import lombok.RequiredArgsConstructor; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.QueueBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import lombok.RequiredArgsConstructor; + @Configuration @RequiredArgsConstructor public class MessagingConfiguration { @@ -39,10 +40,7 @@ public class MessagingConfiguration { @Bean public Queue reportResultQueue() { - return QueueBuilder.durable(REPORT_RESULT_QUEUE) - .withArgument("x-dead-letter-exchange", "") - .withArgument("x-dead-letter-routing-key", REPORT_RESULT_DLQ) - .build(); + return QueueBuilder.durable(REPORT_RESULT_QUEUE).withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", REPORT_RESULT_DLQ).build(); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java index 74322ae..c188dc9 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/PlaceholderController.java @@ -1,15 +1,17 @@ package com.iqser.red.service.redaction.report.v1.server.controller; -import com.iqser.red.service.redaction.report.v1.api.resource.PlaceholderResource; -import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; - import java.util.ArrayList; import java.util.List; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import com.iqser.red.service.redaction.report.v1.api.resource.PlaceholderResource; +import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + @Slf4j @RestController @RequiredArgsConstructor @@ -17,15 +19,16 @@ public class PlaceholderController implements PlaceholderResource { private final PlaceholderService placeholderService; + @Override public List getPlaceholders() { return placeholderService.getGeneralPlaceholders(); } + @Override - public List getPlaceholdersOfTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, - @PathVariable(REPORT_TEMPLATE_ID) String reportTemplateId) { + public List getPlaceholdersOfTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(REPORT_TEMPLATE_ID) String reportTemplateId) { return new ArrayList<>(placeholderService.getPlaceholdersOfTemplate(dossierTemplateId, reportTemplateId)); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/RSSController.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/RSSController.java index 0f6cf9e..bb0424a 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/RSSController.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/RSSController.java @@ -17,8 +17,7 @@ public class RSSController implements RSSResource { private final RSSService rSSService; - public RSSResponse getRSS(@PathVariable(DOSSIER_ID) String dossierId, - @RequestParam(value = "fileId", required = false) String fileId) { + public RSSResponse getRSS(@PathVariable(DOSSIER_ID) String dossierId, @RequestParam(value = "fileId", required = false) String fileId) { return rSSService.getRSS(dossierId, fileId); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java index 31026cc..8fc3768 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/ReportTemplateController.java @@ -1,16 +1,18 @@ package com.iqser.red.service.redaction.report.v1.server.controller; +import java.util.List; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; import com.iqser.red.service.redaction.report.v1.api.resource.ReportTemplateResource; import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; @Slf4j @RestController @@ -19,10 +21,11 @@ public class ReportTemplateController implements ReportTemplateResource { private final PlaceholderService placeholderService; + @Override - public List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, - @RequestBody JSONPrimitive placeholder) { + public List getReportTemplatesByPlaceholder(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody JSONPrimitive placeholder) { return placeholderService.getReportTemplatesByPlaceholder(dossierTemplateId, placeholder.getValue()); } + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/StatusReportController.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/StatusReportController.java index ae80abf..205df0d 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/StatusReportController.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/controller/StatusReportController.java @@ -1,21 +1,22 @@ package com.iqser.red.service.redaction.report.v1.server.controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.redaction.report.v1.api.model.StatusReportResponse; import com.iqser.red.service.redaction.report.v1.api.resource.StatusReportResource; import com.iqser.red.service.redaction.report.v1.server.client.DossierClient; import com.iqser.red.service.redaction.report.v1.server.service.StatusReportGenerationService; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequiredArgsConstructor public class StatusReportController implements StatusReportResource { - private final StatusReportGenerationService statusReportGenerationService; private final DossierClient dossierClient; @@ -23,7 +24,7 @@ public class StatusReportController implements StatusReportResource { @Override public StatusReportResponse generateStatusReport(@PathVariable(DOSSIER_ID) String dossierId) { - Dossier dossier = dossierClient.getDossierById(dossierId, true,false); + Dossier dossier = dossierClient.getDossierById(dossierId, true, false); byte[] report = statusReportGenerationService.generateReport(dossier); return new StatusReportResponse(report, dossier.getDossierName() + ".xlsx"); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ColoredText.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ColoredText.java index d740345..92c39ec 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ColoredText.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ColoredText.java @@ -8,6 +8,8 @@ import lombok.Data; @Builder @AllArgsConstructor public class ColoredText { + private String text; private String color; + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java index 9e9027f..97b39da 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelCell.java @@ -10,4 +10,5 @@ public class ExcelCell { private Cell cell; private int columnWidth; private int rowHeights; + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java index d5d9564..5ce6bf4 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ExcelModel.java @@ -29,5 +29,4 @@ public class ExcelModel { private boolean placeholderInFirstRow; private boolean firstRowWritten; - } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ImagePlaceholder.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ImagePlaceholder.java index 249833f..40f3c8b 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ImagePlaceholder.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/ImagePlaceholder.java @@ -6,6 +6,8 @@ import lombok.Data; @Data @AllArgsConstructor public class ImagePlaceholder { + private String placeholder; private byte[] image; + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileDocument.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileDocument.java index 2281923..af4aebe 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileDocument.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileDocument.java @@ -1,8 +1,9 @@ package com.iqser.red.service.redaction.report.v1.server.model; +import org.apache.poi.xwpf.usermodel.XWPFDocument; + import lombok.AllArgsConstructor; import lombok.Data; -import org.apache.poi.xwpf.usermodel.XWPFDocument; @Data @AllArgsConstructor diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileWorkbook.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileWorkbook.java index d9e1320..5df3c8f 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileWorkbook.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/MultiFileWorkbook.java @@ -1,11 +1,11 @@ package com.iqser.red.service.redaction.report.v1.server.model; -import lombok.AllArgsConstructor; -import lombok.Data; - import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import lombok.AllArgsConstructor; +import lombok.Data; + @Data @AllArgsConstructor public class MultiFileWorkbook { diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/PlaceHolderFunctions.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/PlaceHolderFunctions.java index 11409aa..edc4690 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/PlaceHolderFunctions.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/model/PlaceHolderFunctions.java @@ -13,4 +13,5 @@ public class PlaceHolderFunctions { private Map> functionPerPlaceHolder; private Set foundPlaceHolder; + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java index c27a011..fcfb4ea 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ExcelReportGenerationService.java @@ -74,10 +74,15 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class ExcelReportGenerationService { - @Timed("redactmanager_generateExcelReport") - public void generateExcelReport(List reportEntries, PlaceholderModel placeholderModel, String reportTemplateName, SXSSFWorkbook workbook, - String dossierName, FileModel fileModel, ExcelModel excelModel, boolean isLastFile) { + public void generateExcelReport(List reportEntries, + PlaceholderModel placeholderModel, + String reportTemplateName, + SXSSFWorkbook workbook, + String dossierName, + FileModel fileModel, + ExcelModel excelModel, + boolean isLastFile) { long start = System.currentTimeMillis(); @@ -91,25 +96,43 @@ public class ExcelReportGenerationService { sheet.setColumnWidth(columnWidthEntry.getKey(), columnWidthEntry.getValue()); } - addRows(workbook, sheet, excelModel.getCellsToCopyBeforeRedactionPlaceholderRow(), excelModel.isHasRssPlaceHolders() ? excelModel.getWrittenRows() - .size() : 0, placeholderModel, dossierName, fileModel.getFilename(), excelModel); + addRows(workbook, + sheet, + excelModel.getCellsToCopyBeforeRedactionPlaceholderRow(), + excelModel.isHasRssPlaceHolders() ? excelModel.getWrittenRows().size() : 0, + placeholderModel, + dossierName, + fileModel.getFilename(), + excelModel); - if(!excelModel.isHasRssPlaceHolders()) { + if (!excelModel.isHasRssPlaceHolders()) { excelModel.setRowsBeforeRedactionEntryRowsAdded(true); } } - if(!excelModel.isHasRssPlaceHolders()) { + if (!excelModel.isHasRssPlaceHolders()) { addRedactionEntryRows(sheet, reportEntries, fileModel.getFilename(), excelModel, placeholderModel); } if (isLastFile) { - addRows(workbook, sheet, excelModel.getCellsToCopyAfterRedactionPlaceholderRow(), excelModel.getWrittenRows() - .size(), placeholderModel, dossierName, fileModel.getFilename(), excelModel); + addRows(workbook, + sheet, + excelModel.getCellsToCopyAfterRedactionPlaceholderRow(), + excelModel.getWrittenRows().size(), + placeholderModel, + dossierName, + fileModel.getFilename(), + excelModel); } } - log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", System.currentTimeMillis() - start, fileModel.getId(), fileModel.getNumberOfPages(), reportEntries.size(), reportTemplateName, getClass().getSimpleName()); + log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", + System.currentTimeMillis() - start, + fileModel.getId(), + fileModel.getNumberOfPages(), + reportEntries.size(), + reportTemplateName, + getClass().getSimpleName()); } catch (Exception e) { throw new RuntimeException(e); @@ -119,15 +142,21 @@ public class ExcelReportGenerationService { @SneakyThrows @Timed("redactmanager_excel-addRows") - private void addRows(SXSSFWorkbook workbook, Sheet sheet, Map copiedCells, int numberOfRowsToShift, PlaceholderModel placeholderModel, String dossierName, - String filename, ExcelModel excelModel) { + private void addRows(SXSSFWorkbook workbook, + Sheet sheet, + Map copiedCells, + int numberOfRowsToShift, + PlaceholderModel placeholderModel, + String dossierName, + String filename, + ExcelModel excelModel) { Set createdCopyRows = new HashSet<>(); int skipRows = excelModel.isHasRssPlaceHolders() && excelModel.isFirstRowWritten() && !excelModel.isPlaceholderInFirstRow() ? 1 : 0; for (Map.Entry cellsToCopyEntry : copiedCells.entrySet()) { - if(excelModel.isHasRssPlaceHolders() && cellsToCopyEntry.getKey().getRowIndex() == 0 && excelModel.isFirstRowWritten() && !excelModel.isPlaceholderInFirstRow()){ + if (excelModel.isHasRssPlaceHolders() && cellsToCopyEntry.getKey().getRowIndex() == 0 && excelModel.isFirstRowWritten() && !excelModel.isPlaceholderInFirstRow()) { continue; } @@ -190,11 +219,11 @@ public class ExcelReportGenerationService { columnWidths.put(i, columnWidth); String cellStringValue = cell.getStringCellValue(); - if(j == 0 && cellStringValue.contains("{{")){ + if (j == 0 && cellStringValue.contains("{{")) { placeholderInFirstRow = true; } - if(cellStringValue.contains(RSS_PLACEHOLDER_BASE)){ + if (cellStringValue.contains(RSS_PLACEHOLDER_BASE)) { hasRssPlaceHolders = true; } @@ -221,7 +250,16 @@ public class ExcelReportGenerationService { } log.debug("Calculate Placeholder Cells took: {}", System.currentTimeMillis() - start); - return new ExcelModel(placeholderCellPos, placeholderRow, columnWidths, cellsToCopyBeforePlaceholderRow, cellsToCopyAfterPlaceholderRow, new ArrayList<>(), false, hasRssPlaceHolders, placeholderInFirstRow, false); + return new ExcelModel(placeholderCellPos, + placeholderRow, + columnWidths, + cellsToCopyBeforePlaceholderRow, + cellsToCopyAfterPlaceholderRow, + new ArrayList<>(), + false, + hasRssPlaceHolders, + placeholderInFirstRow, + false); } @@ -251,7 +289,12 @@ public class ExcelReportGenerationService { private boolean containsRedactionPlaceholder(String text) { - return text.startsWith(DOSSIER_ATTRIBUTE_PLACEHOLDER_BASE) || text.startsWith(FILE_ATTRIBUTE_PLACEHOLDER_BASE) || text.contains(FILE_NAME_PLACEHOLDER) || text.contains(PAGE_PLACEHOLDER) || text.contains(PARAGRAPH_PLACEHOLDER) || text.contains(JUSTIFICATION_PLACEHOLDER) || text.contains(EXCERPT_PLACEHOLDER) || text.contains(JUSTIFICATION_PARAGRAPH_PLACEHOLDER) || text.contains(JUSTIFICATION_REASON_PLACEHOLDER) || text.contains(REDACTION_VALUE_PLACEHOLDER) || text.contains(JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER) || text.contains(JUSTIFICATION_TEXT_PLACEHOLDER) || text.contains(SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER) || text.contains(SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER) || text.contains(REDACTION_ENTITY_DISPLAY_NAME_PLACEHOLDER); + return text.startsWith(DOSSIER_ATTRIBUTE_PLACEHOLDER_BASE) || text.startsWith(FILE_ATTRIBUTE_PLACEHOLDER_BASE) || text.contains(FILE_NAME_PLACEHOLDER) || text.contains( + PAGE_PLACEHOLDER) || text.contains(PARAGRAPH_PLACEHOLDER) || text.contains(JUSTIFICATION_PLACEHOLDER) || text.contains(EXCERPT_PLACEHOLDER) || text.contains( + JUSTIFICATION_PARAGRAPH_PLACEHOLDER) || text.contains(JUSTIFICATION_REASON_PLACEHOLDER) || text.contains(REDACTION_VALUE_PLACEHOLDER) || text.contains( + JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER) || text.contains(JUSTIFICATION_TEXT_PLACEHOLDER) || text.contains( + SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER) || text.contains(SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER) || text.contains( + REDACTION_ENTITY_DISPLAY_NAME_PLACEHOLDER); } @@ -318,8 +361,9 @@ public class ExcelReportGenerationService { if (cell.getStringCellValue().contains(imagePlaceholder.getPlaceholder())) { try (ByteArrayInputStream is = new ByteArrayInputStream(imagePlaceholder.getImage())) { - double factor = calculateScale(is, PixelUtil.widthUnits2Pixel((short) sheet.getColumnWidth(cell.getColumnIndex())), PixelUtil.heightUnits2Pixel(cell.getRow() - .getHeight())); + double factor = calculateScale(is, + PixelUtil.widthUnits2Pixel((short) sheet.getColumnWidth(cell.getColumnIndex())), + PixelUtil.heightUnits2Pixel(cell.getRow().getHeight())); is.reset(); int pictureIdx = workbook.addPicture(is.readAllBytes(), SXSSFWorkbook.PICTURE_TYPE_JPEG); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/GeneratePlaceholderService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/GeneratePlaceholderService.java index ef01ed1..9fb205d 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/GeneratePlaceholderService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/GeneratePlaceholderService.java @@ -62,8 +62,8 @@ public class GeneratePlaceholderService { if (dossierAttribute.getValue() != null) { if (dossierAttribute.getValue().startsWith("data:")) { - imagePlaceholders.add(new ImagePlaceholder(attributeConfig.getPlaceholder(), Base64.getDecoder() - .decode(dossierAttribute.getValue().split(",")[1]))); + imagePlaceholders.add(new ImagePlaceholder(attributeConfig.getPlaceholder(), + Base64.getDecoder().decode(dossierAttribute.getValue().split(",")[1]))); } else { imagePlaceholders.add(new ImagePlaceholder(attributeConfig.getPlaceholder(), Base64.getDecoder().decode(dossierAttribute.getValue()))); } @@ -115,10 +115,17 @@ public class GeneratePlaceholderService { } - public Set getDefaultPlaceholders() { - return new HashSet<>(Set.of(FILE_NAME_PLACEHOLDER, FORMAT_DATE_ISO_PLACEHOLDER, FORMAT_DATE_GER_PLACEHOLDER, FORMAT_DATE_ENG_PLACEHOLDER, FORMAT_TIME_ISO_PLACEHOLDER, DOSSIER_NAME_PLACEHOLDER, IUCLID_FUNCTION_PLACEHOLDER, SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER)); + return new HashSet<>(Set.of(FILE_NAME_PLACEHOLDER, + FORMAT_DATE_ISO_PLACEHOLDER, + FORMAT_DATE_GER_PLACEHOLDER, + FORMAT_DATE_ENG_PLACEHOLDER, + FORMAT_TIME_ISO_PLACEHOLDER, + DOSSIER_NAME_PLACEHOLDER, + IUCLID_FUNCTION_PLACEHOLDER, + SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, + SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER)); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java index 996e2f9..65374a8 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/PlaceholderService.java @@ -77,7 +77,23 @@ public class PlaceholderService { public List getGeneralPlaceholders() { - return List.of(FILE_NAME_PLACEHOLDER, PAGE_PLACEHOLDER, PARAGRAPH_PLACEHOLDER, JUSTIFICATION_PLACEHOLDER, EXCERPT_PLACEHOLDER, FORMAT_DATE_ISO_PLACEHOLDER, FORMAT_DATE_GER_PLACEHOLDER, FORMAT_DATE_ENG_PLACEHOLDER, FORMAT_TIME_ISO_PLACEHOLDER, DOSSIER_NAME_PLACEHOLDER, IUCLID_FUNCTION_PLACEHOLDER, REDACTION_VALUE_PLACEHOLDER, JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER, JUSTIFICATION_TEXT_PLACEHOLDER, SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER, REDACTION_ENTITY_DISPLAY_NAME_PLACEHOLDER); + return List.of(FILE_NAME_PLACEHOLDER, + PAGE_PLACEHOLDER, + PARAGRAPH_PLACEHOLDER, + JUSTIFICATION_PLACEHOLDER, + EXCERPT_PLACEHOLDER, + FORMAT_DATE_ISO_PLACEHOLDER, + FORMAT_DATE_GER_PLACEHOLDER, + FORMAT_DATE_ENG_PLACEHOLDER, + FORMAT_TIME_ISO_PLACEHOLDER, + DOSSIER_NAME_PLACEHOLDER, + IUCLID_FUNCTION_PLACEHOLDER, + REDACTION_VALUE_PLACEHOLDER, + JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER, + JUSTIFICATION_TEXT_PLACEHOLDER, + SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, + SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER, + REDACTION_ENTITY_DISPLAY_NAME_PLACEHOLDER); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RSSService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RSSService.java index 1f99353..eb5581b 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RSSService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RSSService.java @@ -14,14 +14,10 @@ import java.util.stream.Collectors; import javax.annotation.PostConstruct; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.redaction.report.v1.api.model.rss.RSSFileResponse; import com.iqser.red.service.redaction.report.v1.api.model.rss.RSSResponse; -import com.iqser.red.service.redaction.report.v1.api.resource.RSSResource; import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient; import com.iqser.red.service.redaction.report.v1.server.client.RedactionLogClient; import com.iqser.red.service.redaction.v1.model.ChangeType; @@ -43,12 +39,74 @@ public class RSSService { @PostConstruct public void init() { - guidelineMapping.put("Acute Dermal Toxicity", Set.of("OECD 402", "OECD Test Guideline 402", "OECD Guidelines for the Testing of Chemicals No. 402", "OECD Guidelines for Testing of Chemicals, Procedure 402", "OPPTS 870.1200", "OPPTS Guideline Number 870.1200", "EPA 870.1200")); - guidelineMapping.put("Acute inhalation toxicity", Set.of("OECD 403", "OECD Test Guideline 403", "OECD Guidelines for the Testing of Chemicals No. 403", "OECD Guidelines for Testing of Chemicals, Procedure 403", "OECD 436", "OECD Test Guideline 436", "OECD Guidelines for the Testing of Chemicals No. 436", "OECD Guidelines for Testing of Chemicals, Procedure 436", "OPPTS 870.1300", "OPPTS Guideline Number 870.1300", "EPA 870.1300")); - guidelineMapping.put("Acute oral toxicity", Set.of("OECD 425", "OECD Test Guideline 425", "OECD Guidelines for the Testing of Chemicals No. 425", "OECD Guidelines for Testing of Chemicals, Procedure 425", "OECD 423", "OECD Test Guideline 423", "OECD Guidelines for the Testing of Chemicals No. 423", "OECD Guidelines for Testing of Chemicals, Procedure 423", "OPPTS 870.1100", "OPPTS Guideline Number 870.1100", "EPA 870.1100")); - guidelineMapping.put("Eye irritation", Set.of("OECD 437", "OECD Test Guideline 437", "OECD Guidelines for the Testing of Chemicals No. 437", "OECD Guidelines for Testing of Chemicals, Procedure 437", "OECD 405", "OECD Test Guideline 405", "OECD Guidelines for the Testing of Chemicals No. 405", "OECD Guidelines for Testing of Chemicals, Procedure 405", "OPPTS 870.2400", "OPPTS Guideline Number 870.2400", "EPA 870.2400")); - guidelineMapping.put("Skin irritation", Set.of("OECD 404", "OECD Test Guideline 404", "OECD Guidelines for the Testing of Chemicals No. 404", "OECD Guidelines for Testing of Chemicals, Procedure 404", "OECD 439", "OECD Test Guideline 439", "OECD Guidelines for the Testing of Chemicals No. 439", "OECD Guidelines for Testing of Chemicals, Procedure 439", "OPPTS 870.2500", "OPPTS Guideline Number 870.2500", "EPA 870.2500")); - guidelineMapping.put("Skin sentitization", Set.of("OECD 406", "OECD Test Guideline 406", "OECD Guidelines for the Testing of Chemicals No. 406", "OECD Guidelines for Testing of Chemicals, Procedure 406", "OECD 429", "OECD Test Guideline 429", "OECD Guidelines for the Testing of Chemicals No. 429", "OECD Guidelines for Testing of Chemicals, Procedure 429", "OPPTS 870.2600", "OPPTS Guideline Number 870.2600", "EPA 870.2600")); + guidelineMapping.put("Acute Dermal Toxicity", + Set.of("OECD 402", + "OECD Test Guideline 402", + "OECD Guidelines for the Testing of Chemicals No. 402", + "OECD Guidelines for Testing of Chemicals, Procedure 402", + "OPPTS 870.1200", + "OPPTS Guideline Number 870.1200", + "EPA 870.1200")); + guidelineMapping.put("Acute inhalation toxicity", + Set.of("OECD 403", + "OECD Test Guideline 403", + "OECD Guidelines for the Testing of Chemicals No. 403", + "OECD Guidelines for Testing of Chemicals, Procedure 403", + "OECD 436", + "OECD Test Guideline 436", + "OECD Guidelines for the Testing of Chemicals No. 436", + "OECD Guidelines for Testing of Chemicals, Procedure 436", + "OPPTS 870.1300", + "OPPTS Guideline Number 870.1300", + "EPA 870.1300")); + guidelineMapping.put("Acute oral toxicity", + Set.of("OECD 425", + "OECD Test Guideline 425", + "OECD Guidelines for the Testing of Chemicals No. 425", + "OECD Guidelines for Testing of Chemicals, Procedure 425", + "OECD 423", + "OECD Test Guideline 423", + "OECD Guidelines for the Testing of Chemicals No. 423", + "OECD Guidelines for Testing of Chemicals, Procedure 423", + "OPPTS 870.1100", + "OPPTS Guideline Number 870.1100", + "EPA 870.1100")); + guidelineMapping.put("Eye irritation", + Set.of("OECD 437", + "OECD Test Guideline 437", + "OECD Guidelines for the Testing of Chemicals No. 437", + "OECD Guidelines for Testing of Chemicals, Procedure 437", + "OECD 405", + "OECD Test Guideline 405", + "OECD Guidelines for the Testing of Chemicals No. 405", + "OECD Guidelines for Testing of Chemicals, Procedure 405", + "OPPTS 870.2400", + "OPPTS Guideline Number 870.2400", + "EPA 870.2400")); + guidelineMapping.put("Skin irritation", + Set.of("OECD 404", + "OECD Test Guideline 404", + "OECD Guidelines for the Testing of Chemicals No. 404", + "OECD Guidelines for Testing of Chemicals, Procedure 404", + "OECD 439", + "OECD Test Guideline 439", + "OECD Guidelines for the Testing of Chemicals No. 439", + "OECD Guidelines for Testing of Chemicals, Procedure 439", + "OPPTS 870.2500", + "OPPTS Guideline Number 870.2500", + "EPA 870.2500")); + guidelineMapping.put("Skin sentitization", + Set.of("OECD 406", + "OECD Test Guideline 406", + "OECD Guidelines for the Testing of Chemicals No. 406", + "OECD Guidelines for Testing of Chemicals, Procedure 406", + "OECD 429", + "OECD Test Guideline 429", + "OECD Guidelines for the Testing of Chemicals No. 429", + "OECD Guidelines for Testing of Chemicals, Procedure 429", + "OPPTS 870.2600", + "OPPTS Guideline Number 870.2600", + "EPA 870.2600")); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RedactionLogConverterService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RedactionLogConverterService.java index f0b0f06..41d2825 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RedactionLogConverterService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/RedactionLogConverterService.java @@ -1,14 +1,23 @@ package com.iqser.red.service.redaction.report.v1.server.service; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry; -import com.iqser.red.service.redaction.v1.model.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus; +import com.iqser.red.service.redaction.report.v1.server.model.ReportRedactionEntry; +import com.iqser.red.service.redaction.v1.model.ManualRedactionType; +import com.iqser.red.service.redaction.v1.model.Rectangle; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; +import com.iqser.red.service.redaction.v1.model.RedactionLogLegalBasis; @Service public class RedactionLogConverterService { @@ -52,16 +61,24 @@ public class RedactionLogConverterService { if (pages.isEmpty() || !pages.contains(position.getPage())) { pages.add(position.getPage()); - reportEntries.add(new ReportRedactionEntry(position.getPage(), position.getTopLeft().getX(), position.getTopLeft() - .getY(), getSection(entry, position), checkTextForNull(entry.getLegalBasis()) + " " + legalBasisMappings.stream() - .filter(lbm -> lbm.getReason().equalsIgnoreCase(entry.getLegalBasis())) - .findAny() - .map(RedactionLogLegalBasis::getDescription) - .orElse(""), entry.getLegalBasis(), legalBasisMappings.stream() - .filter(lbm -> lbm.getReason().equalsIgnoreCase(entry.getLegalBasis())) - .findAny() - .map(RedactionLogLegalBasis::getDescription) - .orElse(""), checkTextForNull(entry.getTextBefore()) + entry.getValue() + checkTextForNull(entry.getTextAfter()), entry.getValue(), mapOfEntityDisplayName.get(entry.getType()))); + reportEntries.add(new ReportRedactionEntry(position.getPage(), + position.getTopLeft().getX(), + position.getTopLeft().getY(), + getSection(entry, position), + checkTextForNull(entry.getLegalBasis()) + " " + legalBasisMappings.stream() + .filter(lbm -> lbm.getReason().equalsIgnoreCase(entry.getLegalBasis())) + .findAny() + .map(RedactionLogLegalBasis::getDescription) + .orElse(""), + entry.getLegalBasis(), + legalBasisMappings.stream() + .filter(lbm -> lbm.getReason().equalsIgnoreCase(entry.getLegalBasis())) + .findAny() + .map(RedactionLogLegalBasis::getDescription) + .orElse(""), + checkTextForNull(entry.getTextBefore()) + entry.getValue() + checkTextForNull(entry.getTextAfter()), + entry.getValue(), + mapOfEntityDisplayName.get(entry.getType()))); } } } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java index a0a2edd..86181c2 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportGenerationService.java @@ -1,5 +1,19 @@ package com.iqser.red.service.redaction.report.v1.server.service; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.springframework.stereotype.Service; + import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; @@ -7,7 +21,11 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ty import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; import com.iqser.red.service.redaction.report.v1.api.model.ReportType; import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; -import com.iqser.red.service.redaction.report.v1.server.client.*; +import com.iqser.red.service.redaction.report.v1.server.client.DictionaryClient; +import com.iqser.red.service.redaction.report.v1.server.client.DossierClient; +import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient; +import com.iqser.red.service.redaction.report.v1.server.client.RedactionLogClient; +import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; import com.iqser.red.service.redaction.report.v1.server.model.MultiFileDocument; import com.iqser.red.service.redaction.report.v1.server.model.MultiFileWorkbook; import com.iqser.red.service.redaction.report.v1.server.model.PlaceholderModel; @@ -16,19 +34,11 @@ import com.iqser.red.service.redaction.report.v1.server.settings.ReportTemplateS import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; + import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.apache.poi.xwpf.usermodel.XWPFDocument; -import org.springframework.stereotype.Service; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.*; @SuppressWarnings("ALL") @Slf4j @@ -49,6 +59,7 @@ public class ReportGenerationService { private final ReportTemplateSettings reportTemplateSettings; private final RSSService rSSService; + @SneakyThrows @Timed("redactmanager_generateReports") public String generateReports(ReportRequestMessage reportMessage) { @@ -72,7 +83,10 @@ public class ReportGenerationService { for (Sheet sheet : readWorkbook) { writeWorkbook.createSheet(sheet.getSheetName()); } - MultiFileWorkbook multiFileWorkbook = new MultiFileWorkbook(readWorkbook, writeWorkbook, templateId, reportTemplate.getFileName(), + MultiFileWorkbook multiFileWorkbook = new MultiFileWorkbook(readWorkbook, + writeWorkbook, + templateId, + reportTemplate.getFileName(), excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0))); multiFileWorkbookReportTemplates.add(multiFileWorkbook); } catch (IOException e) { @@ -103,21 +117,26 @@ public class ReportGenerationService { long start = System.currentTimeMillis(); - var fileStatus = fileStatusClient.getFileStatus(reportMessage.getDossierId(), reportMessage.getFileIds() - .get(j)); + var fileStatus = fileStatusClient.getFileStatus(reportMessage.getDossierId(), reportMessage.getFileIds().get(j)); generatePlaceholderService.resolveFileAttributeValues(fileStatus, placeholderModel); - List reportEntries = getReportEntries(reportMessage.getDossierId(), reportMessage.getFileIds() - .get(j), fileStatus.isExcluded()); + List reportEntries = getReportEntries(reportMessage.getDossierId(), reportMessage.getFileIds().get(j), fileStatus.isExcluded()); var isLastFile = j == reportMessage.getFileIds().size() - 1; for (MultiFileWorkbook multiFileWorkbook : multiFileWorkbookReportTemplates) { - if(multiFileWorkbook.getExcelModel().isHasRssPlaceHolders()){ + if (multiFileWorkbook.getExcelModel().isHasRssPlaceHolders()) { generatePlaceholderService.resolveRssValues(fileStatus, placeholderModel); } - excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholderModel, multiFileWorkbook.getTemplateName(), multiFileWorkbook.getWriteWorkbook(), dossier.getDossierName(), fileStatus, multiFileWorkbook.getExcelModel(), isLastFile); + excelTemplateReportGenerationService.generateExcelReport(reportEntries, + placeholderModel, + multiFileWorkbook.getTemplateName(), + multiFileWorkbook.getWriteWorkbook(), + dossier.getDossierName(), + fileStatus, + multiFileWorkbook.getExcelModel(), + isLastFile); } for (MultiFileDocument multiFileDocument : multiFileDocumentReportTemplates) { @@ -127,7 +146,11 @@ public class ReportGenerationService { wordReportGenerationService.removePlaceholdersRow(wordReportGenerationService.getRedactionTable(multiFileDocument.getDocument())); byte[] wordDoc = wordReportGenerationService.toByteArray(multiFileDocument.getDocument()); String storageId = reportStorageService.storeObject(reportMessage.getDownloadId(), wordDoc); - storedFileInformation.add(new StoredFileInformation(null, storageId, ReportType.WORD_TEMPLATE_MULTI_FILE, multiFileDocument.getTemplateId(), multiFileDocument.getDocumentPartNr())); + storedFileInformation.add(new StoredFileInformation(null, + storageId, + ReportType.WORD_TEMPLATE_MULTI_FILE, + multiFileDocument.getTemplateId(), + multiFileDocument.getDocumentPartNr())); multiFileDocument.setDocumentPartNr(multiFileDocument.getDocumentPartNr() + 1); try (ByteArrayInputStream is = new ByteArrayInputStream(multiFileDocument.getTemplateAsBytes())) { @@ -136,18 +159,29 @@ public class ReportGenerationService { multiFileDocument.setNumberOfChars(0); } } - numberOfChars = wordReportGenerationService.generateWordReport(reportEntries, placeholderModel, multiFileDocument.getTemplateName(), multiFileDocument.getDocument(), fileStatus, dossier, isLastFile ? isLastFile : multiFileDocument.getNumberOfChars() + numberOfChars >= reportTemplateSettings.getMultiFileChunkSize()); + numberOfChars = wordReportGenerationService.generateWordReport(reportEntries, + placeholderModel, + multiFileDocument.getTemplateName(), + multiFileDocument.getDocument(), + fileStatus, + dossier, + isLastFile ? isLastFile : multiFileDocument.getNumberOfChars() + numberOfChars >= reportTemplateSettings.getMultiFileChunkSize()); multiFileDocument.setNumberOfChars(multiFileDocument.getNumberOfChars() + numberOfChars); } for (ReportTemplate reportTemplate : singleFilesTemplates) { - storedFileInformation.add(createReportFromTemplate(dossier, fileStatus, placeholderModel, reportTemplate.getFileName(), reportMessage.getDownloadId(), reportEntries, reportTemplate)); + storedFileInformation.add(createReportFromTemplate(dossier, + fileStatus, + placeholderModel, + reportTemplate.getFileName(), + reportMessage.getDownloadId(), + reportEntries, + reportTemplate)); } long end = System.currentTimeMillis(); - log.info("Successfully processed {}/{} fileIds for downloadId {}, took {}", i, reportMessage.getFileIds() - .size(), reportMessage.getDownloadId(), end - start); + log.info("Successfully processed {}/{} fileIds for downloadId {}, took {}", i, reportMessage.getFileIds().size(), reportMessage.getDownloadId(), end - start); i++; } @@ -160,16 +194,23 @@ public class ReportGenerationService { for (MultiFileDocument multiFileDocument : multiFileDocumentReportTemplates) { byte[] template = wordReportGenerationService.toByteArray(multiFileDocument.getDocument()); String storageId = reportStorageService.storeObject(reportMessage.getDownloadId(), template); - storedFileInformation.add(new StoredFileInformation(null, storageId, ReportType.WORD_TEMPLATE_MULTI_FILE, multiFileDocument.getTemplateId(), multiFileDocument.getDocumentPartNr())); + storedFileInformation.add(new StoredFileInformation(null, + storageId, + ReportType.WORD_TEMPLATE_MULTI_FILE, + multiFileDocument.getTemplateId(), + multiFileDocument.getDocumentPartNr())); } return reportStorageService.storeReportInformation(reportMessage.getDownloadId(), storedFileInformation); } - private StoredFileInformation createReportFromTemplate(Dossier dossier, FileModel fileStatus, - PlaceholderModel placeholderModel, String templateName, - String downloadId, List reportEntries, + private StoredFileInformation createReportFromTemplate(Dossier dossier, + FileModel fileStatus, + PlaceholderModel placeholderModel, + String templateName, + String downloadId, + List reportEntries, ReportTemplate reportTemplate) { if (reportTemplate.getFileName().endsWith(".xlsx")) { @@ -181,11 +222,18 @@ public class ReportGenerationService { writeWorkbook.createSheet(sheet.getSheetName()); } var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0)); - if(excelModel.isHasRssPlaceHolders()){ + if (excelModel.isHasRssPlaceHolders()) { generatePlaceholderService.resolveRssValues(fileStatus, placeholderModel); } - excelTemplateReportGenerationService.generateExcelReport(reportEntries, placeholderModel, templateName, writeWorkbook, dossier.getDossierName(), fileStatus, excelModel, true); + excelTemplateReportGenerationService.generateExcelReport(reportEntries, + placeholderModel, + templateName, + writeWorkbook, + dossier.getDossierName(), + fileStatus, + excelModel, + true); byte[] template = excelTemplateReportGenerationService.toByteArray(writeWorkbook); String storageId = reportStorageService.storeObject(downloadId, template); return new StoredFileInformation(fileStatus.getId(), storageId, ReportType.EXCEL_TEMPLATE_SINGLE_FILE, reportTemplate.getTemplateId(), 0); @@ -232,8 +280,7 @@ public class ReportGenerationService { List typeList = new ArrayList<>(); typeList.addAll(dictionaryClient.getAllTypesForDossier(dossierId, false)); - typeList.addAll(dictionaryClient.getAllTypesForDossierTemplate(dossierClient.getDossierById(dossierId, true, false) - .getDossierTemplateId(), false)); + typeList.addAll(dictionaryClient.getAllTypesForDossierTemplate(dossierClient.getDossierById(dossierId, true, false).getDossierTemplateId(), false)); Map mapOfEntityDisplayName = new HashMap<>(); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java index 71c40b6..49df087 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/ReportMessageReceiver.java @@ -37,7 +37,7 @@ public class ReportMessageReceiver { ReportRequestMessage reportMessage = objectMapper.readValue(message.getBody(), ReportRequestMessage.class); // This prevents from endless retries oom errors. - if(message.getMessageProperties().isRedelivered()){ + if (message.getMessageProperties().isRedelivered()) { throw new AmqpRejectAndDontRequeueException(String.format("Error during last processing of request with downloadId: %s, do not retry.", reportMessage.getDownloadId())); } @@ -55,10 +55,12 @@ public class ReportMessageReceiver { private void addToReportResultQueue(String userId, String downloadId, String reportFileInformationStorageId, int priority) { try { - rabbitTemplate.convertAndSend(REPORT_RESULT_QUEUE, objectMapper.writeValueAsString(new ReportResultMessage(userId, downloadId, reportFileInformationStorageId)), message -> { - message.getMessageProperties().setPriority(priority); - return message; - }); + rabbitTemplate.convertAndSend(REPORT_RESULT_QUEUE, + objectMapper.writeValueAsString(new ReportResultMessage(userId, downloadId, reportFileInformationStorageId)), + message -> { + message.getMessageProperties().setPriority(priority); + return message; + }); } catch (JsonProcessingException e) { throw new RuntimeException(e); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java index ca9e898..8092425 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/service/WordReportGenerationService.java @@ -82,8 +82,13 @@ public class WordReportGenerationService { @Timed("redactmanager_generateWordReport") - public int generateWordReport(List reportEntries, PlaceholderModel placeholderModel, String reportTemplateName, XWPFDocument doc, FileModel fileModel, - Dossier dossier, boolean isLastFile) { + public int generateWordReport(List reportEntries, + PlaceholderModel placeholderModel, + String reportTemplateName, + XWPFDocument doc, + FileModel fileModel, + Dossier dossier, + boolean isLastFile) { long start = System.currentTimeMillis(); @@ -107,8 +112,13 @@ public class WordReportGenerationService { removePlaceholdersRow(table); } - log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", System.currentTimeMillis() - start, - fileModel.getId(), fileModel.getNumberOfPages(), reportEntries.size(), reportTemplateName, getClass().getSimpleName()); + log.info("Report Generation took: {} for file with id {}, pageCount: {}, redactionLogEntryCount: {}, reportName: {}, className: {}", + System.currentTimeMillis() - start, + fileModel.getId(), + fileModel.getNumberOfPages(), + reportEntries.size(), + reportTemplateName, + getClass().getSimpleName()); } catch (Exception e) { log.error(e.getMessage() + " in file: " + fileModel.getFilename()); @@ -149,7 +159,10 @@ public class WordReportGenerationService { } - private String getPlaceholderValue(String placeholder, String dossierName, String filename, PlaceholderModel placeholderModel, + private String getPlaceholderValue(String placeholder, + String dossierName, + String filename, + PlaceholderModel placeholderModel, List reportRedactionEntries) { if (placeholder.equals(FORMAT_DATE_ISO_PLACEHOLDER)) { @@ -210,7 +223,11 @@ public class WordReportGenerationService { @Timed("redactmanager_word-replaceTextPlaceholders") - public int replaceTextPlaceholders(XWPFDocument doc, PlaceholderModel placeholderModel, String dossierName, String fileName, XWPFTable tableToSkip, + public int replaceTextPlaceholders(XWPFDocument doc, + PlaceholderModel placeholderModel, + String dossierName, + String fileName, + XWPFTable tableToSkip, List reportRedactionEntries) { int sumOfChars = 0; @@ -296,10 +313,10 @@ public class WordReportGenerationService { for (XWPFTable tbl : doc.getTables()) { String tblText = tbl.getText(); - if (tblText.contains(PAGE_PLACEHOLDER) || tblText.contains(PARAGRAPH_PLACEHOLDER) || tblText.contains(JUSTIFICATION_PLACEHOLDER) || tblText.contains( - EXCERPT_PLACEHOLDER) || tblText.contains(JUSTIFICATION_PARAGRAPH_PLACEHOLDER) || tblText.contains(JUSTIFICATION_REASON_PLACEHOLDER) || tblText.contains( - JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER) || tblText.contains(JUSTIFICATION_TEXT_PLACEHOLDER) || tblText.contains( - SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER) || tblText.contains(SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER)) { + if (tblText.contains(PAGE_PLACEHOLDER) || tblText.contains(PARAGRAPH_PLACEHOLDER) || tblText.contains(JUSTIFICATION_PLACEHOLDER) || tblText.contains(EXCERPT_PLACEHOLDER) || tblText.contains( + JUSTIFICATION_PARAGRAPH_PLACEHOLDER) || tblText.contains(JUSTIFICATION_REASON_PLACEHOLDER) || tblText.contains(JUSTIFICATION_LEGAL_BASIS_PLACEHOLDER) || tblText.contains( + JUSTIFICATION_TEXT_PLACEHOLDER) || tblText.contains(SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER) || tblText.contains( + SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER)) { return tbl; } } @@ -341,7 +358,10 @@ public class WordReportGenerationService { @Timed("redactmanager_word-addRedactionEntryRows") - private int addRedactionEntryRows(XWPFTable table, List reportEntries, String filename, PlaceholderModel placeholderModel, + private int addRedactionEntryRows(XWPFTable table, + List reportEntries, + String filename, + PlaceholderModel placeholderModel, PlaceHolderFunctions placeHolderFunctions) { int sumOfChars = 0; @@ -527,7 +547,8 @@ public class WordReportGenerationService { protected int approxNumberOfChars(Optional firstReportEntry, String filename) { - if(firstReportEntry.isPresent()) { + + if (firstReportEntry.isPresent()) { int sumOfChars = 0; sumOfChars += filename.length(); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java index 81100ee..9332075 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/storage/ReportStorageService.java @@ -1,23 +1,26 @@ package com.iqser.red.service.redaction.report.v1.server.storage; -import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; -import com.iqser.red.storage.commons.service.StorageService; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import org.apache.commons.io.IOUtils; -import org.springframework.stereotype.Service; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; import java.util.UUID; +import org.apache.commons.io.IOUtils; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; +import com.iqser.red.storage.commons.service.StorageService; + +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; + @Service @RequiredArgsConstructor public class ReportStorageService { private final StorageService storageService; + public String storeObject(String downloadId, byte[] data) { String storageId = StorageIdUtils.getStorageId(downloadId, UUID.randomUUID().toString()); @@ -36,6 +39,7 @@ public class ReportStorageService { public byte[] getReportTemplate(String storageId) { + try { return IOUtils.toByteArray(storageService.getObject(storageId).getInputStream()); } catch (IOException e) { diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/utils/ResourceLoader.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/utils/ResourceLoader.java index 14ca120..01d27d5 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/utils/ResourceLoader.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/main/java/com/iqser/red/service/redaction/report/v1/server/utils/ResourceLoader.java @@ -1,11 +1,11 @@ package com.iqser.red.service.redaction.report.v1.server.utils; -import lombok.experimental.UtilityClass; - import java.io.IOException; import java.io.InputStream; import java.net.URL; +import lombok.experimental.UtilityClass; + @UtilityClass public class ResourceLoader { @@ -21,4 +21,5 @@ public class ResourceLoader { throw new IllegalArgumentException("could not load classpath resource: " + classpathPath, e); } } + } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java index 7dd7407..d9008aa 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/PlaceholderTest.java @@ -1,5 +1,22 @@ package com.iqser.red.service.redaction.report.v1.server; +import static org.mockito.Mockito.when; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +import java.io.IOException; +import java.util.List; +import java.util.Set; + +import org.apache.commons.io.IOUtils; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.junit4.SpringRunner; + import com.amazonaws.services.s3.AmazonS3; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; @@ -11,22 +28,6 @@ import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateCli import com.iqser.red.service.redaction.report.v1.server.service.PlaceholderService; import com.iqser.red.service.redaction.report.v1.server.storage.ReportStorageService; import com.iqser.red.storage.commons.service.StorageService; -import org.apache.commons.io.IOUtils; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.core.io.ClassPathResource; -import org.springframework.test.context.junit4.SpringRunner; - -import java.io.IOException; -import java.util.List; -import java.util.Set; - -import static org.mockito.Mockito.when; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @@ -53,6 +54,7 @@ public class PlaceholderTest { @MockBean private FileAttributesConfigClient fileAttributesClient; + @Test public void testGeneralPlaceholders() { @@ -64,6 +66,7 @@ public class PlaceholderTest { Assert.assertEquals(placeholders.size(), 17); } + @Test public void testGetReportTemplates() throws IOException { @@ -78,20 +81,62 @@ public class PlaceholderTest { ClassPathResource templateResource2 = new ClassPathResource("templates/" + storageId2); when(reportStorageService.getReportTemplate(storageId2)).thenReturn(IOUtils.toByteArray(templateResource2.getInputStream())); - when(reportTemplateClient.getAvailableReportTemplates(dossierTemplateId)).thenReturn(List.of( - ReportTemplate.builder().storageId(storageId).build(), + when(reportTemplateClient.getAvailableReportTemplates(dossierTemplateId)).thenReturn(List.of(ReportTemplate.builder().storageId(storageId).build(), ReportTemplate.builder().storageId(storageId2).build())); - DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", "Active Substance", true, "{{dossier.attribute.ActiveSubstance}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", "Rapporteur Member State", false, "{{dossier.attribute.RapporteurMemberState}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", "Dossier Name", true, "{{dossier.attribute.Name}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", "Company", false, "{{dossier.attribute.Company}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", "Date", true, "{{dossier.attribute.Date}}", DossierAttributeType.DATE, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", "Signature", false, "{{dossier.attribute.Signature}}", DossierAttributeType.IMAGE, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", "Does not exist", true, "{{does.not.exist}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", + "Active Substance", + true, + "{{dossier.attribute.ActiveSubstance}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", + "Rapporteur Member State", + false, + "{{dossier.attribute.RapporteurMemberState}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", + "Dossier Name", + true, + "{{dossier.attribute.Name}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", + "Company", + false, + "{{dossier.attribute.Company}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", + "Date", + true, + "{{dossier.attribute.Date}}", + DossierAttributeType.DATE, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", + "Signature", + false, + "{{dossier.attribute.Signature}}", + DossierAttributeType.IMAGE, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", + "Does not exist", + true, + "{{does.not.exist}}", + DossierAttributeType.DATE, + dossierTemplateId); DossierAttributeConfig dossierAttributeConfig8 = new DossierAttributeConfig("id8", "test1", true, "{{test1}}", DossierAttributeType.DATE, dossierTemplateId); DossierAttributeConfig dossierAttributeConfig9 = new DossierAttributeConfig("id9", "test1", true, "{{TEST1}}", DossierAttributeType.DATE, dossierTemplateId); - when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6, dossierAttributeConfig7, dossierAttributeConfig8, dossierAttributeConfig9)); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, + dossierAttributeConfig2, + dossierAttributeConfig3, + dossierAttributeConfig4, + dossierAttributeConfig5, + dossierAttributeConfig6, + dossierAttributeConfig7, + dossierAttributeConfig8, + dossierAttributeConfig9)); FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").placeholder("{{file.test.1}}").build(); FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").placeholder("{{file.test.not.exist}}").build(); @@ -109,6 +154,7 @@ public class PlaceholderTest { Assert.assertEquals(storageId, reportTemplates.get(0).getStorageId()); } + @Test public void testWord() throws IOException { @@ -122,23 +168,65 @@ public class PlaceholderTest { when(reportTemplateClient.getReportTemplate(dossierTemplateId, reportTemplateId)).thenReturn(ReportTemplate.builder().storageId(storageId).build()); - DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", "Active Substance", true, "{{dossier.attribute.ActiveSubstance}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", "Rapporteur Member State", false, "{{dossier.attribute.RapporteurMemberState}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", "Dossier Name", true, "{{dossier.attribute.Name}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", "Company", false, "{{dossier.attribute.Company}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", "Date", true, "{{dossier.attribute.Date}}", DossierAttributeType.DATE, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", "Signature", false, "{{dossier.attribute.Signature}}", DossierAttributeType.IMAGE, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", "Does not exist", true, "{{does.not.exist}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", + "Active Substance", + true, + "{{dossier.attribute.ActiveSubstance}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", + "Rapporteur Member State", + false, + "{{dossier.attribute.RapporteurMemberState}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", + "Dossier Name", + true, + "{{dossier.attribute.Name}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", + "Company", + false, + "{{dossier.attribute.Company}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", + "Date", + true, + "{{dossier.attribute.Date}}", + DossierAttributeType.DATE, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", + "Signature", + false, + "{{dossier.attribute.Signature}}", + DossierAttributeType.IMAGE, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", + "Does not exist", + true, + "{{does.not.exist}}", + DossierAttributeType.DATE, + dossierTemplateId); DossierAttributeConfig dossierAttributeConfig8 = new DossierAttributeConfig("id8", "test1", true, "{{test1}}", DossierAttributeType.DATE, dossierTemplateId); DossierAttributeConfig dossierAttributeConfig9 = new DossierAttributeConfig("id9", "test1", true, "{{TEST1}}", DossierAttributeType.DATE, dossierTemplateId); - when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6, dossierAttributeConfig7, dossierAttributeConfig8, dossierAttributeConfig9)); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, + dossierAttributeConfig2, + dossierAttributeConfig3, + dossierAttributeConfig4, + dossierAttributeConfig5, + dossierAttributeConfig6, + dossierAttributeConfig7, + dossierAttributeConfig8, + dossierAttributeConfig9)); FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").placeholder("{{file.test.1}}").build(); FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").placeholder("{{file.test.not.exist}}").build(); when(fileAttributesClient.getFileAttributeConfigs(dossierTemplateId)).thenReturn(List.of(fileAttributeConfig1, fileAttributeConfig2)); - // Act Set placeholders = placeholderService.getPlaceholdersOfTemplate(dossierTemplateId, reportTemplateId); @@ -155,6 +243,7 @@ public class PlaceholderTest { Assert.assertFalse(placeholders.contains("{{file.test.not.exist}}")); } + @Test public void testExcel() throws IOException { @@ -168,16 +257,59 @@ public class PlaceholderTest { when(reportTemplateClient.getReportTemplate(dossierTemplateId, reportTemplateId)).thenReturn(ReportTemplate.builder().storageId(storageId).build()); - DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", "Active Substance", true, "{{dossier.attribute.ActiveSubstance}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", "Rapporteur Member State", false, "{{dossier.attribute.RapporteurMemberState}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", "Dossier Name", true, "{{dossier.attribute.Name}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", "Company", false, "{{dossier.attribute.Company}}", DossierAttributeType.TEXT, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", "Date", true, "{{dossier.attribute.Date}}", DossierAttributeType.DATE, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", "Signature", false, "{{dossier.attribute.Signature}}", DossierAttributeType.IMAGE, dossierTemplateId); - DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", "Does not exist", true, "{{does.not.exist}}", DossierAttributeType.DATE, dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig = new DossierAttributeConfig("id", + "Active Substance", + true, + "{{dossier.attribute.ActiveSubstance}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig2 = new DossierAttributeConfig("id2", + "Rapporteur Member State", + false, + "{{dossier.attribute.RapporteurMemberState}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig3 = new DossierAttributeConfig("id3", + "Dossier Name", + true, + "{{dossier.attribute.Name}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig4 = new DossierAttributeConfig("id4", + "Company", + false, + "{{dossier.attribute.Company}}", + DossierAttributeType.TEXT, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig5 = new DossierAttributeConfig("id5", + "Date", + true, + "{{dossier.attribute.Date}}", + DossierAttributeType.DATE, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig6 = new DossierAttributeConfig("id6", + "Signature", + false, + "{{dossier.attribute.Signature}}", + DossierAttributeType.IMAGE, + dossierTemplateId); + DossierAttributeConfig dossierAttributeConfig7 = new DossierAttributeConfig("id7", + "Does not exist", + true, + "{{does.not.exist}}", + DossierAttributeType.DATE, + dossierTemplateId); DossierAttributeConfig dossierAttributeConfig8 = new DossierAttributeConfig("id8", "test1", true, "{{test1}}", DossierAttributeType.DATE, dossierTemplateId); DossierAttributeConfig dossierAttributeConfig9 = new DossierAttributeConfig("id9", "test1", true, "{{TEST1}}", DossierAttributeType.DATE, dossierTemplateId); - when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, dossierAttributeConfig2, dossierAttributeConfig3, dossierAttributeConfig4, dossierAttributeConfig5, dossierAttributeConfig6, dossierAttributeConfig7, dossierAttributeConfig8, dossierAttributeConfig9)); + when(dossierAttributesConfigClient.getDossierAttributes(dossierTemplateId)).thenReturn(List.of(dossierAttributeConfig, + dossierAttributeConfig2, + dossierAttributeConfig3, + dossierAttributeConfig4, + dossierAttributeConfig5, + dossierAttributeConfig6, + dossierAttributeConfig7, + dossierAttributeConfig8, + dossierAttributeConfig9)); FileAttributeConfig fileAttributeConfig1 = FileAttributeConfig.builder().id("config1").label("Label1").placeholder("{{file.test.1}}").build(); FileAttributeConfig fileAttributeConfig2 = FileAttributeConfig.builder().id("config2").label("Label2").placeholder("{{file.test.not.exist}}").build(); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java index 749fb2d..b0c4861 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportIntegrationTest.java @@ -122,7 +122,18 @@ public class RedactionReportIntegrationTest { Dossier dossier = Dossier.builder().dossierName("dossierName").build(); FileModel fileModel = FileModel.builder().filename("filename").build(); - var placeholders = buildPlaceHolderModel(Map.of("{{dossier.attribute.ActiveSubstance}}", "Aktive Substanz \n Test Return", "{{dossier.attribute.RapporteurMemberState}}", "Reporter Status", "{{dossier.attribute.Name}}", "Dossier Name", "{{dossier.attribute.Company}}", "Firma", "{{dossier.attribute.Date}}", "2021-11-09T23:00:00.000Z"), Map.of("{{file.attribute.placeholder}}", "Test"), List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); + var placeholders = buildPlaceHolderModel(Map.of("{{dossier.attribute.ActiveSubstance}}", + "Aktive Substanz \n Test Return", + "{{dossier.attribute.RapporteurMemberState}}", + "Reporter Status", + "{{dossier.attribute.Name}}", + "Dossier Name", + "{{dossier.attribute.Company}}", + "Firma", + "{{dossier.attribute.Date}}", + "2021-11-09T23:00:00.000Z"), + Map.of("{{file.attribute.placeholder}}", "Test"), + List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); XWPFDocument doc = new XWPFDocument(wordTemplateResource.getInputStream()); wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true); @@ -148,7 +159,18 @@ public class RedactionReportIntegrationTest { Dossier dossier = Dossier.builder().dossierName("dossierName").build(); FileModel fileModel = FileModel.builder().filename("filename").build(); - var placeholders = buildPlaceHolderModel(Map.of("{{dossier.attribute.ActiveSubstance}}", "Aktive Substanz \n Test Return", "{{dossier.attribute.RapporteurMemberState}}", "Reporter Status", "{{dossier.attribute.Name}}", "Dossier Name", "{{dossier.attribute.Company}}", "Firma", "{{dossier.attribute.Date}}", "2021-11-09T23:00:00.000Z"), Map.of("{{file.attribute.placeholder}}", "Test"), List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); + var placeholders = buildPlaceHolderModel(Map.of("{{dossier.attribute.ActiveSubstance}}", + "Aktive Substanz \n Test Return", + "{{dossier.attribute.RapporteurMemberState}}", + "Reporter Status", + "{{dossier.attribute.Name}}", + "Dossier Name", + "{{dossier.attribute.Company}}", + "Firma", + "{{dossier.attribute.Date}}", + "2021-11-09T23:00:00.000Z"), + Map.of("{{file.attribute.placeholder}}", "Test"), + List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); XWPFDocument doc = new XWPFDocument(wordTemplateResource.getInputStream()); wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true); @@ -257,7 +279,18 @@ public class RedactionReportIntegrationTest { Dossier dossier = Dossier.builder().dossierName("dossierName").build(); FileModel fileModel = FileModel.builder().filename("filename").build(); - var placeholders = buildPlaceHolderModel(Map.of("{{dossier.attribute.ActiveSubstance}}", "Aktive Substanz \n Test Return", "{{dossier.attribute.RapporteurMemberState}}", "Reporter Status", "{{dossier.attribute.Name}}", "Dossier Name", "{{dossier.attribute.Company}}", "Firma", "{{dossier.attribute.Date}}", "2021-11-09T23:00:00.000Z"), Map.of("{{file.attribute.placeholder}}", "Test"), List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); + var placeholders = buildPlaceHolderModel(Map.of("{{dossier.attribute.ActiveSubstance}}", + "Aktive Substanz \n Test Return", + "{{dossier.attribute.RapporteurMemberState}}", + "Reporter Status", + "{{dossier.attribute.Name}}", + "Dossier Name", + "{{dossier.attribute.Company}}", + "Firma", + "{{dossier.attribute.Date}}", + "2021-11-09T23:00:00.000Z"), + Map.of("{{file.attribute.placeholder}}", "Test"), + List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); XWPFDocument doc = new XWPFDocument(wordTemplateResource.getInputStream()); wordReportGenerationService.generateWordReport(reportEntries, placeholders, "test", doc, fileModel, dossier, true); @@ -278,7 +311,7 @@ public class RedactionReportIntegrationTest { Map mapOfEntityDisplayName = createEntityDisplayNames(redactionLog); List reportEntries = redactionLogConverterService.convertAndSort(redactionLog, legalBasisMapping, mapOfEntityDisplayName); - FileModel fileModel = FileModel.builder().filename("filename").fileAttributes(Map.of("TestAttribute","Lorem Ipsum")).build(); + FileModel fileModel = FileModel.builder().filename("filename").fileAttributes(Map.of("TestAttribute", "Lorem Ipsum")).build(); ClassPathResource templateResource = new ClassPathResource("templates/Excel Report.xlsx"); @@ -323,7 +356,14 @@ public class RedactionReportIntegrationTest { RedactionLog redactionLogSecondFile = objectMapper.readValue(new ClassPathResource("files/excelReportRedactionLog.json").getInputStream(), RedactionLog.class); List reportEntriesSecondFile = redactionLogConverterService.convertAndSort(redactionLogSecondFile, legalBasisMapping, mapOfEntityDisplayName); FileModel fileModelSecondFile = FileModel.builder().filename("secondFile").build(); - excelTemplateReportGenerationService.generateExcelReport(reportEntriesSecondFile, placeholders, "test", writeWorkbook, "dossierName", fileModelSecondFile, excelModel, true); + excelTemplateReportGenerationService.generateExcelReport(reportEntriesSecondFile, + placeholders, + "test", + writeWorkbook, + "dossierName", + fileModelSecondFile, + excelModel, + true); byte[] excelTemplateReport3 = excelTemplateReportGenerationService.toByteArray(writeWorkbook); try (FileOutputStream fileOutputStream = new FileOutputStream(getTemporaryDirectory() + "/Excel Report_multifile.xlsx")) { @@ -347,7 +387,9 @@ public class RedactionReportIntegrationTest { ClassPathResource templateResource = new ClassPathResource("templates/Excel Report_PlaceholderTest.xlsx"); - var placeholders = buildPlaceHolderModel(Map.of("{{dossier_attribute.test1}}", "replaced_dossier_test1"), Map.of("{{file_attribute.test1}}", "replaced_file_test1", "{{file_attribute.test2}}", "replaced_file_test2"), List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); + var placeholders = buildPlaceHolderModel(Map.of("{{dossier_attribute.test1}}", "replaced_dossier_test1"), + Map.of("{{file_attribute.test1}}", "replaced_file_test1", "{{file_attribute.test2}}", "replaced_file_test2"), + List.of(new ImagePlaceholder("{{dossier.attribute.Signature}}", IOUtils.toByteArray(imageResource.getInputStream())))); XSSFWorkbook readWorkbook = new XSSFWorkbook(templateResource.getInputStream()); var excelModel = excelTemplateReportGenerationService.calculateExcelModel(readWorkbook.getSheetAt(0)); @@ -362,8 +404,6 @@ public class RedactionReportIntegrationTest { } - - private Map createEntityDisplayNames(RedactionLog redactionLog) { Type t1 = new Type(); @@ -391,7 +431,15 @@ public class RedactionReportIntegrationTest { private PlaceholderModel buildPlaceHolderModel(Map dossierAttributes, Map fileAttributes, List imagePlaceholders) { - var defaultPlaceHolder = new HashSet<>(Set.of(FILE_NAME_PLACEHOLDER, FORMAT_DATE_ISO_PLACEHOLDER, FORMAT_DATE_GER_PLACEHOLDER, FORMAT_DATE_ENG_PLACEHOLDER, FORMAT_TIME_ISO_PLACEHOLDER, DOSSIER_NAME_PLACEHOLDER, IUCLID_FUNCTION_PLACEHOLDER, SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER)); + var defaultPlaceHolder = new HashSet<>(Set.of(FILE_NAME_PLACEHOLDER, + FORMAT_DATE_ISO_PLACEHOLDER, + FORMAT_DATE_GER_PLACEHOLDER, + FORMAT_DATE_ENG_PLACEHOLDER, + FORMAT_TIME_ISO_PLACEHOLDER, + DOSSIER_NAME_PLACEHOLDER, + IUCLID_FUNCTION_PLACEHOLDER, + SEEDS_FUNCTION_REDACTION_GROUPED_BY_JUSTIFICATION_PAGES_PLACEHOLDER, + SEEDS_FUNCTION_JUSTIFICATION_PLACEHOLDER)); defaultPlaceHolder.addAll(dossierAttributes.keySet()); defaultPlaceHolder.addAll(fileAttributes.keySet()); return new PlaceholderModel(defaultPlaceHolder, imagePlaceholders, dossierAttributes, null, fileAttributes, new HashMap<>()); diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java index 5753faf..51e102c 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/RedactionReportV2IntegrationTest.java @@ -1,5 +1,33 @@ package com.iqser.red.service.redaction.report.v1.server; +import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory; +import static org.mockito.Mockito.when; + +import java.io.FileOutputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.IOUtils; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.Base64Utils; + import com.amazonaws.services.s3.AmazonS3; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -13,7 +41,14 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.redaction.report.v1.api.model.ReportRequestMessage; import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; -import com.iqser.red.service.redaction.report.v1.server.client.*; +import com.iqser.red.service.redaction.report.v1.server.client.DictionaryClient; +import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesClient; +import com.iqser.red.service.redaction.report.v1.server.client.DossierAttributesConfigClient; +import com.iqser.red.service.redaction.report.v1.server.client.DossierClient; +import com.iqser.red.service.redaction.report.v1.server.client.FileAttributesConfigClient; +import com.iqser.red.service.redaction.report.v1.server.client.FileStatusClient; +import com.iqser.red.service.redaction.report.v1.server.client.RedactionLogClient; +import com.iqser.red.service.redaction.report.v1.server.client.ReportTemplateClient; import com.iqser.red.service.redaction.report.v1.server.configuration.MessagingConfiguration; import com.iqser.red.service.redaction.report.v1.server.service.ReportGenerationService; import com.iqser.red.service.redaction.report.v1.server.utils.FileSystemBackedStorageService; @@ -24,30 +59,6 @@ import com.iqser.red.storage.commons.service.StorageService; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.IOUtils; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.*; -import org.springframework.core.io.ClassPathResource; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.util.Base64Utils; - -import java.io.FileOutputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import static com.iqser.red.service.redaction.report.v1.server.utils.OsUtils.getTemporaryDirectory; -import static org.mockito.Mockito.when; - @Slf4j @RunWith(SpringRunner.class) @Import(RedactionReportV2IntegrationTest.TestConfiguration.class) @@ -197,7 +208,7 @@ public class RedactionReportV2IntegrationTest { @SneakyThrows public void testBasicExcelReportFlow() { - var reportRequestMessage = prepareFlow(1,"templates/Excel Report.xlsx"); + var reportRequestMessage = prepareFlow(1, "templates/Excel Report.xlsx"); processRequest(reportRequestMessage, ".xlsx"); } @@ -206,7 +217,7 @@ public class RedactionReportV2IntegrationTest { @SneakyThrows public void testMultifileWordReportFlow() { - var reportRequestMessage = prepareFlow(2,"templates/Justification Appendix A1.docx"); + var reportRequestMessage = prepareFlow(2, "templates/Justification Appendix A1.docx"); processRequest(reportRequestMessage, ".docx"); } @@ -215,7 +226,7 @@ public class RedactionReportV2IntegrationTest { @SneakyThrows public void test2FilesConcurrently() { - var reportRequestMessage = prepareFlow(1,"templates/report.xlsx", "templates/report-advanced.xlsx"); + var reportRequestMessage = prepareFlow(1, "templates/report.xlsx", "templates/report-advanced.xlsx"); processRequest(reportRequestMessage, ".xlsx"); } diff --git a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java index 25fddb2..c836e3c 100644 --- a/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java +++ b/redaction-report-service-v1/redaction-report-service-server-v1/src/test/java/com/iqser/red/service/redaction/report/v1/server/utils/FileSystemBackedStorageService.java @@ -1,13 +1,5 @@ package com.iqser.red.service.redaction.report.v1.server.utils; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.iqser.red.commons.jackson.ObjectMapperFactory; -import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; -import com.iqser.red.storage.commons.service.StorageService; -import lombok.SneakyThrows; -import org.apache.commons.io.IOUtils; -import org.springframework.core.io.InputStreamResource; - import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -18,13 +10,26 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import org.apache.commons.io.IOUtils; +import org.springframework.core.io.InputStreamResource; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.commons.jackson.ObjectMapperFactory; +import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; +import com.iqser.red.storage.commons.service.StorageService; + +import lombok.SneakyThrows; + public class FileSystemBackedStorageService implements StorageService { private final Map dataMap = new HashMap<>(); + public FileSystemBackedStorageService() { + } + @SneakyThrows @Override public InputStreamResource getObject(String objectId) { @@ -37,48 +42,62 @@ public class FileSystemBackedStorageService implements StorageService { } + @Override public void deleteObject(String objectId) { + dataMap.remove(objectId); } + @Override public boolean objectExists(String objectId) { + return dataMap.containsKey(objectId); } + @Override public void init() { } + @Override @SneakyThrows public void storeJSONObject(String objectId, T any) { + File tempFile = File.createTempFile("test", ".tmp"); getMapper().writeValue(new FileOutputStream(tempFile), any); dataMap.put(objectId, tempFile); } + private ObjectMapper getMapper() { + return ObjectMapperFactory.create(); } + @Override @SneakyThrows public T readJSONObject(String objectId, Class clazz) { + if (dataMap.get(objectId) == null || !dataMap.get(objectId).exists()) { throw new StorageObjectDoesNotExist("Stored object not found"); } return getMapper().readValue(new FileInputStream(dataMap.get(objectId)), clazz); } + public List listPaths() { + return new ArrayList<>(dataMap.keySet()); } public List listFilePaths() { + return dataMap.values().stream().map(File::getAbsolutePath).collect(Collectors.toList()); } @@ -86,6 +105,7 @@ public class FileSystemBackedStorageService implements StorageService { @Override @SneakyThrows public void storeObject(String objectId, InputStream stream) { + File tempFile = File.createTempFile("test", ".tmp"); try (var fileOutputStream = new FileOutputStream(tempFile)) { @@ -97,9 +117,11 @@ public class FileSystemBackedStorageService implements StorageService { public void clearStorage() { + this.dataMap.forEach((k, v) -> { v.delete(); }); this.dataMap.clear(); } + }