AccountCache.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import java.sql.Connection;
  2. import java.util.HashMap;
  3. import java.util.Locale;
  4. import java.util.Map;
  5. import com.cognos.CAM_AAA.authentication.UnrecoverableException;
  6. public class AccountCache
  7. {
  8. private final Map< String, Account > accounts = new HashMap< String, Account >();
  9. private final Connection connection;
  10. public static final String TENANTID_ACCOUNT_PROPERTY = "tenant";
  11. public AccountCache(final ConnectionManager connectionManager)
  12. {
  13. this.connection = connectionManager.getConnection();
  14. }
  15. private Account createAccount(final String userID) throws UnrecoverableException
  16. {
  17. final Account account = new Account(userID);
  18. this.setAccountProperties(account);
  19. this.accounts.put(userID, account);
  20. return account;
  21. }
  22. public synchronized Account findAccount(final String userID) throws UnrecoverableException
  23. {
  24. Account account = this.accounts.get(userID);
  25. if (null == account)
  26. account = this.createAccount(userID);
  27. return account;
  28. }
  29. private void setAccountProperties(final Account account) throws UnrecoverableException
  30. {
  31. final String userIDStr = account.getObjectID();
  32. final Integer userID = Integer.parseInt(userIDStr.substring(2));
  33. final Object[][] data =
  34. QueryUtil.query(this.connection, "SELECT USERNAME, FULLNAME, LOCALE, TENANT FROM USERS WHERE USERID = ?", userID);
  35. if (1 > data.length)
  36. return;
  37. final Object[] row = data[0];
  38. account.setUserName((String) row[0]);
  39. final Locale locale = QueryUtil.getLocale((String) row[2]);
  40. account.setContentLocale(locale);
  41. account.setProductLocale(locale);
  42. account.addName(locale, (String) row[1]);
  43. setTenantId(account, row[3].toString());
  44. }
  45. /**
  46. * To configure Multi-tenancy, the following advanced properties must be added via the Configuration Tool
  47. *
  48. * Name Value
  49. * ============================== ======
  50. * multitenancy.TenantPattern ~/parameters/tenant
  51. *
  52. * Refer to Tenant Patterns within Multi-Tenancy product documentation for details
  53. */
  54. private void setTenantId(Account account, String tenantId) {
  55. account.addCustomProperty(TENANTID_ACCOUNT_PROPERTY, tenantId);
  56. }
  57. }