package codeine.mail;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import codeine.jsons.mails.AlertsCollectionType;
import codeine.jsons.mails.CollectorNotificationJson;
import codeine.jsons.project.MailPolicyJson;
import codeine.jsons.project.ProjectJson;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
public class AggregateNotification {
public List<NotificationContent> prepareMailsToUsers(AlertsCollectionType collType, Multimap<String, CollectorNotificationJson> projectNameToItems, List<ProjectJson> projects) {
Map<String,NotificationContent> notifications = Maps.newHashMap();
for (ProjectJson p : projects) {
for (MailPolicyJson policy : p.mail()) {
if(policy.intensity() == collType) {
updateNotification(collType, projectNameToItems.get(p.name()), policy.user(),notifications);
}
}
}
return Lists.newArrayList(notifications.values());
}
private void updateNotification(AlertsCollectionType collType, Collection<CollectorNotificationJson> collection, String user, Map<String, NotificationContent> notifications) {
NotificationContent n = notifications.get(user) == null ? new NotificationContent(user) : notifications.get(user);
List<CollectorNotificationJson> list = Lists.newArrayList();
for (CollectorNotificationJson collectorNotificationJson : collection) {
list.add(collectorNotificationJson);
}
if (!list.isEmpty()){
n.addAll(list);
notifications.put(user,n);
}
}
}