package ru.ulstu.user.service; import org.springframework.stereotype.Service; import ru.ulstu.user.model.User; import ru.ulstu.user.model.UserDto; import ru.ulstu.user.model.UserListDto; import ru.ulstu.user.model.UserRole; import ru.ulstu.user.model.UserRoleDto; import ru.ulstu.user.repository.UserRoleRepository; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @Service public class UserMapper { private final UserRoleRepository userRoleRepository; public UserMapper(UserRoleRepository userRoleRepository) { this.userRoleRepository = userRoleRepository; } public Set rolesFromDto(Set strings) { return Optional.ofNullable(strings).orElse(Collections.emptySet()).stream() .filter(Objects::nonNull) .map(role -> userRoleRepository.getOne(role.getId().toString())) .filter(Objects::nonNull) .collect(Collectors.toSet()); } public UserDto userEntityToUserDto(User userEntity) { if (userEntity == null) { return null; } return new UserDto(userEntity); } public UserListDto userEntityToUserListDto(User userEntity) { if (userEntity == null) { return null; } return new UserListDto(userEntity); } public List userEntitiesToUserListDtos(List userEntities) { return userEntities.stream() .filter(Objects::nonNull) .map(this::userEntityToUserListDto) .filter(Objects::nonNull) .collect(Collectors.toList()); } public User userDtoToUserEntity(UserDto userDto) { if (userDto == null) { return null; } final User user = new User(); user.setId(userDto.getId()); user.setLogin(userDto.getLogin()); user.setFirstName(userDto.getFirstName()); user.setLastName(userDto.getLastName()); user.setEmail(userDto.getEmail()); user.setActivated(userDto.isActivated()); final Set roles = this.rolesFromDto(userDto.getRoles()); if (!roles.isEmpty()) { user.setRoles(roles); } return user; } }