001 /**
002 * Copyright 2005-2014 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.web.struts.action;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.apache.log4j.Logger;
020 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
021 import org.kuali.rice.core.api.util.RiceKeyConstants;
022 import org.kuali.rice.kim.api.identity.principal.Principal;
023 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
024 import org.kuali.rice.kim.api.type.KimAttributeField;
025 import org.kuali.rice.kim.api.type.KimType;
026 import org.kuali.rice.kim.bo.ui.KimDocumentRoleMember;
027 import org.kuali.rice.kim.bo.ui.KimDocumentRoleQualifier;
028 import org.kuali.rice.kim.bo.ui.PersonDocumentRole;
029 import org.kuali.rice.kim.document.IdentityManagementPersonDocument;
030 import org.kuali.rice.kim.framework.type.KimTypeService;
031 import org.kuali.rice.kim.impl.KIMPropertyConstants;
032 import org.kuali.rice.kim.impl.type.KimTypeBo;
033 import org.kuali.rice.kim.service.KIMServiceLocatorInternal;
034 import org.kuali.rice.kim.web.struts.form.IdentityManagementDocumentFormBase;
035 import org.kuali.rice.kim.web.struts.form.IdentityManagementPersonDocumentForm;
036 import org.kuali.rice.krad.util.GlobalVariables;
037 import org.kuali.rice.krad.util.KRADConstants;
038
039 import javax.servlet.http.HttpServletRequest;
040 import javax.xml.namespace.QName;
041
042 /**
043 * This is a description of what this class does - jonathan don't forget to fill this in.
044 *
045 * @author Kuali Rice Team (rice.collab@kuali.org)
046 *
047 */
048 public class IdentityManagementPersonInquiry extends IdentityManagementBaseInquiryAction {
049 private static final Logger LOG = Logger.getLogger(IdentityManagementPersonInquiry.class);
050 /**
051 * This overridden method ...
052 *
053 * @see org.kuali.rice.kim.web.struts.action.IdentityManagementBaseInquiryAction#loadKimObject(javax.servlet.http.HttpServletRequest, org.kuali.rice.kim.web.struts.form.IdentityManagementDocumentFormBase)
054 */
055 @Override
056 protected void loadKimObject(HttpServletRequest request,
057 IdentityManagementDocumentFormBase form) {
058 IdentityManagementPersonDocumentForm personDocumentForm = (IdentityManagementPersonDocumentForm) form;
059 String principalId = request.getParameter(KIMPropertyConstants.Person.PRINCIPAL_ID);
060 String principalName = request.getParameter(KIMPropertyConstants.Person.PRINCIPAL_NAME);
061 if ( StringUtils.isBlank(principalId) && StringUtils.isNotBlank(principalName) ) {
062 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(principalName);
063 if ( principal != null ) {
064 principalId = principal.getPrincipalId();
065 }
066 }
067 if ( principalId != null ) {
068 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipal(principalId);
069 if (principal != null) {
070 personDocumentForm.setPrincipalId(principalId);
071 getUiDocumentService().loadEntityToPersonDoc(personDocumentForm.getPersonDocument(), personDocumentForm.getPrincipalId() );
072 personDocumentForm.setCanOverrideEntityPrivacyPreferences(getUiDocumentService().canOverrideEntityPrivacyPreferences(GlobalVariables.getUserSession().getPrincipalId(), personDocumentForm.getPrincipalId()));
073 populateRoleInformation( personDocumentForm.getPersonDocument() );
074 } else {
075 LOG.error("No records found for Person Inquiry.");
076 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, RiceKeyConstants.ERROR_INQUIRY);
077 }
078 }
079 }
080
081 protected void populateRoleInformation( IdentityManagementPersonDocument personDoc ) {
082 for (PersonDocumentRole role : personDoc.getRoles()) {
083 KimTypeService kimTypeService = (KimTypeService) GlobalResourceLoader.getService(QName.valueOf(
084 getKimTypeServiceName(KimTypeBo.to(role.getKimRoleType()))));
085 //it is possible that the the kimTypeService is coming from a remote application
086 // and therefore it can't be guarenteed that it is up and working, so using a try/catch to catch this possibility.
087 try {
088 role.setDefinitions(kimTypeService.getAttributeDefinitions(role.getKimTypeId()));
089 } catch (Exception ex) {
090 LOG.warn("Not able to retrieve KimTypeService from remote system for KIM Type Id: " + role.getKimTypeId(), ex);
091 }
092 // when post again, it will need this during populate
093 role.setNewRolePrncpl(new KimDocumentRoleMember());
094 for (KimAttributeField key : role.getDefinitions()) {
095 KimDocumentRoleQualifier qualifier = new KimDocumentRoleQualifier();
096 //qualifier.setQualifierKey(key);
097 setAttrDefnIdForQualifier(qualifier, key);
098 role.getNewRolePrncpl().getQualifiers().add(qualifier);
099 }
100 role.setAttributeEntry( getUiDocumentService().getAttributeEntries( role.getDefinitions() ) );
101 }
102 }
103
104 private void setAttrDefnIdForQualifier(KimDocumentRoleQualifier qualifier,KimAttributeField definition) {
105 qualifier.setKimAttrDefnId(definition.getId());
106 qualifier.refreshReferenceObject("kimAttribute");
107 }
108 private String getKimTypeServiceName (KimType kimType) {
109 String serviceName = kimType.getServiceName();
110 if (StringUtils.isBlank(serviceName)) {
111 serviceName = "kimTypeService";
112 }
113 return serviceName;
114
115 }
116
117 }