package br.ufrgs.inf.dsmoura.repository.controller.asset; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import br.ufrgs.inf.dsmoura.repository.controller.SystemPropertyEnum; import br.ufrgs.inf.dsmoura.repository.controller.login.LDAPUserAuthentication; import br.ufrgs.inf.dsmoura.repository.controller.login.UserAuthentication; import br.ufrgs.inf.dsmoura.repository.controller.util.EmailUtil; import br.ufrgs.inf.dsmoura.repository.controller.util.FieldsUtil; import br.ufrgs.inf.dsmoura.repository.model.dao.AssetDAO; import br.ufrgs.inf.dsmoura.repository.model.dao.TypesDAO; import br.ufrgs.inf.dsmoura.repository.model.dao.UserDAO; import br.ufrgs.inf.dsmoura.repository.model.entity.AdjustmentDTO; import br.ufrgs.inf.dsmoura.repository.model.entity.Asset; import br.ufrgs.inf.dsmoura.repository.model.entity.ConsumptionDTO; import br.ufrgs.inf.dsmoura.repository.model.entity.RelatedAsset; import br.ufrgs.inf.dsmoura.repository.model.entity.UserCommentDTO; import br.ufrgs.inf.dsmoura.repository.model.entity.UserDTO; public class NotificationMB { static final Log logger = LogFactory.getLog(NotificationMB.class); public static void sendNotificationsToRelatedAssets(Asset asset) { HashSet<UserDTO> previousVersionsConsumers = new HashSet<UserDTO>(); for (RelatedAsset relatedAsset : asset.getRelatedAssets()) { if (relatedAsset.getRelatedAssetTypeDTO().getName().equalsIgnoreCase("Previous Version")) { Asset relatedAssetDTO = AssetDAO.getInstance().findAssetByIDVersion(relatedAsset.getId(), relatedAsset.getVersion()); if (relatedAssetDTO == null) { logger.info("Related asset not found in database. ID = " + relatedAsset.getId() + " version = " + relatedAsset.getVersion()); continue; } for (ConsumptionDTO consumptionDTO : relatedAssetDTO.getUsage().getConsumptionDTOs()) { previousVersionsConsumers.add(consumptionDTO.getConsumerUserDTO()); } } } if (previousVersionsConsumers.size() == 0) { return; } String subject = "Asset with new version: " + asset.getName(); String msg = "Software Reuse Repository message:\n\n" + "There is a new version of an asset which you have consumed.\n\n" + "Asset:\n" + "ID: " + asset.getId() + "\n" + "Name: " + asset.getName() + "\n" + "Version: " + asset.getVersion() + "\n" + "State: " + asset.getState() + "\n\n" + "Thanks."; List<String> toList = new ArrayList<String>(); for (UserDTO consumerUserDTO : previousVersionsConsumers) { toList.add( consumerUserDTO.getEmail() ); } if (toList.size() > 0) { EmailUtil.sendMail(toList, subject, msg); } } public static void sendNotificationsAboutAdjustment(Asset asset) { if (asset.getUsage().getConsumptionDTOs().size() == 0) { return; } AdjustmentDTO adjustmentDTO = asset.getUsage().getAdjustmentDTOs().get(asset.getUsage().getAdjustmentDTOs().size()-1); String description = adjustmentDTO.getDescription(); String subject = "Asset changed: " + asset.getName(); String msg = "Software Reuse Repository message:\n\n" + "An asset which you have consumed has been changed.\n\n" + "Change description:\n" + description + "\n\n" + "Asset:\n" + "ID: " + asset.getId() + "\n" + "Name: " + asset.getName() + "\n" + "Version: " + asset.getVersion() + "\n" + "State: " + asset.getState() + "\n\n" + "Thanks."; List<String> toList = new ArrayList<String>(); for (ConsumptionDTO consumptionDTO : asset.getUsage().getConsumptionDTOs()) { toList.add( consumptionDTO.getConsumerUserDTO().getEmail() ); } if (toList.size() > 0) { EmailUtil.sendMail(toList, subject, msg); } } public static void sendNotificationToAuthorCertificationOk(Asset asset) { String to = asset.getUsage().getAuthorUserDTO().getEmail(); String subject = "Asset certified: " + asset.getName(); String msg = "Software Reuse Repository message:\n\n" + asset.getUsage().getAuthorUserDTO().getName() + ",\n\n" + "The asset was certified.\n\n" + "Asset:\n" + "ID: " + asset.getId() + "\n" + "Name: " + asset.getName() + "\n" + "Version: " + asset.getVersion() + "\n" + "State: " + asset.getState() + "\n\n" + "Thanks."; EmailUtil.sendMail(to, subject, msg); } public static void sendNotificationToAuthorCertificationRejected(Asset asset, String messageForAuthor, String certifierName) { String to = asset.getUsage().getAuthorUserDTO().getEmail(); String subject = "Asset not certified: " + asset.getName(); String msg = "Software Reuse Repository message:\n\n" + asset.getUsage().getAuthorUserDTO().getName() + ",\n\n" + "The asset has not been certified, please perform the adjustments and send again to certification.\n\n" + "Message from Certifier (" + certifierName + "):\n" + messageForAuthor + "\n\n" + "Asset:\n" + "ID: " + asset.getId() + "\n" + "Name: " + asset.getName() + "\n" + "Version: " + asset.getVersion() + "\n" + "State: " + asset.getState() + "\n\n" + "Thanks."; EmailUtil.sendMail(to, subject, msg); } public static void sendNotificationToAuthorAssetRemoved(Asset asset, String messageForAuthor, String certifierName) { String to = asset.getUsage().getAuthorUserDTO().getEmail(); String subject = "Asset removed: " + asset.getName(); String msg = "Software Reuse Repository message:\n\n" + asset.getUsage().getAuthorUserDTO().getName() + ",\n\n" + "The asset has been removed.\n\n" + "Message from Certifier (" + certifierName + "):\n" + messageForAuthor + "\n\n" + "Asset:\n" + "ID: " + asset.getId() + "\n" + "Name: " + asset.getName() + "\n" + "Version: " + asset.getVersion() + "\n" + "State: " + asset.getState() + "\n\n" + "Thanks."; EmailUtil.sendMail(to, subject, msg); } public static void sendCommentNotificationToAuthors(Asset asset, UserCommentDTO userCommentDTO) { List<String> toAuthorsList = new ArrayList<String>(); Collection<String> authorsUsernames = FieldsUtil.extractUsernames(asset.getUsage().getCreatorUsername()); toAuthorsList = findEmailsFromUsernames(authorsUsernames); toAuthorsList.add(asset.getUsage().getAuthorUserDTO().getEmail()); String subject = "New user comment on asset: " + asset.getName(); String msg = "Software Reuse Repository message:\n\n" + "Asset Author,\n\n" + "There is a new comment from user " + userCommentDTO.getUserDTO().toString() + ":\n" + userCommentDTO.getComment() + "\n\n" + "Asset:\n" + "ID: " + asset.getId() + "\n" + "Name: " + asset.getName() + "\n" + "Version: " + asset.getVersion() + "\n" + "State: " + asset.getState() + "\n\n" + "Thanks."; EmailUtil.sendMail(toAuthorsList, subject, msg); } private static List<String> findEmailsFromUsernames(Collection<String> authorsUsernames) { List<String> emailList = new ArrayList<String>(); for (String authorUsername : authorsUsernames) { UserDTO userWithUsernameDTO = UserDAO.getInstance().findByUsername(authorUsername); if (userWithUsernameDTO != null) { emailList.add(userWithUsernameDTO.getEmail()); } else if (isLDAPUserAuthentication()) { //takes the emails from ldap emailList.addAll(new LDAPUserAuthentication().getEmailsFromLDAP(authorUsername)); } } return emailList; } private static Boolean isLDAPUserAuthentication() { String userAuthenticationMode = TypesDAO.getInstance().getSystemPropertyValue(SystemPropertyEnum.USER_AUTHENTICATION_MODE); return userAuthenticationMode.equalsIgnoreCase(UserAuthentication.LDAP_MODE); } }