Example 11: Add a new rule from a template to a rule set
In this example, a new rule is added from a template to a rule set. Before the new rule instance is created, parameters for the new rule instance are created.
package com.ibm.websphere.sample.brules.mgmt;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.ibm.wbiserver.brules.mgmt.BusinessRule;
import com.ibm.wbiserver.brules.mgmt.BusinessRuleGroup;
import com.ibm.wbiserver.brules.mgmt.BusinessRuleManagementException;
import com.ibm.wbiserver.brules.mgmt.BusinessRuleManager;
import com.ibm.wbiserver.brules.mgmt.Operation;
import com.ibm.wbiserver.brules.mgmt.Parameter;
import com.ibm.wbiserver.brules.mgmt.ParameterValue;
import com.ibm.wbiserver.brules.mgmt.query.QueryOperator;
import com.ibm.wbiserver.brules.mgmt.ruleset.RuleBlock;
import com.ibm.wbiserver.brules.mgmt.ruleset.RuleSet;
import com.ibm.wbiserver.brules.mgmt.ruleset.RuleSetRuleTemplate;
import
com.ibm.wbiserver.brules.mgmt.ruleset.RuleSetTemplateInstanceRule;
public class Example11
{
static Formatter out = new Formatter();
static public String executeExample11()
{
try
{
out.clear();
// Retrieve a business rule group by target namespace and
name
List<BusinessRuleGroup> brgList = BusinessRuleManager
.getBRGsByTNSAndName(
"http://BRSamples/com/ibm/websphere
/sample/brules",
QueryOperator.EQUAL,
"ApprovalValues",
QueryOperator.EQUAL, 0, 0);
if (brgList.size() > 0)
{
// Get the first business rule group from the list
// This should be the only business rule group in the
list as
// the combination of target namespace and name are
unique
BusinessRuleGroup brg = brgList.get(0);
// Get the operation of the business rule group that
// has the business rule that will be modified as
// the business rules are associated with a specific
// operation
Operation op = brg.getOperation("getApprover");
// Get the business rule on the operation that will
be modified
List<BusinessRule> ruleList =
op.getBusinessRulesByName(
"getApprover", QueryOperator.EQUAL, 0,0);
if (ruleList.size() > 0)
{
out.println("");
out.printlnBold("Rule set before publish:");
// Get the rule to be modified. Rules are unique by
// target namespace and name, but for this example
// there is only one business rule named
"getApprover"
RuleSet ruleSet = (RuleSet) ruleList.get(0);
out.print(RuleArtifactUtility.printRuleSet(rule
Set));
In order to add a new rule to the rule set, the appropriate template must
be located in the rule set and an instance created from the template. The
template can be located by name.
// Get the list of rule templates
ListRuleSetRuleTemplate> ruleTemplates =
ruleSet
.getRuleTemplates();
Iterator<RuleSetRuleTemplate> templateIterator
= ruleTemplates
.iterator();
while (templateIterator.hasNext())
{
RuleSetRuleTemplate template =
templateIterator.next();
// Locate the template to use to create a
new rule
if
(template.getName().equals("Template_Larg
eOrder"))
{
For a template instance, a list of parameters must be created.
// Create a list for the parameters
for this template
// rule instance
List<ParameterValue> paramList =
new ArrayList<ParameterValue>();
// From the template definition,
get a specific parameter
// and set the value
Parameter param =
template.getParameter("param0");
ParameterValue paramValue = param
.createParameterValue("
20");
// Add parameter to the list
paramList.add(paramValue);
// Get the next parameter and set
the value
param = template.getParameter("param1");
paramValue =
param.createParameterValue("7500");
// Add parameter to the list
paramList.add(paramValue);
// Get the next parameter and set
the value
param =
template.getParameter("param2");
paramValue = param
.createParameterValue("
2nd-line manager");
// Add parameter to the list
paramList.add(paramValue);
With the parameters created, the template instance can be created.
// Create the template rule
instance with the parameter
// list
RuleSetTemplateInstanceRule
templateInstance = template
.createRuleFromTemplate
("ExtraLargeOrder",
paramList);
// Get the ruleblock for the rule
set
RuleBlock ruleBlock =
ruleSet.getFirstRuleBlock();
Once the template instance is created, it can be added to the ruleblock.
Once it is added to the rule block it can be ordered among other template
rule instances.
// Add the template rule to the
ruleblock
ruleBlock.addRule(templateInstance)
;
break;
}
}
// Use the original list or create a new list
// of business rule groups
List<BusinessRuleGroup> publishList = new
ArrayList<BusinessRuleGroup>();
// Add the changed business rule group to the
list
publishList.add(brg);
// Publish the list with the updated business
rule group
BusinessRuleManager.publish(publishList, true);
out.println("");
// Retrieve the business rule groups again to
verify the
// changes were published
out.printlnBold("Rule set after publish:");
brgList = BusinessRuleManager
.getBRGsByTNSAndName(
"http://BRSamples/com/ibm/websphere
/sample/brules",
QueryOperator.EQUAL,
"ApprovalValues",
QueryOperator.EQUAL, 0, 0);
brg = brgList.get(0);
op = brg.getOperation("getApprover");
ruleList = op.getBusinessRulesByName(
"getApprover", QueryOperator.EQUAL,
0, 0);
ruleSet = (RuleSet) ruleList.get(0);
out.print(RuleArtifactUtility.printRuleSet(rule
Set));
}
}
} catch (BusinessRuleManagementException e)
{
e.printStackTrace();
out.println(e.getMessage());
}
return out.toString();
}
}
Example
Web browser output for example 11.
Executing example11
Rule set before publish:
Rule Set
Name: getApprover
Namespace: http://BRSamples/com/ibm/websphere/sample/brules
Rule: LargeOrderApprover
Display Name: LargeOrderApprover
Description: null
Expanded User Presentation: If the number of items order is above 10 and
the order is above $5000, then it requires the approval of supervisor
User Presentation: If the number of items order is above {0} and the order
is above ${1}, then it requires the approval of {2}
Parameter Name: param0
Parameter Value: 10
Parameter Name: param1
Parameter Value: 5000
Parameter Name: param2
Parameter Value: supervisor
Rule: DefaultApprover
Display Name: DefaultApprover
Description: null
Expanded User Presentation: approver = peer
User Presentation: approver = {0}
Parameter Name: param0
Parameter Value: peer
Rule set after publish:
Rule Set
Name: getApprover
Namespace: http://BRSamples/com/ibm/websphere/sample/brules
Rule: LargeOrderApprover
Display Name: LargeOrderApprover
Description: null
Expanded User Presentation: If the number of items order is above 10 and
the order is above $5000, then it requires the approval of supervisor
User Presentation: If the number of items order is above {0} and the order
is above ${1}, then it requires the approval of {2}
Parameter Name: param0
Parameter Value: 10
Parameter Name: param1
Parameter Value: 5000
Parameter Name: param2
Parameter Value: supervisor
Rule: DefaultApprover
Display Name: DefaultApprover
Description: null
Expanded User Presentation: approver = peer
User Presentation: approver = {0}
Parameter Name: param0
Parameter Value: peer
Rule: ExtraLargeOrder
Display Name:
Description: null
Expanded User Presentation: If the number of items order is above 20 and
the order is above $7500, then it requires the approval of 2nd-line manager
User Presentation: If the number of items order is above {0} and the order
is above ${1}, then it requires the approval of {2}
Parameter Name: param0
Parameter Value: 20
Parameter Name: param1
Parameter Value: 7500
Parameter Name: param2
Parameter Value: 2nd-line manager