View Javadoc

1   /*
2    * Copyright 2007-2009 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing responsibilitys and
14   * limitations under the License.
15   */
16  package org.kuali.rice.kim.impl.responsibility;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.rice.core.util.RiceKeyConstants;
20  import org.kuali.rice.kim.api.responsibility.Responsibility;
21  import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibility;
22  import org.kuali.rice.kim.document.IdentityManagementRoleDocument;
23  import org.kuali.rice.kim.impl.responsibility.ResponsibilityBo;
24  import org.kuali.rice.kim.util.KimConstants;
25  import org.kuali.rice.krad.rules.DocumentRuleBase;
26  import org.kuali.rice.krad.util.GlobalVariables;
27  
28  import java.util.HashMap;
29  import java.util.Map;
30  
31  /**
32   * This is a description of what this class does - shyu don't forget to fill this in. 
33   * 
34   * @author Kuali Rice Team (rice.collab@kuali.org)
35   *
36   */
37  public class KimDocumentResponsibilityRule extends DocumentRuleBase implements AddResponsibilityRule {
38  
39  	public static final String ERROR_PATH = "document.responsibility.responsibilityId";
40  
41  	public boolean processAddResponsibility(AddResponsibilityEvent addResponsibilityEvent) {
42  		KimDocumentRoleResponsibility newResponsibility = addResponsibilityEvent.getResponsibility();
43  		if(newResponsibility==null){
44  			GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Responsibility"});
45  			return false;
46  		}
47  
48  		ResponsibilityBo kimResponsibilityImpl = newResponsibility.getKimResponsibility();
49  		if(kimResponsibilityImpl==null){
50  			GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Responsibility"});
51  			return false;
52  		}
53  
54  		IdentityManagementRoleDocument document = (IdentityManagementRoleDocument)addResponsibilityEvent.getDocument();		
55  	    boolean rulePassed = true;
56  		if (!hasPermissionToGrantResponsibility(ResponsibilityBo.to(kimResponsibilityImpl), document)) {
57              GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_ASSIGN_RESPONSIBILITY, 
58              		new String[] {kimResponsibilityImpl.getNamespaceCode(), kimResponsibilityImpl.getTemplate().getName()});
59              return false;
60  		}
61  		
62  		if (newResponsibility == null || StringUtils.isBlank(newResponsibility.getResponsibilityId())) {
63              rulePassed = false;
64              GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Responsibility"});
65          } else {
66          	int i = 0;
67  		    for (KimDocumentRoleResponsibility responsibility: document.getResponsibilities()) {
68  		    	if (responsibility.getResponsibilityId().equals(newResponsibility.getResponsibilityId())) {
69  		            rulePassed = false;
70  		            GlobalVariables.getMessageMap().putError("document.responsibilities["+i+"].responsibilityId", RiceKeyConstants.ERROR_DUPLICATE_ENTRY, new String[] {"Responsibility"});
71  		    	}
72  		    	i++;
73  		    }
74          }
75  		return rulePassed;
76  	} 
77  
78  	public boolean hasPermissionToGrantResponsibility(Responsibility kimResponsibilityInfo, IdentityManagementRoleDocument document){
79  		Map<String,String> responsibilityDetails = new HashMap<String,String>();
80  		responsibilityDetails.put(KimConstants.AttributeConstants.NAMESPACE_CODE, kimResponsibilityInfo.getNamespaceCode());
81  		responsibilityDetails.put(KimConstants.AttributeConstants.RESPONSIBILITY_NAME, kimResponsibilityInfo.getName());
82  		if (!getDocumentHelperService().getDocumentAuthorizer(document).isAuthorizedByTemplate(
83  				document, 
84  				KimConstants.NAMESPACE_CODE, 
85  				KimConstants.PermissionTemplateNames.GRANT_RESPONSIBILITY, 
86  				GlobalVariables.getUserSession().getPerson().getPrincipalId(), 
87  				responsibilityDetails, null)) {
88              return false;
89  		}
90  		return true;
91  	}
92  }