diff --git a/src/main/java/org/akaza/openclinica/designer/web/controller/LazyRuleRefType2.java b/src/main/java/org/akaza/openclinica/designer/web/controller/LazyRuleRefType2.java index 2327b71..b1e5a69 100644 --- a/src/main/java/org/akaza/openclinica/designer/web/controller/LazyRuleRefType2.java +++ b/src/main/java/org/akaza/openclinica/designer/web/controller/LazyRuleRefType2.java @@ -7,6 +7,7 @@ import org.openclinica.ns.rules.v31.RuleRefType; import org.openclinica.ns.rules.v31.ShowActionType; import org.openclinica.ns.rules.v31.EventActionType; +import org.openclinica.ns.rules.v31.RuleDefType; import org.springframework.util.AutoPopulatingList; import java.util.ArrayList; @@ -58,7 +59,6 @@ public LazyRuleRefType2(RuleRefType ruleRef) { } public void lazyToNonLazy() { - reAlignDiscrepancyNoteActions(); reAlignEmailActions(); reAlignLazyShowActions(); @@ -67,6 +67,67 @@ public void lazyToNonLazy() { reAlignLazyEventActions(); } + public List splitRuleRef(RuleRefType ruleRef) { + List listLazy = new ArrayList(); + int count = 0; + for (EmailActionType ea : ruleRef.getEmailAction()) { + LazyRuleRefType2 rr = new LazyRuleRefType2(); + rr.setOID(ruleRef.getOID()+"_"+count); + rr.getEmailAction().add(ea); + count++; + listLazy.add(rr); + } + for (DiscrepancyNoteActionType ea : ruleRef.getDiscrepancyNoteAction()) { + LazyRuleRefType2 rr = new LazyRuleRefType2(); + rr.setOID(ruleRef.getOID()+"_"+count); + rr.getDiscrepancyNoteAction().add(ea); + count++; + listLazy.add(rr); + } + for (ShowActionType ea : ruleRef.getShowAction()) { + LazyRuleRefType2 rr = new LazyRuleRefType2(); + rr.setOID(ruleRef.getOID()+"_"+count); + rr.getShowAction().add(ea); + count++; + listLazy.add(rr); + } + for (HideActionType ea : ruleRef.getHideAction()) { + LazyRuleRefType2 rr = new LazyRuleRefType2(); + rr.setOID(ruleRef.getOID()+"_"+count); + rr.getHideAction().add(ea); + count++; + listLazy.add(rr); + } + for (InsertActionType ea : ruleRef.getInsertAction()) { + LazyRuleRefType2 rr = new LazyRuleRefType2(); + rr.setOID(ruleRef.getOID()+"_"+count); + rr.getInsertAction().add(ea); + count++; + listLazy.add(rr); + } + for (EventActionType ea : ruleRef.getEventAction()) { + LazyRuleRefType2 rr = new LazyRuleRefType2(); + rr.setOID(ruleRef.getOID()+"_"+count); + rr.getEventAction().add(ea); + count++; + listLazy.add(rr); + } + return listLazy; + } + + public List splitRuleDef(RuleDefType ruleDef, int size) { + List listRdt = new ArrayList(); + for (int i = 0; i < size; i++) { + RuleDefType rdt = new RuleDefType(); + rdt.setOID(ruleDef.getOID()+"_"+i); + rdt.setExpression(ruleDef.getExpression()); + rdt.setName(ruleDef.getOID()+"_"+i); + rdt.setDescription(ruleDef.getOID()+"_"+i); + listRdt.add(rdt); + } + return listRdt; + } + /** * Based on the rule's result check if any action will fire * @param result 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 ce1b23c..a89d99a 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 @@ -6,6 +6,7 @@ import org.openclinica.ns.response.v31.MessagesType; import org.openclinica.ns.response.v31.Response; import org.openclinica.ns.rules.v31.RuleAssignmentType; +import org.openclinica.ns.rules.v31.RuleDefType; import org.openclinica.ns.rules.v31.Rules; import org.openclinica.ns.rules_test.v31.ParameterType; import org.openclinica.ns.rules_test.v31.RulesTest; @@ -87,7 +88,6 @@ public static boolean isAjaxUploadRequest(HttpServletRequest request) { @RequestMapping(method = RequestMethod.GET) public String getCreateForm(Model model, HttpSession session, HttpServletRequest request) throws IOException { - final String ruleOid = request.getParameter("ruleOid"); final String target = request.getParameter("target"); @@ -102,7 +102,6 @@ public String getCreateForm(Model model, HttpSession session, HttpServletRequest @RequestMapping(value = "/ruleBuilderFormA", method = RequestMethod.GET) public void form(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, HttpSession session, Model model, @RequestParam(value = PARAM_RESET, required = false) String resetParam) { - RulesCommand form = (RulesCommand) session.getAttribute(SESSION_ATTR_FORM) != null ? (RulesCommand) session.getAttribute(SESSION_ATTR_FORM) : null; if (form == null || (resetParam != null && resetParam.equals("true"))) { @@ -122,7 +121,6 @@ public void form(@RequestHeader(value = "X-Requested-With", required = false) St public @ResponseBody ArrayList processDesignTabToTest(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, @Valid RulesCommand form, BindingResult result, HttpSession session, Model model) throws IOException { - ArrayList messages = new ArrayList(); UIODMContainer uiODMContainer = (UIODMContainer) session.getAttribute(SESSION_ATTR_UIODMCONTAINER); // TODO: See if there is a way to move this to one place currently happens here and in Validator. @@ -181,7 +179,6 @@ String processDesignTabSubmit(@RequestHeader(value = "X-Requested-With", require @RequestMapping(value = "/ruleBuilderFormA", method = RequestMethod.POST) public String processSubmit(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, @Valid RulesCommand form, BindingResult result, HttpSession session, Model model) throws IOException { - logger.debug("Validating form ..."); ArrayList messages = new ArrayList(); UIODMContainer uiODMContainer = (UIODMContainer) session.getAttribute(SESSION_ATTR_UIODMCONTAINER); @@ -246,7 +243,6 @@ public String saveRuleFromDesignerTab(@RequestHeader(value = "X-Requested-With", @RequestMapping(value = "/xmlForm", method = RequestMethod.GET) public void processSubmit(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, HttpSession session, Model model, @RequestParam(value = PARAM_RESET, required = false) String resetParam) throws IOException { - RulesCommand form = (RulesCommand) session.getAttribute(SESSION_ATTR_FORM); if (resetParam != null && resetParam.equals("true")) { form = new RulesCommand(); @@ -285,7 +281,6 @@ public void processSubmit(@RequestHeader(value = "X-Requested-With", required = @RequestMapping(value = "/xmlForm", method = RequestMethod.POST) public String processXmlFormSubmit(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, RulesCommand form, BindingResult result, HttpSession session, Model model, @RequestParam("ignoreDuplicates") Boolean ignoreDuplicates) throws IOException { - UIODMContainer uiODMContainer = (UIODMContainer) session.getAttribute(SESSION_ATTR_UIODMCONTAINER); ArrayList messages = new ArrayList(); @@ -433,7 +428,6 @@ ArrayList processXmlTabSubmit(@RequestHeader(value = "X-Requested-With" @RequestMapping(value = "/testForm", method = RequestMethod.GET) public String testForm(@RequestHeader(value = "X-Requested-With", required = false) String requestedWith, HttpSession session, Model model) throws IOException { - ArrayList messages = new ArrayList(); RulesCommand form = (RulesCommand) session.getAttribute(SESSION_ATTR_FORM); form.getRuleRef().lazyToNonLazy(); @@ -476,7 +470,6 @@ 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 { - UIODMContainer uiODMContainer = (UIODMContainer) session.getAttribute(SESSION_ATTR_UIODMCONTAINER); UIODMBuilder uiODMBuilder = new UIODMBuilder(uiODMContainer); @@ -567,17 +560,21 @@ private ArrayList saveRule(UIODMContainer uiODMContainer, Rules rule, R * Convert RulesCommand to Rules Object */ private Rules rulesCommandToRules(RulesCommand form) { - form.getRuleRef().lazyToNonLazy(); + RulesCommand rc = new RulesCommand(form); + rc.getRuleRef().setOID(form.getRuleDef().getOID()); + LazyRuleRefType2 lzRuleRef = new LazyRuleRefType2(); + List listLzRuleRef = lzRuleRef.splitRuleRef(rc.getRuleRef()); RuleAssignmentType ra = new RuleAssignmentType(); form.getTarget().setValue(form.getTarget().getValue() == null ? "" : form.getTarget().getValue().trim()); ra.setTarget(form.getTargetCurated(form.getTarget())); - ra.getRuleRef().add(form.getRuleRef()); - ra.getRuleRef().get(0).setOID(form.getRuleDef().getOID()); Rules r = new Rules(); + for (LazyRuleRefType2 lrr : listLzRuleRef) { + ra.getRuleRef().add(lrr); + } r.getRuleAssignment().add(ra); - r.getRuleDef().add(form.getRuleDefCurated()); - r.getRuleDef().get(0).setName(r.getRuleDef().get(0).getOID()); - r.getRuleDef().get(0).setDescription(r.getRuleDef().get(0).getOID()); + for(RuleDefType rdt : lzRuleRef.splitRuleDef(form.getRuleDefCurated(), listLzRuleRef.size())) { + r.getRuleDef().add(rdt); + } return r; } @@ -604,7 +601,6 @@ private RulesTest createRulesTestFromCommand(RulesCommand form) { * Convert XML which is represented as a String to Rules Object */ private Rules loadRulesFromString(String rulesString) throws UnMarshallingException { - StringReader reader = new StringReader(rulesString); Rules rules = null; try { diff --git a/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommand.java b/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommand.java index 6267297..5f9bb68 100644 --- a/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommand.java +++ b/src/main/java/org/akaza/openclinica/designer/web/controller/RulesCommand.java @@ -31,6 +31,17 @@ public RulesCommand() { ruleDef = new RuleDefType(); } + public RulesCommand(RulesCommand rule) { + ruleRef = rule.getRuleRef(); + target = rule.getTarget(); + addActions = rule.getAddActions(); + xml = rule.getXml(); + rulePropertiesHtml = rule.getRulePropertiesHtml(); + ruleProperties = rule.getRuleProperties(); + testRulesResults = rule.getTestRulesResults(); + testWillActionsRun = rule.getTestWillActionsRun(); + } + public LazyRuleRefType2 getRuleRef() { return ruleRef; }