1   package com.atlassian.user.impl.osuser.properties;
2   
3   import com.atlassian.user.Entity;
4   import com.atlassian.user.properties.PropertySetFactory;
5   import com.opensymphony.module.propertyset.PropertySet;
6   import com.opensymphony.user.provider.ProfileProvider;
7   import org.apache.log4j.Logger;
8   
9   public class OSUPropertySetFactory implements PropertySetFactory
10  {
11      protected final Logger log = Logger.getLogger(this.getClass());
12  
13      private final ProfileProvider profileProvider;
14  
15      public OSUPropertySetFactory(ProfileProvider profileProvider)
16      {
17          this.profileProvider = profileProvider;
18      }
19  
20      /**
21       * returns a propertyset for the entity passed in as long as it is being managed by osuser.
22       * if the case of the entity's name is mixed, we will lower it, as all user accounts managed by osuser are lowercase.
23       * if we cannot find the user, then return null. (we do not need to create a osupropertyset for a user that is not being managed by OSUSER).
24       */
25      public PropertySet getPropertySet(Entity entity)
26      {
27          PropertySet ps = null;
28  
29          String entityName = entity.getName();
30          if (profileProvider.handles(entityName))
31          {
32              ps = profileProvider.getPropertySet(entityName);
33          }
34          else
35          {
36              // in Confluence and JIRA we lower case usernames
37              String lowercasedEntityName = entityName.toLowerCase();
38              log.info("No propertyset for user [" + entityName + "]. Trying lower case form - [" + lowercasedEntityName + "]");
39              if (profileProvider.handles(lowercasedEntityName)) // always call .handles() first to ensure this user account is being managed by OSUser
40                  ps = profileProvider.getPropertySet(lowercasedEntityName);
41          }
42  
43          return ps;
44      }
45  }