Skip to content

Commit 08b9a52

Browse files
committed
validation logic added back to controller
1 parent c90e6eb commit 08b9a52

File tree

4 files changed

+79
-118
lines changed

4 files changed

+79
-118
lines changed

omod/src/main/java/org/openmrs/module/reporting/web/reports/CommandObject.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.openmrs.module.reporting.web.reports;
22

3+
import org.apache.commons.logging.Log;
4+
import org.apache.commons.logging.LogFactory;
35
import org.openmrs.api.context.Context;
46
import org.openmrs.module.reporting.cohort.definition.CohortDefinition;
57
import org.openmrs.module.reporting.evaluation.parameter.Mapped;
@@ -17,24 +19,20 @@
1719
public class CommandObject {
1820

1921
private String existingRequestUuid;
20-
2122
private ReportDefinition reportDefinition;
22-
2323
private Mapped<CohortDefinition> baseCohort;
24-
2524
private Map<String, Object> userEnteredParams;
26-
2725
private String selectedRenderer; // as RendererClass!Arg
28-
2926
private String schedule;
30-
3127
private Map<String, String> expressions;
3228

3329
private List<RenderingMode> renderingModes;
3430

31+
private transient Log log = LogFactory.getLog(this.getClass());
32+
3533
public CommandObject() {
3634
userEnteredParams = new LinkedHashMap<String, Object>();
37-
expressions = new HashMap<String, String>();
35+
expressions = new HashMap<String ,String>();
3836
}
3937

4038
@SuppressWarnings("unchecked")
@@ -45,15 +43,14 @@ public RenderingMode getSelectedMode() {
4543
Class<? extends ReportRenderer> rc = (Class<? extends ReportRenderer>) Context.loadClass(temp[0]);
4644
String arg = (temp.length > 1 && StringUtils.hasText(temp[1])) ? temp[1] : null;
4745
for (RenderingMode mode : renderingModes) {
48-
if (mode.getRenderer().getClass().equals(rc) && OpenmrsUtil
49-
.nullSafeEquals(mode.getArgument(), arg)) {
46+
if (mode.getRenderer().getClass().equals(rc) && OpenmrsUtil.nullSafeEquals(mode.getArgument(), arg)) {
5047
return mode;
5148
}
5249
}
53-
//log.warn("Could not find requested rendering mode: " + selectedRenderer);
50+
log.warn("Could not find requested rendering mode: " + selectedRenderer);
5451
}
5552
catch (Exception e) {
56-
//log.warn("Could not load requested renderer", e);
53+
log.warn("Could not load requested renderer", e);
5754
}
5855
}
5956
return null;

omod/src/main/java/org/openmrs/module/reporting/web/reports/RunReportFormController.java

Lines changed: 71 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Set;
1919

2020
import javax.servlet.http.HttpServletRequest;
21-
import javax.servlet.http.HttpServletResponse;
2221

2322
import org.apache.commons.logging.Log;
2423
import org.apache.commons.logging.LogFactory;
@@ -38,24 +37,17 @@
3837
import org.openmrs.module.reporting.report.renderer.RenderingMode;
3938
import org.openmrs.module.reporting.report.renderer.ReportRenderer;
4039
import org.openmrs.module.reporting.report.service.ReportService;
41-
import org.openmrs.module.reporting.web.validator.RunReportFormValidator;
4240
import org.openmrs.util.OpenmrsUtil;
4341
import org.quartz.CronExpression;
44-
import org.springframework.beans.factory.annotation.Autowired;
4542
import org.springframework.stereotype.Controller;
4643
import org.springframework.ui.ModelMap;
4744
import org.springframework.util.StringUtils;
4845
import org.springframework.validation.*;
49-
import org.springframework.web.bind.ServletRequestDataBinder;
5046
import org.springframework.web.bind.WebDataBinder;
5147
import org.springframework.web.bind.annotation.InitBinder;
5248
import org.springframework.web.bind.annotation.ModelAttribute;
5349
import org.springframework.web.bind.annotation.RequestMapping;
5450
import org.springframework.web.bind.annotation.RequestMethod;
55-
import org.springframework.web.servlet.ModelAndView;
56-
import org.springframework.web.servlet.mvc.BaseCommandController;
57-
import org.springframework.web.servlet.mvc.SimpleFormController;
58-
import org.springframework.web.servlet.view.RedirectView;
5951

6052
/**
6153
* This controller runs a report (which must be passed in with the reportId parameter) after
@@ -73,12 +65,79 @@
7365
* form's response.
7466
*/
7567
@Controller
76-
public class RunReportFormController {
68+
public class RunReportFormController implements Validator {
7769

7870
private transient Log log = LogFactory.getLog(this.getClass());
7971

80-
@Autowired
81-
RunReportFormValidator validator;
72+
@SuppressWarnings("rawtypes")
73+
public boolean supports(Class c) {
74+
return c == CommandObject.class;
75+
}
76+
77+
@Override
78+
public void validate(Object commandObject, Errors errors) {
79+
CommandObject command = (CommandObject) commandObject;
80+
ValidationUtils.rejectIfEmpty(errors, "reportDefinition", "reporting.Report.run.error.missingReportID");
81+
if (command.getReportDefinition() != null) {
82+
ReportDefinition reportDefinition = command.getReportDefinition();
83+
Set<String> requiredParams = new HashSet<String>();
84+
if (reportDefinition.getParameters() != null) {
85+
for (Parameter parameter : reportDefinition.getParameters()) {
86+
if (parameter.isRequired()) {
87+
requiredParams.add(parameter.getName());
88+
}
89+
}
90+
}
91+
92+
for (Map.Entry<String, Object> e : command.getUserEnteredParams().entrySet()) {
93+
if (e.getValue() instanceof Iterable || e.getValue() instanceof Object[]) {
94+
Object iterable = e.getValue();
95+
if (e.getValue() instanceof Object[]) {
96+
iterable = Arrays.asList((Object[]) e.getValue());
97+
}
98+
99+
boolean hasNull = true;
100+
101+
for (Object value : (Iterable<Object>) iterable) {
102+
hasNull = !ObjectUtil.notNull(value);
103+
}
104+
105+
if (!hasNull) {
106+
requiredParams.remove(e.getKey());
107+
}
108+
} else if (ObjectUtil.notNull(e.getValue())) {
109+
requiredParams.remove(e.getKey());
110+
}
111+
}
112+
if (requiredParams.size() > 0) {
113+
for (Iterator<String> iterator = requiredParams.iterator(); iterator.hasNext();) {
114+
String parameterName = (String) iterator.next();
115+
if (StringUtils.hasText(command.getExpressions().get(parameterName))) {
116+
String expression = command.getExpressions().get(parameterName);
117+
if (!EvaluationUtil.isExpression(expression)){
118+
errors.rejectValue("expressions[" + parameterName + "]",
119+
"reporting.Report.run.error.invalidParamExpression");
120+
}
121+
} else {
122+
errors.rejectValue("userEnteredParams[" + parameterName + "]", "error.required",
123+
new Object[] { "This parameter" }, "{0} is required");
124+
}
125+
}
126+
}
127+
128+
if (reportDefinition.getDataSetDefinitions() == null || reportDefinition.getDataSetDefinitions().size() == 0) {
129+
errors.reject("reporting.Report.run.error.definitionNotDeclared");
130+
}
131+
132+
if (ObjectUtil.notNull(command.getSchedule())) {
133+
if (!CronExpression.isValidExpression(command.getSchedule())) {
134+
errors.rejectValue("schedule", "reporting.Report.run.error.invalidCronExpression");
135+
}
136+
}
137+
}
138+
ValidationUtils.rejectIfEmpty(errors, "selectedRenderer", "reporting.Report.run.error.noRendererSelected");
139+
}
140+
82141

83142
@InitBinder
84143
private void initBinder(WebDataBinder binder) throws Exception {
@@ -103,7 +162,7 @@ protected String onSubmit(@ModelAttribute("report") CommandObject commandObject,
103162
CommandObject command = (CommandObject) commandObject;
104163
fillCommandObjectData(command, request);
105164

106-
validator.validate(commandObject, errors);
165+
validate(commandObject, errors);
107166

108167
if (errors.hasErrors()) {
109168
return "/module/reporting/run/runReportForm";
@@ -230,5 +289,4 @@ private void fillCommandObjectData(CommandObject command, HttpServletRequest req
230289
command.setRenderingModes(reportService.getRenderingModes(command.getReportDefinition()));
231290
}
232291
}
233-
234292
}

omod/src/main/java/org/openmrs/module/reporting/web/reports/RunReportListController.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,8 @@
88
*/
99
package org.openmrs.module.reporting.web.reports;
1010

11-
import javax.servlet.http.HttpServletRequest;
12-
13-
import org.openmrs.api.context.Context;
14-
import org.openmrs.module.reporting.report.definition.service.ReportDefinitionService;
1511
import org.springframework.stereotype.Controller;
1612
import org.springframework.web.bind.annotation.RequestMapping;
17-
import org.springframework.web.servlet.mvc.SimpleFormController;
1813

1914
/**
2015
*

omod/src/main/java/org/openmrs/module/reporting/web/validator/RunReportFormValidator.java

Lines changed: 0 additions & 89 deletions
This file was deleted.

0 commit comments

Comments
 (0)