1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.xml.export;
17
18 import org.jdom.Element;
19 import org.kuali.rice.core.api.impex.ExportDataSet;
20 import org.kuali.rice.core.api.util.xml.XmlRenderer;
21 import org.kuali.rice.core.framework.impex.xml.XmlExporter;
22 import org.kuali.rice.kew.export.KewExportDataSet;
23 import org.kuali.rice.kew.rule.RuleBaseValues;
24 import org.kuali.rice.kew.rule.RuleDelegationBo;
25 import org.kuali.rice.kew.rule.RuleTemplateOptionBo;
26 import org.kuali.rice.kew.rule.bo.RuleTemplateBo;
27 import org.kuali.rice.kew.rule.bo.RuleTemplateAttributeBo;
28 import org.kuali.rice.kew.service.KEWServiceLocator;
29
30 import java.util.Iterator;
31 import java.util.List;
32
33 import static org.kuali.rice.core.api.impex.xml.XmlConstants.*;
34
35
36
37
38
39
40
41 public class RuleTemplateXmlExporter implements XmlExporter {
42
43 protected final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(getClass());
44
45 private XmlRenderer renderer = new XmlRenderer(RULE_TEMPLATE_NAMESPACE);
46
47 @Override
48 public boolean supportPrettyPrint() {
49 return true;
50 }
51
52 public Element export(ExportDataSet exportDataSet) {
53 KewExportDataSet dataSet = KewExportDataSet.fromExportDataSet(exportDataSet);
54 if (!dataSet.getRuleTemplates().isEmpty()) {
55 Element rootElement = renderer.renderElement(null, RULE_TEMPLATES);
56 rootElement.setAttribute(SCHEMA_LOCATION_ATTR, RULE_TEMPLATE_SCHEMA_LOCATION, SCHEMA_NAMESPACE);
57 for (Iterator iterator = dataSet.getRuleTemplates().iterator(); iterator.hasNext();) {
58 RuleTemplateBo template = (RuleTemplateBo)iterator.next();
59 exportRuleTemplate(rootElement, template);
60 }
61 return rootElement;
62 }
63 return null;
64 }
65
66 private void exportRuleTemplate(Element parent, RuleTemplateBo ruleTemplate) {
67 Element templateElement = renderer.renderElement(parent, RULE_TEMPLATE);
68 renderer.renderTextElement(templateElement, NAME, ruleTemplate.getName());
69 renderer.renderTextElement(templateElement, DESCRIPTION, ruleTemplate.getDescription());
70 if (ruleTemplate.getDelegationTemplate() != null) {
71 renderer.renderTextElement(templateElement, DELEGATION_TEMPLATE, ruleTemplate.getDelegationTemplate().getName());
72 }
73 exportAttributes(templateElement, ruleTemplate.getActiveRuleTemplateAttributes());
74 exportDefaults(templateElement, ruleTemplate);
75 }
76
77 private void exportAttributes(Element parent, List ruleTemplateAttributes) {
78 if (!ruleTemplateAttributes.isEmpty()) {
79 Element attributesElement = renderer.renderElement(parent, ATTRIBUTES);
80 for (Iterator iterator = ruleTemplateAttributes.iterator(); iterator.hasNext();) {
81 RuleTemplateAttributeBo attribute = (RuleTemplateAttributeBo) iterator.next();
82 Element attributeElement = renderer.renderElement(attributesElement, ATTRIBUTE);
83 renderer.renderTextElement(attributeElement, NAME, attribute.getRuleAttribute().getName());
84 renderer.renderBooleanElement(attributeElement, REQUIRED, attribute.getRequired(), false);
85 }
86 }
87 }
88
89 private void exportDefaults(Element parent, RuleTemplateBo ruleTemplate) {
90 RuleBaseValues defaultRuleValues = KEWServiceLocator.getRuleService().findDefaultRuleByRuleTemplateId(ruleTemplate.getId());
91 if (defaultRuleValues != null) {
92 RuleDelegationBo defaultDelegationValues = getDefaultDelegationValues(defaultRuleValues);
93 Element defaultsElement = renderer.renderElement(parent, RULE_DEFAULTS);
94 if (defaultDelegationValues != null) {
95 renderer.renderTextElement(defaultsElement, DELEGATION_TYPE, defaultDelegationValues.getDelegationType().getCode());
96 }
97 renderer.renderTextElement(defaultsElement, DESCRIPTION, defaultRuleValues.getDescription());
98 if (defaultRuleValues.getFromDateValue() != null) {
99 renderer.renderDateElement(defaultsElement, FROM_DATE, defaultRuleValues.getFromDateValue());
100 }
101 if (defaultRuleValues.getToDateValue() != null) {
102 renderer.renderDateElement(defaultsElement, TO_DATE, defaultRuleValues.getToDateValue());
103 }
104 renderer.renderBooleanElement(defaultsElement, FORCE_ACTION, defaultRuleValues.isForceAction(), false);
105 renderer.renderBooleanElement(defaultsElement, ACTIVE, defaultRuleValues.isActive(), true);
106 if (defaultDelegationValues == null) {
107 RuleTemplateOptionBo defaultActionOption = ruleTemplate.getDefaultActionRequestValue();
108 RuleTemplateOptionBo supportsComplete = ruleTemplate.getComplete();
109 RuleTemplateOptionBo supportsApprove = ruleTemplate.getApprove();
110 RuleTemplateOptionBo supportsAck = ruleTemplate.getAcknowledge();
111 RuleTemplateOptionBo supportsFYI = ruleTemplate.getFyi();
112 if (defaultActionOption != null) {
113 String defaultActionValue = (defaultActionOption == null ? null : defaultActionOption.getValue());
114 renderer.renderTextElement(defaultsElement, DEFAULT_ACTION_REQUESTED, defaultActionValue);
115 }
116 if (supportsComplete != null) {
117 String supportsCompleteValue = supportsComplete.getValue();
118 renderer.renderTextElement(defaultsElement, SUPPORTS_COMPLETE, supportsCompleteValue);
119 }
120 if (supportsApprove != null) {
121 String supportsApproveValue = supportsApprove.getValue();
122 renderer.renderTextElement(defaultsElement, SUPPORTS_APPROVE, supportsApproveValue);
123 }
124 if (supportsAck != null) {
125 String supportsAckValue = supportsAck.getValue();
126 renderer.renderTextElement(defaultsElement, SUPPORTS_ACKNOWLEDGE, supportsAckValue);
127 }
128 if (supportsFYI != null) {
129 String supportsFYIValue = supportsFYI.getValue();
130 renderer.renderTextElement(defaultsElement, SUPPORTS_FYI, supportsFYIValue);
131 }
132 }
133 }
134 }
135
136 private RuleDelegationBo getDefaultDelegationValues(RuleBaseValues defaultRuleValues) {
137 List ruleDelegations = KEWServiceLocator.getRuleDelegationService().findByDelegateRuleId(defaultRuleValues.getId());
138 if (ruleDelegations.size() > 1) {
139 LOG.warn("The rule defaults has more than one associated delegation defaults.");
140 }
141 return (ruleDelegations.isEmpty() ? null : (RuleDelegationBo)ruleDelegations.get(0));
142 }
143
144 }