Search in sources :

Example 31 with AccountTransfer

use of org.jbei.ice.lib.account.AccountTransfer in project ice by JBEI.

the class Groups method setGroupMembers.

protected void setGroupMembers(Group group, List<AccountTransfer> members, List<RemoteUser> remoteUsers) {
    // 
    // deal with local members
    // 
    Set<String> memberHash = new HashSet<>();
    for (Account member : group.getMembers()) {
        memberHash.add(member.getEmail());
    }
    for (AccountTransfer accountTransfer : members) {
        String email = accountTransfer.getEmail();
        // do not add if found in set
        if (memberHash.remove(email))
            continue;
        // not found so add
        Account memberToAdd = accountDAO.getByEmail(email);
        if (memberToAdd == null) {
            Logger.error("Could not find account " + email + " to add to group");
            continue;
        }
        group.getMembers().add(memberToAdd);
        memberToAdd.getGroups().add(group);
        accountDAO.update(memberToAdd);
    }
    // all emails remaining should be removed
    for (String memberEmail : memberHash) {
        Account memberAccount = accountDAO.getByEmail(memberEmail);
        if (memberAccount == null)
            continue;
        memberAccount.getGroups().remove(group);
        group.getMembers().remove(memberAccount);
        accountDAO.update(memberAccount);
    }
    // 
    // deal with remote users
    // 
    Map<String, RemoteClientModel> remoteMembers = new HashMap<>();
    // get remote members
    List<RemoteClientModel> clients = remoteClientModelDAO.getClientsForGroup(group);
    for (RemoteClientModel clientModel : clients) {
        // technically the same email can be at different instances so adding partner id
        String identifier = (clientModel.getEmail() + clientModel.getRemotePartner().getUrl()).toLowerCase();
        remoteMembers.put(identifier, clientModel);
    }
    for (RemoteUser remoteUser : remoteUsers) {
        String identifier = (remoteUser.getUser().getEmail() + remoteUser.getPartner().getUrl()).toLowerCase();
        // do not add if found in set (already exists)
        if (remoteMembers.remove(identifier) != null)
            continue;
        // add   // todo : duplicates line 147. move to separate method
        RemotePartner remotePartner = remotePartnerDAO.getByUrl(remoteUser.getPartner().getUrl());
        if (remotePartner == null)
            continue;
        AccountTransfer accountTransfer = remoteUser.getUser();
        if (accountTransfer == null || StringUtils.isEmpty(accountTransfer.getEmail()))
            continue;
        String email = accountTransfer.getEmail();
        RemoteClientModel remoteClientModel = remoteClientModelDAO.getModel(email, remotePartner);
        if (remoteClientModel == null) {
            remoteClientModel = new RemoteClientModel();
            remoteClientModel.setEmail(email);
            remoteClientModel.setRemotePartner(remotePartner);
            remoteClientModel = remoteClientModelDAO.create(remoteClientModel);
        }
        remoteClientModel.getGroups().add(group);
        remoteClientModelDAO.update(remoteClientModel);
    }
    // remove all remaining
    if (remoteMembers.isEmpty())
        return;
    for (String identifier : remoteMembers.keySet()) {
        RemoteClientModel remoteClientModel = remoteMembers.get(identifier);
        remoteClientModel.getGroups().remove(group);
        remoteClientModelDAO.update(remoteClientModel);
    }
}
Also used : Account(org.jbei.ice.storage.model.Account) RemoteUser(org.jbei.ice.lib.dto.web.RemoteUser) RemotePartner(org.jbei.ice.storage.model.RemotePartner) RemoteClientModel(org.jbei.ice.storage.model.RemoteClientModel) AccountTransfer(org.jbei.ice.lib.account.AccountTransfer)

Aggregations

AccountTransfer (org.jbei.ice.lib.account.AccountTransfer)31 Account (org.jbei.ice.storage.model.Account)10 UserGroup (org.jbei.ice.lib.dto.group.UserGroup)6 RemotePartner (org.jbei.ice.storage.model.RemotePartner)6 RemoteUser (org.jbei.ice.lib.dto.web.RemoteUser)5 AccessPermission (org.jbei.ice.lib.dto.access.AccessPermission)4 FolderDetails (org.jbei.ice.lib.dto.folder.FolderDetails)4 Group (org.jbei.ice.storage.model.Group)4 PermissionException (org.jbei.ice.lib.access.PermissionException)3 Results (org.jbei.ice.lib.dto.common.Results)3 RegistryPartner (org.jbei.ice.lib.dto.web.RegistryPartner)3 Folder (org.jbei.ice.storage.model.Folder)3 Test (org.junit.Test)3 TraceSequenceAnalysis (org.jbei.ice.lib.dto.entry.TraceSequenceAnalysis)2 Message (org.jbei.ice.storage.model.Message)2 RemoteClientModel (org.jbei.ice.storage.model.RemoteClientModel)2 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 RemoteAccess (org.jbei.ice.lib.access.RemoteAccess)1 AccountController (org.jbei.ice.lib.account.AccountController)1