/** * This overridden updates an existing Rule in the Repository * * @see * org.kuali.rice.krms.impl.repository.RuleBoService#updateRule(org.kuali.rice.krms.api.repository.rule.RuleDefinition) */ @Override public void updateRule(RuleDefinition rule) { if (rule == null) { throw new IllegalArgumentException("rule is null"); } // must already exist to be able to update final String ruleIdKey = rule.getId(); final RuleBo existing = businessObjectService.findBySinglePrimaryKey(RuleBo.class, ruleIdKey); if (existing == null) { throw new IllegalStateException("the rule does not exist: " + rule); } final RuleDefinition toUpdate; if (!existing.getId().equals(rule.getId())) { // if passed in id does not match existing id, correct it final RuleDefinition.Builder builder = RuleDefinition.Builder.create(rule); builder.setId(existing.getId()); toUpdate = builder.build(); } else { toUpdate = rule; } // copy all updateable fields to bo RuleBo boToUpdate = RuleBo.from(toUpdate); // delete any old, existing attributes Map<String, String> fields = new HashMap<String, String>(1); fields.put(PropertyNames.Rule.RULE_ID, toUpdate.getId()); businessObjectService.deleteMatching(RuleAttributeBo.class, fields); // update the rule and create new attributes businessObjectService.save(boToUpdate); }
/** * This overridden creates a KRMS Rule in the repository * * @see * org.kuali.rice.krms.impl.repository.RuleBoService#createRule(org.kuali.rice.krms.api.repository.rule.RuleDefinition) */ @Override public RuleDefinition createRule(RuleDefinition rule) { if (rule == null) { throw new IllegalArgumentException("rule is null"); } final String nameKey = rule.getName(); final String namespaceKey = rule.getNamespace(); final RuleDefinition existing = getRuleByNameAndNamespace(nameKey, namespaceKey); if (existing != null) { throw new IllegalStateException("the rule to create already exists: " + rule); } RuleBo ruleBo = RuleBo.from(rule); businessObjectService.save(ruleBo); return RuleBo.to(ruleBo); }
/** * This method retrieves a rule from the repository given the rule id. * * @see org.kuali.rice.krms.impl.repository.RuleBoService#getRuleByRuleId(java.lang.String) */ @Override public RuleDefinition getRuleByRuleId(String ruleId) { if (StringUtils.isBlank(ruleId)) { throw new IllegalArgumentException("rule id is null"); } RuleBo bo = businessObjectService.findBySinglePrimaryKey(RuleBo.class, ruleId); return RuleBo.to(bo); }
/** * Converts a List<RuleBo> to an Unmodifiable List<Rule> * * @param RuleBos a mutable List<RuleBo> to made completely immutable. * @return An unmodifiable List<Rule> */ public List<RuleDefinition> convertListOfBosToImmutables(final Collection<RuleBo> ruleBos) { ArrayList<RuleDefinition> rules = new ArrayList<RuleDefinition>(); for (RuleBo bo : ruleBos) { RuleDefinition rule = RuleBo.to(bo); rules.add(rule); } return Collections.unmodifiableList(rules); }
/** * This method retrieves a rule from the repository given the name of the rule and namespace. * * @see org.kuali.rice.krms.impl.repository.RuleBoService#getRuleByRuleId(java.lang.String) */ @Override public RuleDefinition getRuleByNameAndNamespace(String name, String namespace) { if (StringUtils.isBlank(name)) { throw new IllegalArgumentException("name is blank"); } if (StringUtils.isBlank(namespace)) { throw new IllegalArgumentException("namespace is blank"); } final Map<String, Object> map = new HashMap<String, Object>(); map.put("name", name); map.put("namespace", namespace); RuleBo myRule = businessObjectService.findByPrimaryKey(RuleBo.class, Collections.unmodifiableMap(map)); return RuleBo.to(myRule); }