mifosx-195 report maintenance (fixed)
This commit is contained in:
+65
-20
@@ -6,6 +6,7 @@
|
||||
package org.mifosplatform.infrastructure.dataqueries.domain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@@ -59,13 +60,12 @@ public class Report extends AbstractPersistable<Long> {
|
||||
|
||||
@Column(name = "report_sql")
|
||||
private String reportSql;
|
||||
|
||||
|
||||
@LazyCollection(LazyCollectionOption.FALSE)
|
||||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "report", orphanRemoval = true)
|
||||
private Set<ReportParameterUsage> reportParameterUsages = new HashSet<ReportParameterUsage>();
|
||||
|
||||
public static Report fromJson(
|
||||
final JsonCommand command) {
|
||||
public static Report fromJson(final JsonCommand command) {
|
||||
|
||||
String reportName = null;
|
||||
String reportType = null;
|
||||
@@ -173,14 +173,16 @@ public class Report extends AbstractPersistable<Long> {
|
||||
this.reportSql = StringUtils.defaultIfEmpty(newValue, null);
|
||||
}
|
||||
|
||||
final String reportParametersParamName = "reportParameters";
|
||||
if (command.hasParameter(reportParametersParamName)) {
|
||||
JsonArray jsonArray = command.arrayOfParameterNamed(reportParametersParamName);
|
||||
if (jsonArray != null) {
|
||||
actualChanges.put(reportParametersParamName, command.jsonFragment(reportParametersParamName));
|
||||
}
|
||||
}
|
||||
|
||||
final String reportParametersParamName = "reportParameters";
|
||||
if (command.hasParameter(reportParametersParamName)) {
|
||||
JsonArray jsonArray = command
|
||||
.arrayOfParameterNamed(reportParametersParamName);
|
||||
if (jsonArray != null) {
|
||||
actualChanges.put(reportParametersParamName,
|
||||
command.jsonFragment(reportParametersParamName));
|
||||
}
|
||||
}
|
||||
|
||||
validate();
|
||||
|
||||
if (!actualChanges.isEmpty()) {
|
||||
@@ -294,18 +296,61 @@ public class Report extends AbstractPersistable<Long> {
|
||||
return false;
|
||||
|
||||
boolean updated = false;
|
||||
if (this.reportParameterUsages != null) {
|
||||
|
||||
if (!(this.reportParameterUsages.equals(newReportParameterUsages))) {
|
||||
updated = true;
|
||||
this.reportParameterUsages.clear();
|
||||
|
||||
this.reportParameterUsages.addAll(newReportParameterUsages);
|
||||
}
|
||||
} else {
|
||||
if (changeInReportParameters(newReportParameterUsages)) {
|
||||
updated = true;
|
||||
this.reportParameterUsages = newReportParameterUsages;
|
||||
this.reportParameterUsages.clear();
|
||||
this.reportParameterUsages.addAll(newReportParameterUsages);
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
|
||||
private boolean changeInReportParameters(
|
||||
Set<ReportParameterUsage> newReportParameterUsages) {
|
||||
|
||||
if (!(this.reportParameterUsages.equals(newReportParameterUsages))) return true;
|
||||
|
||||
Map<Long, ReportParameterUsage> currentRPUs = new HashMap<Long, ReportParameterUsage>();
|
||||
for (ReportParameterUsage rpu : this.reportParameterUsages) {
|
||||
currentRPUs.put(rpu.getId(), rpu);
|
||||
}
|
||||
|
||||
Map<Long, ReportParameterUsage> newRPUs = new HashMap<Long, ReportParameterUsage>();
|
||||
for (ReportParameterUsage rpu : newReportParameterUsages) {
|
||||
newRPUs.put(rpu.getId(), rpu);
|
||||
}
|
||||
|
||||
ReportParameterUsage currentRPU = null;
|
||||
ReportParameterUsage newRPU = null;
|
||||
for (Long key : currentRPUs.keySet()) {
|
||||
currentRPU = currentRPUs.get(key);
|
||||
newRPU = newRPUs.get(key);
|
||||
|
||||
if (existingEntryChanged(currentRPU, newRPU)) return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private boolean existingEntryChanged(
|
||||
final ReportParameterUsage currentRPU, final ReportParameterUsage newRPU) {
|
||||
|
||||
if (!(currentRPU.getParameter().getId()
|
||||
.equals(newRPU.getParameter().getId())))
|
||||
return true;
|
||||
|
||||
if ((currentRPU.getReportParameterName() == null)
|
||||
&& (newRPU.getReportParameterName() == null))
|
||||
return false;
|
||||
|
||||
if (!(currentRPU.getReportParameterName()
|
||||
.equals(newRPU.getReportParameterName())))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+16
@@ -41,6 +41,14 @@ public class ReportParameterUsage extends AbstractPersistable<Long> {
|
||||
this.parameter = parameter;
|
||||
this.reportParameterName = reportParameterName;
|
||||
}
|
||||
|
||||
public ReportParameterUsage(final ReportParameterUsage currentReportParameterUsage, final Report report,
|
||||
final ReportParameter parameter, final String reportParameterName) {
|
||||
this.setId(currentReportParameterUsage.getId());
|
||||
this.report = report;
|
||||
this.parameter = parameter;
|
||||
this.reportParameterName = reportParameterName;
|
||||
}
|
||||
|
||||
public void setReport(Report report) {
|
||||
this.report = report;
|
||||
@@ -50,6 +58,14 @@ public class ReportParameterUsage extends AbstractPersistable<Long> {
|
||||
this.parameter = parameter;
|
||||
}
|
||||
|
||||
public ReportParameter getParameter() {
|
||||
return parameter;
|
||||
}
|
||||
|
||||
public String getReportParameterName() {
|
||||
return reportParameterName;
|
||||
}
|
||||
|
||||
public void setReportParameterName(String reportParameterName) {
|
||||
this.reportParameterName = reportParameterName;
|
||||
}
|
||||
|
||||
+34
-19
@@ -223,33 +223,28 @@ public class ReportWritePlatformServiceImpl implements
|
||||
"reportParameterName").getAsString();
|
||||
}
|
||||
|
||||
ReportParameterUsage reportParameterUsage = null;
|
||||
if (jsonObject.has("id")) {
|
||||
final String idStr = jsonObject.get("id").getAsString();
|
||||
if (!(idStr.equals("")))
|
||||
id = Long.parseLong(idStr);
|
||||
}
|
||||
|
||||
|
||||
ReportParameterUsage reportParameterUsage = null;
|
||||
if (id == null) {
|
||||
reportParameterUsage = new ReportParameterUsage(report,
|
||||
parameter, reportParameterName);
|
||||
} else {
|
||||
reportParameterUsage = rpuById(report, id);
|
||||
ReportParameterUsage currentReportParameterUsage = rpuById(
|
||||
report, 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 (existingEntryChanged(currentReportParameterUsage,
|
||||
parameter.getId(), reportParameterName)) {
|
||||
reportParameterUsage = new ReportParameterUsage(
|
||||
currentReportParameterUsage, report,
|
||||
parameter, reportParameterName);
|
||||
} else {
|
||||
reportParameterUsage = currentReportParameterUsage;
|
||||
}
|
||||
}
|
||||
|
||||
reportParameterUsages.add(reportParameterUsage);
|
||||
@@ -261,6 +256,25 @@ public class ReportWritePlatformServiceImpl implements
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean existingEntryChanged(
|
||||
final ReportParameterUsage currentReportParameterUsage,
|
||||
final Long parameterId, final String reportParameterName) {
|
||||
|
||||
if (!(currentReportParameterUsage.getParameter().getId()
|
||||
.equals(parameterId)))
|
||||
return true;
|
||||
|
||||
if ((reportParameterName == null)
|
||||
&& (currentReportParameterUsage.getReportParameterName() == null))
|
||||
return false;
|
||||
|
||||
if (!(currentReportParameterUsage.getReportParameterName()
|
||||
.equals(reportParameterName)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private ReportParameterUsage rpuById(final Report report, final Long id) {
|
||||
|
||||
for (ReportParameterUsage rpu : report.getReportParameterUsages()) {
|
||||
@@ -268,7 +282,8 @@ public class ReportWritePlatformServiceImpl implements
|
||||
return rpu;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
throw new PlatformDataIntegrityException(
|
||||
"error.msg.supplied.parameter.id.doesnt.exist",
|
||||
"Supplied parameterId column doesn't Exist", id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user