diff --git a/mifosng-db/migrations/core_db/V33__drop_unique_check_on_stretchy_report_parameter.sql b/mifosng-db/migrations/core_db/V33__drop_unique_check_on_stretchy_report_parameter.sql new file mode 100644 index 000000000..af31b43f1 --- /dev/null +++ b/mifosng-db/migrations/core_db/V33__drop_unique_check_on_stretchy_report_parameter.sql @@ -0,0 +1,3 @@ + +ALTER TABLE stretchy_report_parameter + DROP INDEX `report_id_name_UNIQUE` ; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/Report.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/Report.java index d67aebc7f..420e9991e 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/Report.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/Report.java @@ -6,6 +6,7 @@ package org.mifosplatform.infrastructure.dataqueries.domain; import java.util.ArrayList; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -58,13 +59,12 @@ public class Report extends AbstractPersistable { @Column(name = "report_sql") private String reportSql; - + @LazyCollection(LazyCollectionOption.FALSE) - @OneToMany(cascade = CascadeType.ALL, mappedBy = "report") - private Set reportParameterUsages = null; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "report", orphanRemoval = true) + private Set reportParameterUsages = new HashSet(); public static Report fromJson( - final Set reportParameterUsages, final JsonCommand command) { String reportName = null; @@ -94,8 +94,7 @@ public class Report extends AbstractPersistable { reportSql = command.stringValueOfParameterNamed("reportSql"); return new Report(reportName, reportType, reportSubType, - reportCategory, description, useReport, reportSql, - reportParameterUsages); + reportCategory, description, useReport, reportSql); } protected Report() { @@ -105,8 +104,7 @@ public class Report extends AbstractPersistable { public Report(final String reportName, final String reportType, final String reportSubType, final String reportCategory, final String description, final boolean useReport, - final String reportSql, - final Set reportParameterUsages) { + final String reportSql) { this.reportName = reportName; this.reportType = reportType; this.reportSubType = reportSubType; @@ -115,7 +113,6 @@ public class Report extends AbstractPersistable { this.coreReport = false; this.useReport = useReport; this.reportSql = reportSql; - this.reportParameterUsages = reportParameterUsages; validate(); } @@ -286,6 +283,11 @@ public class Report extends AbstractPersistable { return reportParameterUsages; } + public void setReportParameterUsages( + Set reportParameterUsages) { + this.reportParameterUsages = reportParameterUsages; + } + public boolean update( final Set newReportParameterUsages) { if (newReportParameterUsages == null) @@ -296,7 +298,9 @@ public class Report extends AbstractPersistable { if (!(this.reportParameterUsages.equals(newReportParameterUsages))) { updated = true; - this.reportParameterUsages = newReportParameterUsages; + this.reportParameterUsages.clear(); + + this.reportParameterUsages.addAll(newReportParameterUsages); } } else { updated = true; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameter.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameter.java index c72cb6f8e..e795cd30d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameter.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameter.java @@ -14,10 +14,8 @@ import org.springframework.data.jpa.domain.AbstractPersistable; @Table(name = "stretchy_parameter") public class ReportParameter extends AbstractPersistable { - - protected ReportParameter() { - // - } - + protected ReportParameter() { + // + } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameterUsage.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameterUsage.java index 673e8e2f2..0a9b05967 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameterUsage.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/domain/ReportParameterUsage.java @@ -16,7 +16,7 @@ import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "stretchy_report_parameter") public class ReportParameterUsage extends AbstractPersistable { - + @SuppressWarnings("unused") @ManyToOne(optional = false) @JoinColumn(name = "report_id", nullable = false) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReportWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReportWritePlatformServiceImpl.java index 0bda9c035..258e32f3f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReportWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReportWritePlatformServiceImpl.java @@ -71,19 +71,16 @@ public class ReportWritePlatformServiceImpl implements this.fromApiJsonDeserializer.validate(command.json()); + final Report report = Report.fromJson(command); final Set reportParameterUsages = assembleSetOfReportParameterUsages( - null, command); - final Report report = Report.fromJson(reportParameterUsages, - command); + report, command); if (reportParameterUsages != null) { - for (ReportParameterUsage rpu : reportParameterUsages) { - rpu.setReport(report); - } + report.setReportParameterUsages(reportParameterUsages); } + this.reportRepository.save(report); final Permission permission = new Permission("report", report.getReportName(), "READ"); - this.reportRepository.save(report); this.permissionRepository.save(permission); return new CommandProcessingResultBuilder() @@ -188,6 +185,10 @@ public class ReportWritePlatformServiceImpl implements private Set assembleSetOfReportParameterUsages( final Report report, final JsonCommand command) { + if (report == null) { + throw new PlatformDataIntegrityException("system.error", + "report parameter is null; "); + } if (command.parameterExists("reportParameters")) { Set reportParameterUsages = new HashSet(); @@ -223,36 +224,32 @@ public class ReportWritePlatformServiceImpl implements } ReportParameterUsage reportParameterUsage = null; - if (report == null) { + if (jsonObject.has("id")) { + final String idStr = jsonObject.get("id").getAsString(); + if (!(idStr.equals(""))) + id = Long.parseLong(idStr); + } + + if (id == null) { reportParameterUsage = new ReportParameterUsage(report, parameter, reportParameterName); } else { - if (jsonObject.has("id")) { - final String idStr = jsonObject.get("id") - .getAsString(); - if (!(idStr.equals(""))) - id = Long.parseLong(idStr); - } - if (id == null) { - reportParameterUsage = new ReportParameterUsage( - report, parameter, reportParameterName); - } else { - reportParameterUsage = rpuById(report, id); + reportParameterUsage = rpuById(report, id); - if (reportParameterUsage == null) { - throw new PlatformDataIntegrityException( - "error.msg.supplied.parameter.id.doesnt.exist", - "Supplied parameterId column doesn't Exist", - id); + if (reportParameterUsage == null) { + throw new PlatformDataIntegrityException( + "error.msg.supplied.parameter.id.doesnt.exist", + "Supplied parameterId column doesn't Exist", + id); + } + + if (parameter != null) + reportParameterUsage.setParameter(parameter); + + if (reportParameterName != null) { + reportParameterUsage + .setReportParameterName(reportParameterName); } - - if (parameter != null) - reportParameterUsage.setParameter(parameter); - - if (reportParameterName != null) - reportParameterUsage - .setReportParameterName(reportParameterName); - } } reportParameterUsages.add(reportParameterUsage);