1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.module.purap.document.workflow;
17  
18  import org.kuali.ole.module.purap.PurapConstants;
19  import org.kuali.ole.sys.OLEConstants;
20  import org.kuali.ole.sys.OLEPropertyConstants;
21  import org.kuali.ole.sys.context.SpringContext;
22  import org.kuali.ole.sys.document.workflow.OLEDocumentSearchCustomizer;
23  import org.kuali.rice.kew.api.document.Document;
24  import org.kuali.rice.kew.api.document.DocumentStatusCategory;
25  import org.kuali.rice.kew.api.document.attribute.DocumentAttribute;
26  import org.kuali.rice.kew.api.document.attribute.DocumentAttributeString;
27  import org.kuali.rice.kew.api.document.search.DocumentSearchCriteria;
28  import org.kuali.rice.kew.api.document.search.DocumentSearchResult;
29  import org.kuali.rice.kew.framework.document.search.DocumentSearchResultValue;
30  import org.kuali.rice.kew.framework.document.search.DocumentSearchResultValues;
31  import org.kuali.rice.kim.api.KimConstants;
32  import org.kuali.rice.kim.api.services.IdentityManagementService;
33  import org.kuali.rice.krad.util.GlobalVariables;
34  
35  import java.util.ArrayList;
36  import java.util.HashMap;
37  import java.util.List;
38  import java.util.Map;
39  
40  public class OLEPurapDocumentSearchCustomizer extends OLEDocumentSearchCustomizer {
41  
42      
43  
44  
45      @Override
46      public DocumentSearchResultValues customizeResults(DocumentSearchCriteria documentSearchCriteria, List<DocumentSearchResult> defaultResults) {
47          
48          GlobalVariables.getMessageMap().putWarning(OLEPropertyConstants.DOCUMENT_NUMBER, PurapConstants.WARNING_PURCHASEORDER_NUMBER_DONT_DISCLOSE);
49  
50          org.kuali.rice.kew.framework.document.search.DocumentSearchResultValues.Builder customResultsBuilder = DocumentSearchResultValues.Builder.create();
51  
52          List<DocumentSearchResultValue.Builder> customResultValueBuilders = new ArrayList<DocumentSearchResultValue.Builder>();
53  
54          boolean isAuthorizedToViewPurapDocId = false;
55          if (defaultResults.size() > 0) {
56              for (DocumentAttribute documentAttribute : defaultResults.get(0).getDocumentAttributes()) {
57                  if (OLEPropertyConstants.PURAP_DOC_ID.equals(documentAttribute.getName())) {
58                      isAuthorizedToViewPurapDocId = isAuthorizedToViewPurapDocId();
59                  }
60              }
61          }
62          for (DocumentSearchResult result : defaultResults) {
63              List<DocumentAttribute.AbstractBuilder<?>> custAttrBuilders = new ArrayList<DocumentAttribute.AbstractBuilder<?>>();
64              Document document = result.getDocument();
65  
66              for (DocumentAttribute documentAttribute : result.getDocumentAttributes()) {
67                  if (OLEPropertyConstants.PURAP_DOC_ID.equals(documentAttribute.getName())) {
68                      if (!isAuthorizedToViewPurapDocId && !document.getStatus().getCategory().equals(DocumentStatusCategory.SUCCESSFUL)) {
69                          DocumentAttributeString.Builder builder = DocumentAttributeString.Builder.create(OLEPropertyConstants.PURAP_DOC_ID);
70                          builder.setValue("********");
71                          custAttrBuilders.add(builder);
72                          break;
73                      }
74                  }
75              }
76              DocumentSearchResultValue.Builder builder = DocumentSearchResultValue.Builder.create(document.getDocumentId());
77              builder.setDocumentAttributes(custAttrBuilders);
78              customResultValueBuilders.add(builder);
79          }
80          customResultsBuilder.setResultValues(customResultValueBuilders);
81  
82          return customResultsBuilder.build();
83      }
84  
85      @Override
86      public boolean isCustomizeResultsEnabled(String documentTypeName) {
87          
88          if (PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_DOCUMENT.equalsIgnoreCase(documentTypeName)
89                  || PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_SPLIT_DOCUMENT.equalsIgnoreCase(documentTypeName)) {
90              return true;
91          }
92          return super.isCustomizeResultsEnabled(documentTypeName);
93      }
94  
95      protected boolean isAuthorizedToViewPurapDocId() {
96          String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
97          String namespaceCode = OLEConstants.CoreModuleNamespaces.KNS;
98          String permissionTemplateName = KimConstants.PermissionTemplateNames.FULL_UNMASK_FIELD;
99  
100         Map<String, String> roleQualifiers = new HashMap<String, String>();
101 
102         Map<String, String> permissionDetails = new HashMap<String, String>();
103         permissionDetails.put(KimConstants.AttributeConstants.COMPONENT_NAME, OLEPropertyConstants.PURCHASE_ORDER_DOCUMENT_SIMPLE_NAME);
104         permissionDetails.put(KimConstants.AttributeConstants.PROPERTY_NAME, OLEPropertyConstants.PURAP_DOC_ID);
105 
106         IdentityManagementService identityManagementService = SpringContext.getBean(IdentityManagementService.class);
107         boolean isAuthorized = identityManagementService.isAuthorizedByTemplateName(principalId, namespaceCode, permissionTemplateName, permissionDetails, roleQualifiers);
108         return isAuthorized;
109     }
110 
111 }