001: /* Copyright 2002, 2005 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal.groups;
007:
008: import java.util.HashMap;
009: import java.util.List;
010: import java.util.Map;
011:
012: import org.jasig.portal.services.persondir.IPersonAttributeDao;
013: import org.jasig.portal.utils.SoftHashMap;
014:
015: /**
016: * Implementation of <code>IEntityNameFinder</code> for <code>IPersons</code> by
017: * looking up displayName from an <code>IPersonAttributeDao</code>.
018: * @author Alex Vigdor
019: * @version $Revision: 36086 $
020: */
021: public class PersonDirNameFinder implements IEntityNameFinder {
022:
023: /**
024: * Data Access Object backing this name finder.
025: */
026: private IPersonAttributeDao paDao;
027:
028: /** Our cache of entity names: */
029: private Map names = new SoftHashMap();
030:
031: /**
032: * Instantiate a PersonDirNameFinder backed by the given
033: * IPersonAttributeDao.
034: * @param pa DAO to back this PersonDirNameFinder
035: */
036: PersonDirNameFinder(IPersonAttributeDao pa) {
037: this .paDao = pa;
038: }
039:
040: public String getName(String key) {
041: String name = (String) this .names.get(key);
042:
043: if (name == null && key != null) {
044: // cached name not found, get name from underlying DAO.
045: name = primGetName(key);
046: // cache the name
047: this .names.put(key, name);
048: }
049: return name;
050: }
051:
052: public java.util.Map getNames(java.lang.String[] keys) {
053: Map selectedNames = new HashMap();
054: for (int i = 0; i < keys.length; i++) {
055: String name = getName(keys[i]);
056: selectedNames.put(keys[i], name);
057: }
058: return selectedNames;
059: }
060:
061: public Class getType() {
062: return org.jasig.portal.security.IPerson.class;
063: }
064:
065: /**
066: * Actually lookup a user name using the underlying IPersonAttributeDao.
067: * @param key - entity key which in this case is a unique identifier for a user
068: * @return the display name for the identified user
069: */
070: private String primGetName(String key) {
071: String name = key;
072: Map userInfo = this .paDao.getUserAttributes(name);
073: if (userInfo != null) {
074: Object displayName = userInfo.get("displayName");
075: String displayNameStr = "";
076: if (displayName != null) {
077: if (displayName instanceof java.util.List) {
078: List displayNameList = (List) displayName;
079: if (!displayNameList.isEmpty()) {
080: displayNameStr = (String) displayNameList
081: .get(0);
082: }
083: } else
084: displayNameStr = (String) displayName;
085:
086: if (!displayNameStr.trim().equals("")) {
087: name = displayNameStr;
088: }
089: }
090: }
091: return name;
092: }
093:
094: /**
095: * Get a static singleton instance of this class backed by PersonDirectory.
096: * @return singleton PersonDirNameFinder backed by PersonDirectory
097: * @deprecated as of uP 2.5 instead use PersonDirNameFinderFactory
098: */
099: public static IEntityNameFinder singleton() {
100: return new PersonDirNameFinderFactory().newFinder();
101: }
102:
103: /**
104: * Returns a String that represents the value of this object.
105: * @return a string representation of the receiver
106: */
107: public String toString() {
108: return "PersonDirNameFinder backed by " + this.paDao;
109: }
110: }
|