All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.centurylink.mdw.services.user.UserServicesImpl Maven / Gradle / Ivy

/*
 * Copyright (C) 2017 CenturyLink, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.centurylink.mdw.services.user;

import com.centurylink.mdw.cache.CachingException;
import com.centurylink.mdw.common.service.ServiceException;
import com.centurylink.mdw.dataaccess.DataAccessException;
import com.centurylink.mdw.dataaccess.DatabaseAccess;
import com.centurylink.mdw.model.user.*;
import com.centurylink.mdw.service.data.user.UserGroupCache;
import com.centurylink.mdw.service.data.user.UserDataAccess;
import com.centurylink.mdw.services.UserServices;
import com.centurylink.mdw.util.log.LoggerUtil;
import com.centurylink.mdw.util.log.StandardLogger;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class UserServicesImpl implements UserServices {

    private static StandardLogger logger = LoggerUtil.getStandardLogger();

    private UserDataAccess getUserDAO() {
        return new UserDataAccess();
    }

    public WorkgroupList getWorkgroups() throws DataAccessException {
        List groups = UserGroupCache.getWorkgroups();
        WorkgroupList groupList = new WorkgroupList(groups);
        groupList.setRetrieveDate(DatabaseAccess.getDbDate());
        return groupList;
    }

    public RoleList getRoles() throws DataAccessException {
        List roles = UserGroupCache.getRoles();
        RoleList roleList = new RoleList(roles);
        roleList.setRetrieveDate(DatabaseAccess.getDbDate());
        return roleList;
    }

    public UserList getUsers() throws DataAccessException {
        List users = UserGroupCache.getUsers();
        UserList userList = new UserList(users);
        userList.setRetrieveDate(DatabaseAccess.getDbDate());
        return userList;
    }

    public UserList getUsers(int start, int pageSize) throws DataAccessException {
        List users = UserGroupCache.getUsers(start, pageSize);
        UserList userList = new UserList(users);
        userList.setRetrieveDate(DatabaseAccess.getDbDate());
        userList.setTotal(UserGroupCache.getTotalUsers());
        return userList;
    }

    public UserList findUsers(String prefix) throws DataAccessException {
        List users = UserGroupCache.findUsers(prefix);
        return new UserList(users);
    }

    public UserList findWorkgroupUsers(String[] workgroups, String prefix) throws DataAccessException {
        try {
            List users = UserGroupCache.findUsers(workgroups, prefix);
            return new UserList(users);
        }
        catch (CachingException ex) {
            throw new DataAccessException(ex.getMessage(), ex);
        }
    }

    /**
     * Does not include non-public attributes.
     * Includes empty values for all public attributes.
     */
    public User getUser(String cuid) {
        User user = UserGroupCache.getUser(cuid);
        if (user == null)
            return null;
        // add empty attributes
        if (user.getAttributes() == null)
            user.setAttributes(new HashMap());
        for (String name : UserGroupCache.getUserAttributeNames()) {
            if (!user.getAttributes().containsKey(name))
                user.setAttribute(name, null);
            // substitute friendly attribute names
            if (user.getAttributes().containsKey(User.OLD_EMAIL)) {
                String oldEmail = user.getAttributes().remove(User.OLD_EMAIL);
                if (user.getAttribute(User.EMAIL) == null)
                    user.setAttribute(User.EMAIL, oldEmail);
            }
            if (user.getAttributes().containsKey(User.OLD_PHONE)) {
                String oldPhone = user.getAttributes().remove(User.OLD_PHONE);
                if (user.getAttribute(User.PHONE) == null)
                    user.setAttribute(User.PHONE, oldPhone);
            }
        }
        return user;
    }

    public Workgroup getWorkgroup(String groupName) {
        Workgroup workgroup = UserGroupCache.getWorkgroup(groupName);
        if (workgroup != null) {
            // add empty attributes
            if (workgroup.getAttributes() == null)
                workgroup.setAttributes(new HashMap());
            for (String name : UserGroupCache.getWorkgroupAttributeNames()) {
                if (!workgroup.getAttributes().containsKey(name))
                    workgroup.setAttribute(name, null);
            }
        }

        return workgroup;
    }

    public Role getRole(String roleName) {
        return UserGroupCache.getRole(roleName);
    }

    public void auditLog(UserAction userAction) throws DataAccessException {
        getUserDAO().auditLogUserAction(userAction);
    }

    public void createWorkgroup(Workgroup workgroup) throws DataAccessException {
        workgroup.setId(getUserDAO().saveGroup(workgroup));
        getUserDAO().updateGroupAttributes(workgroup.getId(), workgroup.getAttributes());
        UserGroupCache.set(workgroup);
    }

    public void updateWorkgroup(Workgroup workgroup) throws DataAccessException {
        getUserDAO().saveGroup(workgroup);
        getUserDAO().updateGroupAttributes(workgroup.getId(), workgroup.getAttributes());
        UserGroupCache.set(workgroup);
    }

    public void deleteWorkgroup(String name) throws DataAccessException {
        UserDataAccess dao = getUserDAO();
        Workgroup group = dao.getGroup(name);
        if (group == null)
            throw new DataAccessException("Workgroup: " + name + " does not exist");
        dao.deleteGroup(group.getId());
        UserGroupCache.remove(group);
    }

    public void createUser(User user) throws DataAccessException, ServiceException {
        if (user.getCuid() == null || user.getCuid().isEmpty())
            throw new ServiceException(ServiceException.BAD_REQUEST, "Missing: cuid");
        
        User existing = getUsers().get(user.getCuid());
        if (existing != null)
            throw new ServiceException(ServiceException.CONFLICT, "User ID already exists: " + user.getCuid());
        user.setId(getUserDAO().saveUser(user));
        getUserDAO().updateUserAttributes(user.getId(), user.getAttributes());
        UserGroupCache.set(user);
    }

    public void updateUser(User user) throws DataAccessException {
        user.setId(getUserDAO().saveUser(user));
        getUserDAO().updateUserAttributes(user.getId(), user.getAttributes());
        UserGroupCache.set(user);
    }

    public void deleteUser(String cuid) throws DataAccessException {
        UserDataAccess dao = getUserDAO();
        User user = dao.getUser(cuid);
        if (user == null)
            throw new DataAccessException("User: " + cuid + " does not exist");
        dao.deleteUser(user.getId());
        UserGroupCache.remove(user);
    }

    public void addUserToWorkgroup(String cuid, String group) throws DataAccessException {
        try {
            getUserDAO().addUserToGroup(cuid, group);
            UserGroupCache.clear();
        }
        catch (Exception ex) {
            throw new DataAccessException(ex.getMessage(), ex);
        }
    }

    public void removeUserFromWorkgroup(String cuid, String group) throws DataAccessException {
        getUserDAO().removeUserFromGroup(cuid, group);
        UserGroupCache.clear();
    }

    public void addUserToRole(String cuid, String role) throws DataAccessException {
        getUserDAO().addUserToRole(cuid, role);
        UserGroupCache.clear();
    }

    public void removeUserFromRole(String cuid, String role) throws DataAccessException {
        getUserDAO().removeUserFromRole(cuid, role);
        UserGroupCache.clear();
    }
    public void createRole(Role role) throws DataAccessException {
        role.setId(getUserDAO().saveRole(role));
        UserGroupCache.set(role);
    }

    public void updateRole(Role role) throws DataAccessException {
        getUserDAO().saveRole(role);
        UserGroupCache.set(role);
    }

    public void deleteRole(String name) throws DataAccessException {
        UserDataAccess dao = getUserDAO();
        Role role = dao.getRole(name);
        if (role == null)
            throw new DataAccessException("Role: " + name + " does not exist");
        dao.deleteRole(role.getId());
        UserGroupCache.remove(role);
    }

    public List getWorkgroupUsers(List groups)
    throws DataAccessException {
        List users = new ArrayList<>();
        for (String group : groups) {
            Workgroup workgroup = getWorkgroup(group);
            for (User user : workgroup.getUsers()) {
                if (!users.contains(user))
                    users.add(user);
            }
        }
        return users;
    }

    public List getWorkgroupEmails(List groups)
    throws DataAccessException {
      List emails = new ArrayList<>();
      for (User user : getWorkgroupUsers(groups)) {
          User deepUser = UserGroupCache.getUser(user.getId());
          if (deepUser == null)
              throw new DataAccessException("User not found: " + user.getCuid());
          String email = deepUser.getEmail();
          if (email != null) {
              if (!emails.contains(email))
                  emails.add(email);
          }
          else {
              logger.warn("No email address found for user: " + user.getCuid());
          }
      }
      return emails;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy