/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.master.user.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.opengamma.core.change.BasicChangeManager; import com.opengamma.core.change.ChangeManager; import com.opengamma.core.user.UserAccount; import com.opengamma.core.user.impl.SimpleUserAccount; import com.opengamma.id.ObjectId; import com.opengamma.id.ObjectIdSupplier; import com.opengamma.id.UniqueId; import com.opengamma.master.user.HistoryEvent; import com.opengamma.master.user.ManageableUser; import com.opengamma.master.user.RoleMaster; import com.opengamma.master.user.UserEventHistoryRequest; import com.opengamma.master.user.UserEventHistoryResult; import com.opengamma.master.user.UserMaster; import com.opengamma.master.user.UserSearchRequest; import com.opengamma.master.user.UserSearchResult; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.paging.Paging; /** * A simple, in-memory implementation of {@code UserMaster}. * <p> * This master does not support versioning of users. */ public class InMemoryUserMaster extends AbstractInMemoryMaster<ManageableUser> implements UserMaster { /** * The default scheme used for each {@link ObjectId}. */ public static final String DEFAULT_OID_SCHEME = "MemUsr"; /** * The scheme used for removed users. */ public static final ManageableUser REMOVED = new ManageableUser("%REMOVED%"); /** * The role master. */ private final RoleMaster _roleMaster; /** * Creates an instance. */ public InMemoryUserMaster() { this(new ObjectIdSupplier(DEFAULT_OID_SCHEME)); } /** * Creates an instance specifying the supplier of object identifiers. * * @param objectIdSupplier the supplier of object identifiers, not null */ public InMemoryUserMaster(final ObjectIdSupplier objectIdSupplier) { this(objectIdSupplier, new BasicChangeManager()); } /** * Creates an instance specifying the supplier of object identifiers and change manager. * * @param objectIdSupplier the supplier of object identifiers, not null * @param changeManager the change manager, not null */ public InMemoryUserMaster(final ObjectIdSupplier objectIdSupplier, final ChangeManager changeManager) { super("User", REMOVED, objectIdSupplier, changeManager); _roleMaster = new InMemoryRoleMaster(new ObjectIdSupplier(objectIdSupplier.getScheme() + "Role")); } //------------------------------------------------------------------------- @Override String extractName(ManageableUser user) { return user.getUserName(); } //------------------------------------------------------------------------- @Override public boolean nameExists(String userName) { ArgumentChecker.notNull(userName, "userName"); return super.nameExists(userName); } @Override public ManageableUser getByName(String userName) { ArgumentChecker.notNull(userName, "userName"); return super.getByName(userName); } @Override public ManageableUser getById(ObjectId objectId) { ArgumentChecker.notNull(objectId, "objectId"); return super.getById(objectId); } //------------------------------------------------------------------------- @Override public UniqueId add(ManageableUser user) { ArgumentChecker.notNull(user, "user"); return super.add(user); } @Override public UniqueId update(ManageableUser user) { ArgumentChecker.notNull(user, "user"); return super.update(user); } @Override public UniqueId save(ManageableUser user) { ArgumentChecker.notNull(user, "user"); return super.save(user); } //------------------------------------------------------------------------- @Override public void removeByName(String userName) { ArgumentChecker.notNull(userName, "userName"); super.removeByName(userName); } @Override public void removeById(ObjectId objectId) { ArgumentChecker.notNull(objectId, "objectId"); super.removeById(objectId); } //------------------------------------------------------------------------- @Override public UserSearchResult search(UserSearchRequest request) { ArgumentChecker.notNull(request, "request"); List<ManageableUser> list = new ArrayList<>(); for (ManageableUser user : getStoredValues()) { if (request.matches(user)) { list.add(user); } } Collections.sort(list, request.getSortOrder()); Paging paging = Paging.of(request.getPagingRequest(), list); return new UserSearchResult(paging, request.getPagingRequest().select(list)); } @Override public UserEventHistoryResult eventHistory(UserEventHistoryRequest request) { ArgumentChecker.notNull(request, "request"); List<HistoryEvent> history = super.eventHistory(request.getObjectId(), request.getUserName()); return new UserEventHistoryResult(history); } //------------------------------------------------------------------------- @Override public UserAccount getAccount(String userName) { ArgumentChecker.notNull(userName, "userName"); ManageableUser user = getByName0(userName); SimpleUserAccount account = new SimpleUserAccount(user.getUserName()); account.setPasswordHash(user.getPasswordHash()); account.setAlternateIds(user.getAlternateIds()); account.setEmailAddress(user.getEmailAddress()); account.setProfile(user.getProfile()); return roleMaster().resolveAccount(account); } @Override public RoleMaster roleMaster() { return _roleMaster; } //------------------------------------------------------------------------- @Override public final ChangeManager changeManager() { return getChangeManager(); } //------------------------------------------------------------------------- @Override public String toString() { return String.format("%s[size=%d]", getClass().getSimpleName(), getStoredValues().size()); } }