From 341b2569c58df2c81c73846c9e9d2c43046da890 Mon Sep 17 00:00:00 2001 From: Jakub Kondrat Date: Tue, 16 Jan 2018 14:48:17 +0100 Subject: [PATCH] MW-701: Allow Specification of Report Types --- .../openlmis/report/domain/JasperTemplate.java | 8 ++++++++ .../openlmis/report/dto/JasperTemplateDto.java | 4 ++++ .../report/service/JasperTemplateService.java | 17 +++++++++++++---- ...te_jaspertemplate_supportedformats_table.sql | 15 +++++++++++++++ .../resources/schemas/jasperTemplateDto.json | 9 ++++++++- .../service/JasperTemplateServiceTest.java | 13 +++++++++++-- 6 files changed, 59 insertions(+), 7 deletions(-) create mode 100755 src/main/resources/db/migration/20180116142508120__create_jaspertemplate_supportedformats_table.sql diff --git a/src/main/java/org/openlmis/report/domain/JasperTemplate.java b/src/main/java/org/openlmis/report/domain/JasperTemplate.java index 3ed189f..aa97a94 100644 --- a/src/main/java/org/openlmis/report/domain/JasperTemplate.java +++ b/src/main/java/org/openlmis/report/domain/JasperTemplate.java @@ -71,6 +71,11 @@ public class JasperTemplate extends BaseEntity { @Setter private String description; + @ElementCollection + @Getter + @Setter + private List supportedFormats; + @ElementCollection @CollectionTable @Getter @@ -110,6 +115,7 @@ public void export(Exporter exporter) { exporter.setId(id); exporter.setName(name); exporter.setType(type); + exporter.setSupportedFormats(supportedFormats); } @PrePersist @@ -136,5 +142,7 @@ public interface Exporter { void setDescription(String description); void setRequiredRights(List rights); + + void setSupportedFormats(List formats); } } diff --git a/src/main/java/org/openlmis/report/dto/JasperTemplateDto.java b/src/main/java/org/openlmis/report/dto/JasperTemplateDto.java index 715737c..4f601ee 100644 --- a/src/main/java/org/openlmis/report/dto/JasperTemplateDto.java +++ b/src/main/java/org/openlmis/report/dto/JasperTemplateDto.java @@ -56,6 +56,10 @@ public class JasperTemplateDto implements JasperTemplate.Exporter { @Setter private List requiredRights; + @Getter + @Setter + private List supportedFormats; + @Getter @Setter private List templateParameters; diff --git a/src/main/java/org/openlmis/report/service/JasperTemplateService.java b/src/main/java/org/openlmis/report/service/JasperTemplateService.java index 9b36592..ec42a20 100644 --- a/src/main/java/org/openlmis/report/service/JasperTemplateService.java +++ b/src/main/java/org/openlmis/report/service/JasperTemplateService.java @@ -71,7 +71,8 @@ public class JasperTemplateService { static final String REPORT_TYPE_PROPERTY = "reportType"; private static final String DEFAULT_REPORT_TYPE = "Consistency Report"; private static final String[] ALLOWED_FILETYPES = {"jrxml"}; - + protected static final String SUPPORTED_FORMATS_PROPERTY = "supportedFormats"; + @Autowired private JasperTemplateRepository jasperTemplateRepository; @@ -231,6 +232,11 @@ private void validateFileAndSetData(JasperTemplate jasperTemplate, MultipartFile jasperTemplate.setType(reportType); } + String formats = report.getProperty(SUPPORTED_FORMATS_PROPERTY); + if (formats != null) { + jasperTemplate.setSupportedFormats(extractListProperties(formats)); + } + JRParameter[] jrParameters = report.getParameters(); if (jrParameters != null && jrParameters.length > 0) { @@ -347,12 +353,15 @@ private List extractDependencies(JRParameter } private List extractListProperties(JRParameter parameter, String property) { - String dependencyProperty = parameter.getPropertiesMap().getProperty(property); + return extractListProperties( + parameter.getPropertiesMap().getProperty(property)); + } - if (dependencyProperty != null) { + private List extractListProperties(String property) { + if (property != null) { // split by unescaped commas return Arrays - .stream(dependencyProperty.split("(? option.replace("\\,", ",")) .collect(Collectors.toList()); } diff --git a/src/main/resources/db/migration/20180116142508120__create_jaspertemplate_supportedformats_table.sql b/src/main/resources/db/migration/20180116142508120__create_jaspertemplate_supportedformats_table.sql new file mode 100755 index 0000000..b9117ae --- /dev/null +++ b/src/main/resources/db/migration/20180116142508120__create_jaspertemplate_supportedformats_table.sql @@ -0,0 +1,15 @@ +-- +-- Name: jaspertemplate_supportedformats; Type: TABLE; Schema: reports; Owner: postgres +-- + +CREATE TABLE jaspertemplate_supportedformats ( + jaspertemplateid uuid NOT NULL, + supportedformats character varying(255) +); + +-- +-- Name: jaspertemplate_supportedformats fkwnf16ufb6p8t2b6fasz39fgse; Type: FK CONSTRAINT; Schema: reports; Owner: postgres +-- + +ALTER TABLE ONLY jaspertemplate_supportedformats + ADD CONSTRAINT fkwnf16ufb6p8t2b6fasz39fgse FOREIGN KEY (jaspertemplateid) REFERENCES jasper_templates(id); diff --git a/src/main/resources/schemas/jasperTemplateDto.json b/src/main/resources/schemas/jasperTemplateDto.json index 14cd962..a97cd6d 100755 --- a/src/main/resources/schemas/jasperTemplateDto.json +++ b/src/main/resources/schemas/jasperTemplateDto.json @@ -44,8 +44,15 @@ "description": { "type": ["string", "null"], "title": "description" + }, + "supportedFormats": { + "type": ["array", "null"], + "title": "supportedFormats", + "items": { + "type": "string" + } } - } , + }, "required": [ "id", "name" diff --git a/src/test/java/org/openlmis/report/service/JasperTemplateServiceTest.java b/src/test/java/org/openlmis/report/service/JasperTemplateServiceTest.java index 3b7c2d6..5354584 100644 --- a/src/test/java/org/openlmis/report/service/JasperTemplateServiceTest.java +++ b/src/test/java/org/openlmis/report/service/JasperTemplateServiceTest.java @@ -69,7 +69,9 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.arrayContaining; import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.hasSize; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -88,6 +90,7 @@ import static org.openlmis.report.i18n.ReportingMessageKeys.ERROR_REPORTING_PARAMETER_MISSING; import static org.openlmis.report.i18n.ReportingMessageKeys.ERROR_REPORTING_TEMPLATE_EXIST; import static org.openlmis.report.service.JasperTemplateService.REPORT_TYPE_PROPERTY; +import static org.openlmis.report.service.JasperTemplateService.SUPPORTED_FORMATS_PROPERTY; import static org.powermock.api.mockito.PowerMockito.doNothing; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.mockStatic; @@ -330,10 +333,13 @@ public void shouldValidateFileAndSetData() throws Exception { JRPropertiesMap propertiesMap = mock(JRPropertiesMap.class); JRExpression jrExpression = mock(JRExpression.class); - String[] propertyNames = {DISPLAY_NAME}; - when(report.getParameters()).thenReturn(new JRParameter[]{param1, param2, param3}); when(report.getProperty(REPORT_TYPE_PROPERTY)).thenReturn("test type"); + when(report.getProperty(SUPPORTED_FORMATS_PROPERTY)).thenReturn("csv,xls"); + + when(report.getParameters()).thenReturn(new JRParameter[]{param1, param2, param3}); when(JasperCompileManager.compileReport(inputStream)).thenReturn(report); + + String[] propertyNames = {DISPLAY_NAME}; when(propertiesMap.getPropertyNames()).thenReturn(propertyNames); when(propertiesMap.getProperty(DISPLAY_NAME)).thenReturn(PARAM_DISPLAY_NAME); when(propertiesMap.getProperty(REQUIRED)).thenReturn("true"); @@ -376,6 +382,9 @@ public void shouldValidateFileAndSetData() throws Exception { verify(jasperTemplateRepository).save(jasperTemplate); assertEquals("test type", jasperTemplate.getType()); + assertThat(jasperTemplate.getSupportedFormats(), hasSize(2)); + assertThat(jasperTemplate.getSupportedFormats(), hasItems("csv", "xls")); + assertThat(jasperTemplate.getTemplateParameters().get(0).getDisplayName(), is(PARAM_DISPLAY_NAME)); assertThat(jasperTemplate.getTemplateParameters().get(0).getDescription(), is("desc"));