1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kns.workflow.attribute;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.kew.engine.RouteContext;
20 import org.kuali.rice.kew.api.exception.WorkflowException;
21 import org.kuali.rice.kew.role.QualifierResolver;
22 import org.kuali.rice.kim.api.KimConstants;
23 import org.kuali.rice.krad.document.Document;
24 import org.kuali.rice.krad.service.DocumentService;
25 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
26
27 import java.util.List;
28 import java.util.Map;
29
30
31
32
33 public abstract class QualifierResolverBase implements QualifierResolver {
34 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(QualifierResolverBase.class);
35
36 protected static final String KIM_ATTRIBUTE_DOCUMENT_TYPE_NAME = KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME;
37 protected static final String KIM_ATTRIBUTE_DOCUMENT_NUMBER = KimConstants.AttributeConstants.DOCUMENT_NUMBER;
38 protected static final String KIM_ATTRIBUTE_ROUTE_LEVEL_NAME = KimConstants.AttributeConstants.ROUTE_NODE_NAME;
39
40 private static DocumentService documentService;
41
42
43
44
45
46
47 protected Document getDocument(RouteContext context) {
48 String documentID = getDocumentId(context);
49
50 if (documentID != null) {
51 try {
52 return getDocumentService().getByDocumentHeaderIdSessionless(documentID);
53 }
54 catch (WorkflowException e) {
55 LOG.error("Unable to retrieve document with system user.", e);
56 return null;
57 }
58 }
59 return null;
60 }
61
62
63
64
65
66
67
68 protected String getDocumentId(RouteContext context) {
69 final String documentID = context.getNodeInstance().getDocumentId();
70 return documentID != null ? documentID.toString() : null;
71 }
72
73
74 public DocumentService getDocumentService() {
75 if ( documentService == null ) {
76 documentService = KRADServiceLocatorWeb.getDocumentService();
77 }
78 return documentService;
79 }
80
81
82
83
84
85
86
87
88 protected void decorateWithCommonQualifiers(List<Map<String, String>> qualifiers, RouteContext context, String customDocTypeName) {
89 for (Map<String, String> qualifier : qualifiers) {
90 addCommonQualifiersToMap(qualifier, context, customDocTypeName);
91 }
92 }
93
94
95
96
97
98
99
100
101 protected void addCommonQualifiersToMap(Map<String, String> qualifier, RouteContext context, String customDocTypeName) {
102 qualifier.put(KIM_ATTRIBUTE_DOCUMENT_NUMBER, context.getDocument().getDocumentId() );
103 if ( !qualifier.containsKey(KIM_ATTRIBUTE_DOCUMENT_TYPE_NAME) ) {
104 if ( StringUtils.isBlank(customDocTypeName)) {
105 qualifier.put(KIM_ATTRIBUTE_DOCUMENT_TYPE_NAME,
106 context.getDocument().getDocumentType().getName() );
107 } else {
108 qualifier.put(KIM_ATTRIBUTE_DOCUMENT_TYPE_NAME, customDocTypeName );
109 }
110 }
111 qualifier.put(KIM_ATTRIBUTE_ROUTE_LEVEL_NAME, context.getNodeInstance().getName());
112 }
113
114 }