package fi.otavanopisto.muikku.users; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.inject.Inject; import fi.otavanopisto.muikku.dao.users.UserEmailEntityDAO; import fi.otavanopisto.muikku.model.users.UserEmailEntity; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier; import fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier; public class UserEmailEntityController { @Inject private Logger logger; @Inject private UserEmailEntityDAO userEmailEntityDAO; @Inject private UserSchoolDataIdentifierController userSchoolDataIdentifierController; public UserEmailEntity findUserEmailEntityById(Long id) { return userEmailEntityDAO.findById(id); } public UserEmailEntity findUserEmailEntityByUserSchoolDataIdentifierAndAddress(UserSchoolDataIdentifier identifier, String address) { return userEmailEntityDAO.findByUserSchoolDataIdentifierAndAddress(identifier, address); } /** * Permanently removes the given user email from the database. * * @param userEmail * The user email to be removed */ public void removeUserEmailEntity(UserEmailEntity userEmail) { userEmailEntityDAO.delete(userEmail); } public UserEmailEntity addUserEmail(UserSchoolDataIdentifier userSchoolDataIdentifier, String address) { UserEmailEntity userEmail = userEmailEntityDAO.findByUserSchoolDataIdentifierAndAddress(userSchoolDataIdentifier, address); return userEmail != null ? userEmail : userEmailEntityDAO.create(userSchoolDataIdentifier, address); } public void removeUserEmail(UserSchoolDataIdentifier userSchoolDataIdentifier, String address) { UserEmailEntity userEmail = userEmailEntityDAO.findByUserSchoolDataIdentifierAndAddress(userSchoolDataIdentifier, address); if (userEmail != null) { userEmailEntityDAO.delete(userEmail); } } public String getUserDefaultEmailAddress(UserEntity userEntity, boolean obfuscate) { // TODO User default address support SchoolDataIdentifier userIdentifier = new SchoolDataIdentifier(userEntity.getDefaultIdentifier(), userEntity.getDefaultSchoolDataSource().getIdentifier()); return getUserDefaultEmailAddress(userIdentifier, obfuscate); } public String getUserDefaultEmailAddress(SchoolDataIdentifier schoolDataIdentifier, boolean obfuscate) { // TODO User default address support UserSchoolDataIdentifier userSchoolDataIdentifier = userSchoolDataIdentifierController.findUserSchoolDataIdentifierBySchoolDataIdentifier(schoolDataIdentifier); if (userSchoolDataIdentifier != null) { return getUserDefaultEmailAddress(userSchoolDataIdentifier, obfuscate); } else { logger.severe(String.format("Could not find UserSchoolDataIdentifier for identifier %s", schoolDataIdentifier)); return null; } } public String getUserDefaultEmailAddress(UserSchoolDataIdentifier userSchoolDataIdentifier, boolean obfuscate) { // TODO User default address support String emailAddress = null; List<UserEmailEntity> userEmailEntities = userEmailEntityDAO.listByUserSchoolDataIdentifier(userSchoolDataIdentifier); if (userEmailEntities != null && userEmailEntities.size() > 0) { emailAddress = userEmailEntities.get(0).getAddress(); } if (obfuscate && emailAddress != null) { emailAddress = emailAddress.toLowerCase(); int atIndex = emailAddress.indexOf('@'); if (atIndex != -1) { String user = emailAddress.substring(0, atIndex); if (user.length() > 3) { String domain = emailAddress.substring(atIndex); emailAddress = user.substring(0, 2) + "..." + domain; } else { emailAddress = null; } } else { emailAddress = null; } } return emailAddress; } public List<String> getUserEmailAddresses(UserSchoolDataIdentifier userSchoolDataIdentifier) { List<UserEmailEntity> userEmailEntities = userEmailEntityDAO.listByUserSchoolDataIdentifier(userSchoolDataIdentifier); List<String> emailAddresses = new ArrayList<>(); for (UserEmailEntity userEmailEntity : userEmailEntities) { emailAddresses.add(userEmailEntity.getAddress()); } return emailAddresses; } public List<String> getUserEmailAddresses(SchoolDataIdentifier schoolDataIdentifier) { UserSchoolDataIdentifier userSchoolDataIdentifier = userSchoolDataIdentifierController.findUserSchoolDataIdentifierBySchoolDataIdentifier(schoolDataIdentifier); if (userSchoolDataIdentifier != null) { return getUserEmailAddresses(userSchoolDataIdentifier); } else { logger.severe(String.format("Could not find UserSchoolDataIdentifier for identifier %s", schoolDataIdentifier)); return null; } } public void setUserEmails(SchoolDataIdentifier schoolDataIdentifier, List<String> emails) { UserSchoolDataIdentifier userSchoolDataIdentifier = userSchoolDataIdentifierController.findUserSchoolDataIdentifierBySchoolDataIdentifier(schoolDataIdentifier); if (userSchoolDataIdentifier != null) { setUserEmails(userSchoolDataIdentifier, emails); } else { logger.severe(String.format("Could not find UserSchoolDataIdentifier for identifier %s", schoolDataIdentifier)); } } public void setUserEmails(UserSchoolDataIdentifier userSchoolDataIdentifier, List<String> emails) { List<String> existingEmails = getUserEmailAddresses(userSchoolDataIdentifier); if (emails != null) { for (String email : emails) { if (!existingEmails.contains(email)) { logger.info(String.format("Adding email %s to identifier %s", email, userSchoolDataIdentifier.getIdentifier())); addUserEmail(userSchoolDataIdentifier, email); } existingEmails.remove(email); } } else { logger.severe(String.format("Passed null list to setUserEmails method for userSchoolDataIdentifier %s", userSchoolDataIdentifier.getId())); } for (String email : existingEmails) { logger.info(String.format("Removing email %s from identifier %s", email, userSchoolDataIdentifier.getIdentifier())); removeUserEmail(userSchoolDataIdentifier, email); } } }