diff --git a/pom.xml b/pom.xml
index 40c9f1b..90f3c21 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,6 +55,10 @@
false
+
+ maven-central
+ http://repo1.maven.org/maven2
+
Akaza Dev Repository
http://svn.akazaresearch.com/ocrepository/repository
@@ -330,6 +334,21 @@
tiles-jsp
2.2.1
+
+ org.apache.tiles
+ tiles-api
+ 2.2.1
+
+
+ org.apache.tiles
+ tiles-servlet
+ 2.2.1
+
+
+ org.apache.tiles
+ tiles-template
+ 2.2.1
+
org.springframework
spring-web
@@ -493,6 +512,11 @@
compile
+
+ org.codehaus.jackson
+ jackson-core-asl
+ 1.5.3
+
org.codehaus.jackson
jackson-mapper-asl
@@ -515,21 +539,41 @@
commons-httpclient
3.1
+
+ commons-validator
+ commons-validator
+ 1.4.1
+
org.springframework.security.oauth
spring-security-oauth
1.0.0.M2
-
+
org.apache.httpcomponents
httpclient
4.1
+
+ org.apache.httpcomponents
+ httpcore
+ 4.1
+
+
+ org.ow2.asm
+ asm
+ 3.2
+
org.codehaus.groovy
groovy
1.8.0
+
+ commons-beanutils
+ commons-beanutils-core
+ 1.8.3
+
diff --git a/src/main/java/org/akaza/openclinica/designer/web/controller/RuleBuilderController.java b/src/main/java/org/akaza/openclinica/designer/web/controller/RuleBuilderController.java
index 034c93e..df82646 100644
--- a/src/main/java/org/akaza/openclinica/designer/web/controller/RuleBuilderController.java
+++ b/src/main/java/org/akaza/openclinica/designer/web/controller/RuleBuilderController.java
@@ -450,7 +450,12 @@ public String testForm(@RequestHeader(value = "X-Requested-With", required = fal
* session.setAttribute(SESSION_ATTR_TESTINPUTFIELDS, inputFields);
*/
- testRules(form, uiODMBuilder, new TestRulesGetResponseHandler());
+ ArrayList responseHandlers = new ArrayList();
+ responseHandlers.add(new TestRulesGetResponseHandler());
+ responseHandlers.add(new TestRulesSubmitResponseHandler());
+
+ testRules(form, uiODMBuilder, responseHandlers);
+ form.populateTestWillActionsRun();
session.setAttribute(SESSION_ATTR_TESTINPUTFIELDS, form.getRulePropertiesHtml());
// success response handling
@@ -471,6 +476,10 @@ public String testForm(@RequestHeader(value = "X-Requested-With", required = fal
@RequestMapping(value = "/testForm", method = RequestMethod.POST)
public String processTestSubmit(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, @Valid RulesCommand form,
BindingResult result, HttpSession session, Model model) throws IOException {
+ ArrayList messages = new ArrayList();
+ form.getRuleRef().lazyToNonLazy();
+ form.setTestRulesResults(new HashMap());
+
UIODMContainer uiODMContainer = (UIODMContainer) session.getAttribute(SESSION_ATTR_UIODMCONTAINER);
UIODMBuilder uiODMBuilder = new UIODMBuilder(uiODMContainer);
@@ -486,10 +495,11 @@ public String processTestSubmit(@RequestHeader(value = "X-Requested-With", requi
return null;
}
- form.getRuleRef().lazyToNonLazy();
- ArrayList messages = new ArrayList();
+ ArrayList responseHandlers = new ArrayList();
+ responseHandlers.add(new TestRulesGetResponseHandler());
+ responseHandlers.add(new TestRulesSubmitResponseHandler());
- testRules(form, uiODMBuilder, new TestRulesSubmitResponseHandler());
+ testRules(form, uiODMBuilder, responseHandlers);
form.populateTestWillActionsRun();
session.setAttribute(SESSION_ATTR_FORM, form);
@@ -509,13 +519,15 @@ private Message createRestExceptionMessage(Exception e) {
return new Message(MessageType.error, "Could not submit to OC instance because :: " + message);
}
- private void testRules(RulesCommand form, UIODMBuilder uiODMBuilder, TestRulesResponseHandler responseHandler) {
+ private void testRules(RulesCommand form, UIODMBuilder uiODMBuilder, ArrayList responseHandlers) {
ArrayList messages = new ArrayList();
RulesTest resp = null;
try {
resp =
userPreferences.getRestTemplate().postForObject(userPreferences.getValidateAndTestRuleURL(), createRulesTestFromCommand(form), RulesTest.class);
- responseHandler.handle(form, resp, uiODMBuilder);
+ for (TestRulesResponseHandler responseHandler : responseHandlers) {
+ responseHandler.handle(form, resp, uiODMBuilder);
+ }
return;
} catch (Exception e) {
messages.add(createRestExceptionMessage(e));
@@ -568,8 +580,9 @@ private Rules rulesCommandToRules(RulesCommand form) {
RuleAssignmentType ra = new RuleAssignmentType();
form.getTarget().setValue(form.getTarget().getValue() == null ? "" : form.getTarget().getValue().trim());
ra.setTarget(form.getTargetCurated(form.getTarget()));
- if (!form.getRunOnSchedule().getTime().equals(""))
+ if (form.getRunOnSchedule() != null && !form.getRunOnSchedule().getTime().equals("")) {
ra.setRunOnSchedule(form.getRunOnSchedule());
+ }
Rules r = new Rules();
for (LazyRuleRefType2 lrr : listLzRuleRef) {
ra.getRuleRef().add(lrr);
diff --git a/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommandValidator.java b/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommandValidator.java
index dd981af..562e3d1 100644
--- a/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommandValidator.java
+++ b/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommandValidator.java
@@ -1,5 +1,6 @@
package org.akaza.openclinica.designer.web.controller;
+import org.apache.commons.validator.routines.EmailValidator;
import org.openclinica.ns.rules.v31.DiscrepancyNoteActionType;
import org.openclinica.ns.rules.v31.EmailActionType;
import org.openclinica.ns.rules.v31.HideActionType;
@@ -82,17 +83,15 @@ private void validateEmailAction(LazyRuleRefType2 action, Errors e) {
if (emailAction.getTo() == null || emailAction.getTo().trim().length() == 0) {
e.rejectValue("ruleRef.lazyEmailActions[" + action.getEmailAction().indexOf(emailAction) + "].to", "email.to.empty");
} else {
- Pattern pattern = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
+ EmailValidator validator = EmailValidator.getInstance();
StringTokenizer tokenizer = new StringTokenizer(emailAction.getTo(), ",");
if (tokenizer.countTokens() == 0) {
- Matcher matcher = pattern.matcher(emailAction.getTo());
- if (!matcher.matches()) {
+ if (!validator.isValid(emailAction.getTo())) {
e.rejectValue("ruleRef.lazyEmailActions[" + action.getEmailAction().indexOf(emailAction) + "].to", "email.to.not.valid");
}
} else {
while (tokenizer.hasMoreTokens()) {
- Matcher matcher = pattern.matcher(tokenizer.nextToken().trim());
- if (!matcher.matches()) {
+ if (!validator.isValid(tokenizer.nextToken().trim())) {
e.rejectValue("ruleRef.lazyEmailActions[" + action.getEmailAction().indexOf(emailAction) + "].to", "email.to.not.valid");
break;
}