/* * Copyright 2014 NAVER Corp. * * 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.navercorp.pinpoint.web.dao.memory; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.navercorp.pinpoint.web.dao.UserDao; import com.navercorp.pinpoint.web.dao.UserGroupDao; import com.navercorp.pinpoint.web.vo.User; import com.navercorp.pinpoint.web.vo.UserGroup; import com.navercorp.pinpoint.web.vo.UserGroupMember; /** * @author minwoo.jung */ @Repository public class MemoryUserGroupDao implements UserGroupDao { private final Map<String, UserGroup> userGroups = new ConcurrentHashMap<>(); private final Map<String, UserGroupMember> userGroupMembers = new ConcurrentHashMap<>(); private final AtomicInteger userGroupNumGenerator = new AtomicInteger(); private final AtomicInteger userGroupMemNumGenerator = new AtomicInteger(); @Autowired UserDao userDao; @Override public String createUserGroup(UserGroup userGroup) { String userGroupNumber = String.valueOf(userGroupNumGenerator.getAndIncrement()); userGroup.setNumber(userGroupNumber); userGroups.put(userGroupNumber, userGroup); return userGroup.getNumber(); } @Override public List<UserGroup> selectUserGroup() { return new ArrayList<>(userGroups.values()); } @Override public List<UserGroup> selectUserGroupByUserId(String userId) { Set<String> userGroupNames = new HashSet<>(); for (UserGroupMember member : userGroupMembers.values()) { if (member.getMemberId().equals(userId)) { userGroupNames.add(member.getUserGroupId()); } } List<UserGroup> groups = new LinkedList<>(); for(UserGroup userGroup : userGroups.values()) { if (userGroupNames.contains(userGroup.getId())) { groups.add(userGroup); } } return groups; } @Override public List<UserGroup> selectUserGroupByUserGroupId(String userGroupId) { List<UserGroup> userGroupList = new ArrayList<>(); for(UserGroup userGroup : userGroups.values()) { if (userGroup.getId().contains(userGroupId)) { userGroupList.add(userGroup); } } return userGroupList; } @Override public void updateUserGroup(UserGroup userGroup) { userGroups.put(userGroup.getNumber(), userGroup); } @Override public void deleteUserGroup(UserGroup userGroup) { for(UserGroup ug : userGroups.values()) { if (ug.getId().equals(userGroup.getId())) { userGroups.remove(ug.getNumber()); break; } } } @Override public void insertMember(UserGroupMember userGroupMember) { String memberNum = String.valueOf(userGroupMemNumGenerator.getAndIncrement()); userGroupMember.setNumber(memberNum); userGroupMembers.put(memberNum, userGroupMember); } @Override public void deleteMember(UserGroupMember userGroupMember) { for (UserGroupMember member : userGroupMembers.values()) { if (member.getUserGroupId().equals(userGroupMember.getUserGroupId()) && member.getMemberId().equals(userGroupMember.getMemberId())) { userGroupMembers.remove(member.getNumber()); break; } } } @Override public List<UserGroupMember> selectMember(String userGroupId) { List<UserGroupMember> userGroupMemberList = new LinkedList<>(); for (UserGroupMember member : userGroupMembers.values()) { if (member.getUserGroupId().equals(userGroupId)) { User user = userDao.selectUserByUserId(member.getMemberId()); member.setName(user.getName()); member.setDepartment(user.getDepartment()); userGroupMemberList.add(member); } } return userGroupMemberList; } @Override public void updateMember(UserGroupMember userGroupMember) { userGroupMembers.put(userGroupMember.getNumber(), userGroupMember); } @Override public void deleteMemberByUserGroupId(String userGroupId) { for (UserGroupMember member : userGroupMembers.values()) { if (member.getUserGroupId().equals(userGroupId)) { userGroupMembers.remove(userGroupId); } } } @Override public List<String> selectPhoneNumberOfMember(String userGroupId) { List<UserGroupMember> userGroupMemberList = new LinkedList<>(); for (UserGroupMember member : userGroupMembers.values()) { if (member.getUserGroupId().equals(userGroupId)) { userGroupMemberList.add(member); } } List<String> phoneNumbers = new LinkedList<>(); for (UserGroupMember member : userGroupMemberList) { User user = userDao.selectUserByUserId(member.getMemberId()); phoneNumbers.add(user.getPhoneNumber()); } return phoneNumbers; } @Override public List<String> selectEmailOfMember(String userGroupId) { List<UserGroupMember> userGroupMemberList = new LinkedList<>(); for (UserGroupMember member : userGroupMembers.values()) { if (member.getUserGroupId().equals(userGroupId)) { userGroupMemberList.add(member); } } List<String> emails = new LinkedList<>(); for (UserGroupMember member : userGroupMemberList) { User user = userDao.selectUserByUserId(member.getMemberId()); emails.add(user.getEmail()); } return emails; } @Override public void updateUserGroupIdOfMember(UserGroup userGroup) { UserGroup group = userGroups.get(userGroup.getNumber()); for (UserGroupMember member : userGroupMembers.values()) { if (member.getUserGroupId().equals(group.getId())) { member.setUserGroupId(userGroup.getId()); } } } }