/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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.apereo.portal.groups.smartldap; import java.util.Enumeration; import java.util.LinkedList; import java.util.List; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apereo.portal.groups.EntityTestingGroupImpl; import org.apereo.portal.groups.IEntityGroup; import org.apereo.portal.security.IPerson; import org.springframework.ldap.core.AttributesMapper; public final class SimpleAttributesMapper implements AttributesMapper { private static final String GROUP_DESCRIPTION = "This group was pulled from the directory server."; /** Name of the LDAP attribute on a group that tells you its key (normally 'dn'). */ private String keyAttributeName = null; /** Name of the LDAP attribute on a group that tells you the name of the group. */ private String groupNameAttributeName = null; /** Name of the LDAP attribute on a group that tells you who its children are. */ private String membershipAttributeName = null; private final Log log = LogFactory.getLog(getClass()); /* * Public API. */ public Object mapFromAttributes(Attributes attr) { // Assertions. if (keyAttributeName == null) { String msg = "The property 'keyAttributeName' must be set."; throw new IllegalStateException(msg); } if (groupNameAttributeName == null) { String msg = "The property 'groupNameAttributeName' must be set."; throw new IllegalStateException(msg); } if (membershipAttributeName == null) { String msg = "The property 'membershipAttributeName' must be set."; throw new IllegalStateException(msg); } if (log.isDebugEnabled()) { String msg = "SimpleAttributesMapper.mapFromAttributes() :: settings: keyAttributeName='" + keyAttributeName + "', groupNameAttributeName='" + groupNameAttributeName + "', groupNameAttributeName='" + groupNameAttributeName + "'"; log.debug(msg); } LdapRecord rslt; try { String key = (String) attr.get(keyAttributeName).get(); String groupName = (String) attr.get(groupNameAttributeName).get(); IEntityGroup g = new EntityTestingGroupImpl(key, IPerson.class); g.setCreatorID("System"); g.setName(groupName); g.setDescription(GROUP_DESCRIPTION); List<String> membership = new LinkedList<String>(); Attribute m = attr.get(membershipAttributeName); if (m != null) { for (Enumeration<?> en = m.getAll(); en.hasMoreElements(); ) { membership.add((String) en.nextElement()); } } rslt = new LdapRecord(g, membership); if (log.isDebugEnabled()) { StringBuilder msg = new StringBuilder(); msg.append("Record Details:") .append("\n\tkey=") .append(key) .append("\n\tgroupName=") .append(groupName) .append("\n\tmembers:"); for (String s : membership) { msg.append("\n\t\t").append(s); } log.debug(msg.toString()); } } catch (Throwable t) { log.error("Error in SimpleAttributesMapper", t); String msg = "SimpleAttributesMapper failed to create a LdapRecord " + "from the specified Attributes: " + attr; throw new RuntimeException(msg, t); } return rslt; } public void setKeyAttributeName(String keyAttributeName) { this.keyAttributeName = keyAttributeName; } public void setGroupNameAttributeName(String groupNameAttributeName) { this.groupNameAttributeName = groupNameAttributeName; } public void setMembershipAttributeName(String membershipAttributeName) { this.membershipAttributeName = membershipAttributeName; } }