001    /**
002     * Copyright 2005-2012 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 permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.rules.ui;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.kuali.rice.core.api.uif.RemotableAttributeError;
020    import org.kuali.rice.core.api.util.RiceKeyConstants;
021    import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMember;
022    import org.kuali.rice.kim.document.IdentityManagementRoleDocument;
023    import org.kuali.rice.kim.document.rule.AttributeValidationHelper;
024    import org.kuali.rice.kim.framework.services.KimFrameworkServiceLocator;
025    import org.kuali.rice.kim.framework.type.KimTypeService;
026    import org.kuali.rice.kim.rule.event.ui.AddDelegationMemberEvent;
027    import org.kuali.rice.kim.rule.ui.AddDelegationMemberRule;
028    import org.kuali.rice.krad.rules.DocumentRuleBase;
029    import org.kuali.rice.krad.util.GlobalVariables;
030    
031    import java.util.ArrayList;
032    import java.util.List;
033    import java.util.Map;
034    
035    /**
036     * This is a description of what this class does - shyu don't forget to fill this in. 
037     * 
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     *
040     */
041    public class RoleDocumentDelegationMemberRule extends DocumentRuleBase implements AddDelegationMemberRule {
042    
043            public static final String ERROR_PATH = "document.delegationMember.memberId";
044    
045            protected AttributeValidationHelper attributeValidationHelper = new AttributeValidationHelper();
046            
047            public boolean processAddDelegationMember(AddDelegationMemberEvent addDelegationMemberEvent){
048                    RoleDocumentDelegationMember newMember = addDelegationMemberEvent.getDelegationMember();
049                    IdentityManagementRoleDocument document = (IdentityManagementRoleDocument)addDelegationMemberEvent.getDocument();
050                boolean rulePassed = true;
051            if(newMember == null || StringUtils.isBlank(newMember.getMemberId())){
052                GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Delegation Member"});
053                return false;
054            }
055            if(StringUtils.isBlank(newMember.getRoleMemberId())){
056                GlobalVariables.getMessageMap().putError(ERROR_PATH, RiceKeyConstants.ERROR_EMPTY_ENTRY, new String[] {"Role Member"});
057                return false;
058            }
059                    List<Map<String, String>> mapListToValidate = new ArrayList<Map<String, String>>();
060                    Map<String, String> mapToValidate;
061                    List<RemotableAttributeError> validationErrors = new ArrayList<RemotableAttributeError>();
062            KimTypeService kimTypeService = KimFrameworkServiceLocator.getKimTypeService(document.getKimType());
063    
064                    for(RoleDocumentDelegationMember roleMember: document.getDelegationMembers()) {
065                            mapToValidate = attributeValidationHelper.convertQualifiersToMap(roleMember.getQualifiers());
066                            mapListToValidate.add(mapToValidate);
067            }
068    
069    
070                int i = 0;
071                for (RoleDocumentDelegationMember member: document.getDelegationMembers()){
072                    List<RemotableAttributeError> localErrors = kimTypeService.validateUniqueAttributes(
073                                            document.getKimType().getId(),
074                                            attributeValidationHelper.convertQualifiersToMap(newMember.getQualifiers()), 
075                                            attributeValidationHelper.convertQualifiersToMap(member.getQualifiers()));
076                    if (!localErrors.isEmpty() && (member.getMemberId().equals(newMember.getMemberId()) &&
077                                    member.getMemberTypeCode().equals(newMember.getMemberTypeCode()))){
078                        rulePassed = false;
079                        GlobalVariables.getMessageMap().putError("delegationMember.memberId", RiceKeyConstants.ERROR_DUPLICATE_ENTRY, new String[] {"Delegation Member"});
080                        break;
081                    }
082                    i++;
083                }
084            
085            if ( kimTypeService != null && !newMember.isRole()) {
086                    List<RemotableAttributeError> localErrors = kimTypeService.validateAttributes( document.getKimType().getId(), attributeValidationHelper.convertQualifiersToMap( newMember.getQualifiers() ) );
087                    validationErrors.addAll( attributeValidationHelper.convertErrors("delegationMember",
088                        attributeValidationHelper.convertQualifiersToAttrIdxMap(newMember.getQualifiers()), localErrors) );
089            }
090            if (!validationErrors.isEmpty()) {
091                    attributeValidationHelper.moveValidationErrorsToErrorMap(validationErrors);
092                    rulePassed = false;
093            }
094                    return rulePassed;
095            } 
096    
097    }