001 /*
002 * Copyright 2007-2009 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing responsibilitys and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kim.impl.responsibility;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.core.api.util.RiceKeyConstants;
020 import org.kuali.rice.kim.api.responsibility.Responsibility;
021 import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibility;
022 import org.kuali.rice.kim.document.IdentityManagementRoleDocument;
023 import org.kuali.rice.kim.util.KimConstants;
024 import org.kuali.rice.krad.rules.DocumentRuleBase;
025 import org.kuali.rice.krad.util.GlobalVariables;
026
027 import java.util.HashMap;
028 import java.util.Map;
029
030 /**
031 * This is a description of what this class does - shyu don't forget to fill this in.
032 *
033 * @author Kuali Rice Team (rice.collab@kuali.org)
034 *
035 */
036 public class KimDocumentResponsibilityRule extends DocumentRuleBase implements AddResponsibilityRule {
037
038 public static final String ERROR_PATH = "document.responsibility.responsibilityId";
039
040 public boolean processAddResponsibility(AddResponsibilityEvent addResponsibilityEvent) {
041 KimDocumentRoleResponsibility newResponsibility = addResponsibilityEvent.getResponsibility();
042 if(newResponsibility==null){
043 GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Responsibility"});
044 return false;
045 }
046
047 ResponsibilityBo kimResponsibilityImpl = newResponsibility.getKimResponsibility();
048 if(kimResponsibilityImpl==null){
049 GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Responsibility"});
050 return false;
051 }
052
053 IdentityManagementRoleDocument document = (IdentityManagementRoleDocument)addResponsibilityEvent.getDocument();
054 boolean rulePassed = true;
055 if (!hasPermissionToGrantResponsibility(ResponsibilityBo.to(kimResponsibilityImpl), document)) {
056 GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_ASSIGN_RESPONSIBILITY,
057 new String[] {kimResponsibilityImpl.getNamespaceCode(), kimResponsibilityImpl.getTemplate().getName()});
058 return false;
059 }
060
061 if (newResponsibility == null || StringUtils.isBlank(newResponsibility.getResponsibilityId())) {
062 rulePassed = false;
063 GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Responsibility"});
064 } else {
065 int i = 0;
066 for (KimDocumentRoleResponsibility responsibility: document.getResponsibilities()) {
067 if (responsibility.getResponsibilityId().equals(newResponsibility.getResponsibilityId())) {
068 rulePassed = false;
069 GlobalVariables.getMessageMap().putError("document.responsibilities["+i+"].responsibilityId", RiceKeyConstants.ERROR_DUPLICATE_ENTRY, new String[] {"Responsibility"});
070 }
071 i++;
072 }
073 }
074 return rulePassed;
075 }
076
077 public boolean hasPermissionToGrantResponsibility(Responsibility kimResponsibilityInfo, IdentityManagementRoleDocument document){
078 Map<String,String> responsibilityDetails = new HashMap<String,String>();
079 responsibilityDetails.put(KimConstants.AttributeConstants.NAMESPACE_CODE, kimResponsibilityInfo.getNamespaceCode());
080 responsibilityDetails.put(KimConstants.AttributeConstants.RESPONSIBILITY_NAME, kimResponsibilityInfo.getName());
081 if (!getDocumentHelperService().getDocumentAuthorizer(document).isAuthorizedByTemplate(
082 document,
083 KimConstants.NAMESPACE_CODE,
084 KimConstants.PermissionTemplateNames.GRANT_RESPONSIBILITY,
085 GlobalVariables.getUserSession().getPerson().getPrincipalId(),
086 responsibilityDetails, null)) {
087 return false;
088 }
089 return true;
090 }
091 }