@RequestMapping(value = "/studies/{study}/validateAndSaveRule", method = RequestMethod.POST) public @ResponseBody Response validateAndSave( @RequestBody org.openclinica.ns.rules.v31.Rules rules, Model model, HttpSession session, @PathVariable("study") String studyOid, @RequestParam("ignoreDuplicates") Boolean ignoreDuplicates) throws Exception { ResourceBundleProvider.updateLocale(new Locale("en_US")); RulesPostImportContainer rpic = mapRulesToRulesPostImportContainer(rules); StudyDAO studyDao = new StudyDAO(dataSource); StudyBean currentStudy = studyDao.findByOid(studyOid); UserAccountBean userAccount = getUserAccount(); mayProceed(userAccount, currentStudy); getRulePostImportContainerService(currentStudy, userAccount); rpic = getRulePostImportContainerService(currentStudy, userAccount).validateRuleDefs(rpic); rpic = getRulePostImportContainerService(currentStudy, userAccount).validateRuleSetDefs(rpic); Response response = new Response(); response.setValid(Boolean.TRUE); if (rpic.getInValidRuleDefs().size() > 0 || rpic.getInValidRuleSetDefs().size() > 0) { response.setValid(Boolean.FALSE); for (AuditableBeanWrapper<RuleBean> beanWrapper : rpic.getInValidRuleDefs()) { for (String error : beanWrapper.getImportErrors()) { org.openclinica.ns.response.v31.MessagesType messageType = new MessagesType(); messageType.setMessage(error); response.getMessages().add(messageType); } } for (AuditableBeanWrapper<RuleSetBean> beanWrapper : rpic.getInValidRuleSetDefs()) { for (String error : beanWrapper.getImportErrors()) { org.openclinica.ns.response.v31.MessagesType messageType = new MessagesType(); messageType.setMessage(error); response.getMessages().add(messageType); } } } else if ((rpic.getDuplicateRuleDefs().size() > 0) && !ignoreDuplicates) { response.setValid(Boolean.FALSE); for (AuditableBeanWrapper<RuleBean> beanWrapper : rpic.getDuplicateRuleDefs()) { org.openclinica.ns.response.v31.MessagesType messageType = new MessagesType(); messageType.setMessage(DUPLICATE_MESSAGE); response.getMessages().add(messageType); } } else { getRuleSetService().saveImportFromDesigner(rpic); } logger.debug("RPIC READY"); return response; }
public RulesPostImportContainer validateRuleDefs(RulesPostImportContainer importContainer) { for (RuleBean ruleBean : importContainer.getRuleDefs()) { AuditableBeanWrapper<RuleBean> ruleBeanWrapper = new AuditableBeanWrapper<RuleBean>(ruleBean); if (isRuleOidValid(ruleBeanWrapper) && isRuleExpressionValid(ruleBeanWrapper, null)) { RuleBean persistentRuleBean = getRuleDao().findByOid(ruleBeanWrapper.getAuditableBean()); if (persistentRuleBean != null) { String name = ruleBeanWrapper.getAuditableBean().getName(); String expressionValue = ruleBeanWrapper.getAuditableBean().getExpression().getValue(); String expressionContextName = ruleBeanWrapper.getAuditableBean().getExpression().getContextName(); Context context = expressionContextName != null ? Context.getByName(expressionContextName) : Context.OC_RULES_V1; ruleBeanWrapper.setAuditableBean(persistentRuleBean); ruleBeanWrapper.getAuditableBean().setName(name); ruleBeanWrapper.getAuditableBean().getExpression().setValue(expressionValue); ruleBeanWrapper.getAuditableBean().getExpression().setContext(context); // ruleBeanWrapper.getAuditableBean().setId(persistentRuleBean.getId()); // ruleBeanWrapper.getAuditableBean().getExpression().setId(persistentRuleBean.getExpression().getId()); } } putRuleInCorrectContainer(ruleBeanWrapper, importContainer); } logger.info( "# of Valid RuleDefs : {} , # of InValid RuleDefs : {} , # of Overwritable RuleDefs : {}", new Object[] { importContainer.getValidRuleDefs().size(), importContainer.getInValidRuleDefs().size(), importContainer.getDuplicateRuleDefs().size() }); return importContainer; }
private void putRuleInCorrectContainer( AuditableBeanWrapper<RuleBean> ruleBeanWrapper, RulesPostImportContainer importContainer) { if (!ruleBeanWrapper.isSavable()) { importContainer.getInValidRuleDefs().add(ruleBeanWrapper); importContainer .getInValidRules() .put(ruleBeanWrapper.getAuditableBean().getOid(), ruleBeanWrapper); } else if (ruleBeanWrapper.getAuditableBean().getId() == null) { importContainer.getValidRuleDefs().add(ruleBeanWrapper); importContainer .getValidRules() .put(ruleBeanWrapper.getAuditableBean().getOid(), ruleBeanWrapper); } else if (ruleBeanWrapper.getAuditableBean().getId() != null) { importContainer.getDuplicateRuleDefs().add(ruleBeanWrapper); importContainer .getValidRules() .put(ruleBeanWrapper.getAuditableBean().getOid(), ruleBeanWrapper); } }