/* * Copyright (c) 2009-2010 Lockheed Martin Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.eurekastreams.server.persistence.mappers.ldap.callback; import java.util.HashMap; import java.util.List; import javax.naming.NamingException; import javax.naming.directory.Attributes; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eurekastreams.server.domain.Organization; import org.eurekastreams.server.domain.Person; import org.springframework.ldap.core.AttributesMapper; /** * Translates a LDAP record to a Person object. */ public class LdapToPersonMapper implements AttributesMapper { /** * Logger. */ private Log log = LogFactory.getLog(LdapToPersonMapper.class); /** * User account attribute name. */ private String accountAttrib; /** * User first name attribute name. */ private String firstNameAttrib; /** * User last name attribute name. */ private String lastNameAttrib; /** * User middle name attribute name. */ private String middleNameAttrib; /** * User org attribute name. */ private String orgAttrib; /** * User title attribute name. */ private String titleAttrib; /** * User full name attribute name. */ private String fullNameAttrib; /** * User email attribute name. */ private String emailAttrib; /** * Company attribute. */ private String companyAttrib; /** * Additional properties to load. */ private List<String> additionalProperties; /** * Support email address - used when no email address was found for a user. */ private String supportEmail; /** * Maps the LDAP attributes to a Person. * * @param attrs * the attributes. * @throws NamingException * on issue. * @return a person object. */ public Object mapFromAttributes(final Attributes attrs) throws NamingException { Person person = null; try { log.debug("Found person: " + attrs.get(fullNameAttrib).get().toString()); String accountId = attrs.get(accountAttrib).get().toString(); String firstName = attrs.get(firstNameAttrib).get().toString(); String lastName = attrs.get(lastNameAttrib).get().toString(); String email = (null != attrs.get(emailAttrib)) ? attrs.get(emailAttrib).get().toString() : supportEmail; String middleName = (null != attrs.get(middleNameAttrib)) ? attrs.get(middleNameAttrib).get().toString() : ""; String orgName = (null != attrs.get(orgAttrib)) ? attrs.get(orgAttrib).get().toString() : ""; Organization orgObject = new Organization(orgName, orgName); String companyName = (null != attrs.get(companyAttrib)) ? attrs.get(companyAttrib).get().toString() : ""; String title = (null != attrs.get(titleAttrib)) ? attrs.get(titleAttrib).get().toString() : ""; String[] splitCn = attrs.get(fullNameAttrib).get().toString().split(", "); String preferredName = (splitCn.length > 1) ? splitCn[1] : firstName; person = new Person(accountId, firstName, middleName, lastName, preferredName); log.debug("Company Name:" + companyName); person.setCompanyName(companyName); person.setTitle(title); person.setParentOrganization(orgObject); person.setEmail(email); if (additionalProperties != null) { HashMap<String, String> propertiesMap = new HashMap<String, String>(); for (String property : additionalProperties) { // Some additional configurated properties may not be available for all users. Do not // halt on those properties, just move on. try { propertiesMap.put(property, attrs.get(property).get().toString()); } catch (Exception ex) { if (log.isInfoEnabled()) { log.info("Additional Property: " + property + " not found for user " + accountId); } } } person.setAdditionalProperties(propertiesMap); } } catch (Exception e) { log.error("Error instantiating person object.", e); } return person; } /** * @param inAccountAttrib * the accountAttrib to set. */ public void setAccountAttrib(final String inAccountAttrib) { this.accountAttrib = inAccountAttrib; } /** * @param inFirstNameAttrib * the firstNameAttrib to set. */ public void setFirstNameAttrib(final String inFirstNameAttrib) { this.firstNameAttrib = inFirstNameAttrib; } /** * @param inLastNameAttrib * the lastNameAttrib to set. */ public void setLastNameAttrib(final String inLastNameAttrib) { this.lastNameAttrib = inLastNameAttrib; } /** * @param inMiddleNameAttrib * the middleNameAttrib to set. */ public void setMiddleNameAttrib(final String inMiddleNameAttrib) { this.middleNameAttrib = inMiddleNameAttrib; } /** * @param inOrgAttrib * the orgAttrib to set. */ public void setOrgAttrib(final String inOrgAttrib) { this.orgAttrib = inOrgAttrib; } /** * @param inTitleAttrib * the titleAttrib to set. */ public void setTitleAttrib(final String inTitleAttrib) { this.titleAttrib = inTitleAttrib; } /** * @param inFullNameAttrib * the fullNameAttrib to set. */ public void setFullNameAttrib(final String inFullNameAttrib) { this.fullNameAttrib = inFullNameAttrib; } /** * @param inEmailAttrib * the emailAttrib to set. */ public void setEmailAttrib(final String inEmailAttrib) { this.emailAttrib = inEmailAttrib; } /** * @param inSupportEmail * the supportEmail to set. */ public void setSupportEmail(final String inSupportEmail) { this.supportEmail = inSupportEmail; } /** * @param inAdditionalProperties * the additionalProperties to set. */ public void setAdditionalProperties(final List<String> inAdditionalProperties) { this.additionalProperties = inAdditionalProperties; } /** * @param inCompanyAttrib * the companyAttrib to set */ public void setCompanyAttrib(final String inCompanyAttrib) { companyAttrib = inCompanyAttrib; } }