use of org.orcid.jaxb.model.notification.amended_v2.NotificationAmended in project ORCID-Source by ORCID.
the class EmailMessageSenderImpl method createDigest.
@Override
public EmailMessage createDigest(OrcidProfile orcidProfile, Collection<Notification> notifications, Locale locale) {
int totalMessageCount = 0;
int orcidMessageCount = 0;
int addActivitiesMessageCount = 0;
int amendedMessageCount = 0;
int activityCount = 0;
Set<String> memberIds = new HashSet<>();
DigestEmail digestEmail = new DigestEmail();
for (Notification notification : notifications) {
digestEmail.addNotification(notification);
totalMessageCount++;
if (notification.getSource() == null) {
orcidMessageCount++;
} else {
SourceClientId clientId = notification.getSource().getSourceClientId();
if (clientId != null) {
memberIds.add(clientId.getPath());
}
}
if (notification instanceof NotificationPermission) {
addActivitiesMessageCount++;
NotificationPermission permissionNotification = (NotificationPermission) notification;
activityCount += permissionNotification.getItems().getItems().size();
permissionNotification.setEncryptedPutCode(encryptAndEncodePutCode(permissionNotification.getPutCode()));
} else if (notification instanceof NotificationInstitutionalConnection) {
notification.setEncryptedPutCode(encryptAndEncodePutCode(notification.getPutCode()));
} else if (notification instanceof NotificationAmended) {
amendedMessageCount++;
}
}
String emailName = notificationManager.deriveEmailFriendlyName(orcidProfile);
String subject = messages.getMessage("email.subject.digest", new String[] { emailName, String.valueOf(totalMessageCount) }, locale);
Map<String, Object> params = new HashMap<>();
params.put("locale", locale);
params.put("messages", messages);
params.put("messageArgs", new Object[0]);
params.put("orcidProfile", orcidProfile);
params.put("emailName", emailName);
params.put("digestEmail", digestEmail);
params.put("frequency", orcidProfile.getOrcidInternal().getPreferences().getSendEmailFrequencyDays());
params.put("totalMessageCount", String.valueOf(totalMessageCount));
params.put("orcidMessageCount", orcidMessageCount);
params.put("addActivitiesMessageCount", addActivitiesMessageCount);
params.put("activityCount", activityCount);
params.put("amendedMessageCount", amendedMessageCount);
params.put("memberIdsCount", memberIds.size());
params.put("baseUri", orcidUrlManager.getBaseUrl());
params.put("subject", subject);
String bodyText = templateManager.processTemplate("digest_email.ftl", params, locale);
String bodyHtml = templateManager.processTemplate("digest_email_html.ftl", params, locale);
EmailMessage emailMessage = new EmailMessage();
emailMessage.setSubject(subject);
emailMessage.setBodyText(bodyText);
emailMessage.setBodyHtml(bodyHtml);
return emailMessage;
}
use of org.orcid.jaxb.model.notification.amended_v2.NotificationAmended in project ORCID-Source by ORCID.
the class JpaJaxbNotificationAdapterTest method testToNotificationAmendedEntity.
@Test
public void testToNotificationAmendedEntity() {
NotificationAmended notification = new NotificationAmended();
notification.setNotificationType(NotificationType.AMENDED);
Source source = new Source();
notification.setSource(source);
SourceClientId clientId = new SourceClientId();
source.setSourceClientId(clientId);
clientId.setPath("APP-5555-5555-5555-5555");
Items activities = new Items();
notification.setItems(activities);
Item activity = new Item();
activities.getItems().add(activity);
activity.setItemType(ItemType.WORK);
activity.setItemName("Latest Research Article");
ExternalID extId = new ExternalID();
activity.setExternalIdentifier(extId);
extId.setType("doi");
extId.setValue("1234/abc123");
NotificationEntity notificationEntity = jpaJaxbNotificationAdapter.toNotificationEntity(notification);
assertTrue(notificationEntity instanceof NotificationAmendedEntity);
NotificationAmendedEntity notificationAmendedEntity = (NotificationAmendedEntity) notificationEntity;
assertNotNull(notificationEntity);
assertEquals(NotificationType.AMENDED, notificationEntity.getNotificationType());
// Source
assertNull(notificationAmendedEntity.getSourceId());
assertNull(notificationAmendedEntity.getClientSourceId());
assertNull(notificationAmendedEntity.getElementSourceId());
}
use of org.orcid.jaxb.model.notification.amended_v2.NotificationAmended in project ORCID-Source by ORCID.
the class EmailMessageSenderTest method testCreateDigest.
@Test
public void testCreateDigest() throws IOException {
OrcidProfile orcidProfile = new OrcidProfile();
OrcidBio orcidBio = new OrcidBio();
orcidProfile.setOrcidBio(orcidBio);
PersonalDetails personalDetails = new PersonalDetails();
orcidBio.setPersonalDetails(personalDetails);
personalDetails.setGivenNames(new GivenNames("John"));
personalDetails.setFamilyName(new FamilyName("Watson"));
OrcidInternal orcidInternal = new OrcidInternal();
Preferences preferences = new Preferences();
orcidProfile.setOrcidInternal(orcidInternal);
orcidInternal.setPreferences(preferences);
preferences.setSendEmailFrequencyDays("7.0");
List<Notification> notifications = new ArrayList<>();
NotificationPermission notification1 = new NotificationPermission();
notification1.setPutCode(1L);
Items activities1 = new Items();
notification1.setItems(activities1);
activities1.getItems().add(createActivity(ItemType.WORK, "Work 1", "123446/67654"));
activities1.getItems().add(createActivity(ItemType.WORK, "Work 2", "http://dx.doi.org/123446/67655"));
notification1.setCreatedDate(DateUtils.convertToXMLGregorianCalendar("2014-07-10T13:39:31"));
notification1.setAuthorizationUrl(new AuthorizationUrl("https://thirdparty.com/add-to-orcid/12345"));
Source source1 = new Source();
source1.setSourceName(new SourceName("Super Institution 1"));
source1.setSourceClientId(new SourceClientId("APP-5555-5555-5555-5555"));
notification1.setSource(source1);
notifications.add(notification1);
NotificationPermission notification2 = new NotificationPermission();
notification2.setPutCode(2L);
Items activities2 = new Items();
notification2.setItems(activities2);
activities2.getItems().add(createActivity(ItemType.EMPLOYMENT, "Employment 1 ", "12345/abc"));
notification2.setCreatedDate(DateUtils.convertToXMLGregorianCalendar("2014-08-17T10:22:15"));
notification2.setAuthorizationUrl(new AuthorizationUrl("https://thirdparty.com/add-to-orcid/abc"));
Source source2 = new Source();
source2.setSourceName(new SourceName("Super Institution 1"));
source2.setSourceClientId(new SourceClientId("APP-5555-5555-5555-5555"));
notification2.setSource(source2);
notifications.add(notification2);
NotificationPermission notification3 = new NotificationPermission();
notification3.setPutCode(3L);
Items activities3 = new Items();
notification3.setItems(activities3);
activities3.getItems().add(createActivity(ItemType.WORK, "Work 3", "12345/def"));
activities3.getItems().add(createActivity(ItemType.WORK, "Work 4", "12345/ghi"));
notification3.setCreatedDate(DateUtils.convertToXMLGregorianCalendar("2014-07-10T08:53:56"));
notification3.setAuthorizationUrl(new AuthorizationUrl("https://thirdparty.com/add-to-orcid/def"));
Source source3 = new Source();
source3.setSourceName(new SourceName("Lovely Publisher 1"));
notification3.setSource(source3);
source3.setSourceClientId(new SourceClientId("APP-ABCD-ABCD-ABCD-ABCD"));
notifications.add(notification3);
NotificationCustom notification4 = new NotificationCustom();
notification4.setPutCode(4L);
notification4.setSubject("We have release a new messaging feature");
notification4.setCreatedDate(DateUtils.convertToXMLGregorianCalendar("2014-07-10T08:53:56"));
notifications.add(notification4);
NotificationCustom notification5 = new NotificationCustom();
notification5.setPutCode(5L);
notification5.setSubject("The ORCID registry is now available in Orc");
notification5.setCreatedDate(DateUtils.convertToXMLGregorianCalendar("2014-07-11T06:42:18"));
notifications.add(notification5);
NotificationAmended notification6 = new NotificationAmended();
notification6.setPutCode(6L);
notification6.setSubject("Amended by member");
notification6.setAmendedSection(AmendedSection.FUNDING);
notification6.setCreatedDate(DateUtils.convertToXMLGregorianCalendar("2014-07-12T18:44:36"));
notification6.setSource(source3);
notifications.add(notification6);
EmailMessage emailMessage = emailMessageSender.createDigest(orcidProfile, notifications, Locale.ENGLISH);
assertNotNull(emailMessage);
String expectedBodyText = IOUtils.toString(getClass().getResourceAsStream("example_digest_email_body.txt"));
String expectedBodyHtml = IOUtils.toString(getClass().getResourceAsStream("example_digest_email_body.html"));
assertTrue(expectedBodyText.contains("Lovely Publisher 1 has updated recent funding on your ORCID record."));
assertTrue(expectedBodyHtml.contains("Lovely Publisher 1 has updated recent funding on your ORCID record."));
assertTrue(expectedBodyText.contains("Super Institution 1: Request to add items"));
assertTrue(expectedBodyHtml.contains("Super Institution 1: Request to add items"));
assertTrue(expectedBodyText.contains("/action"));
assertTrue(expectedBodyHtml.contains("/action"));
assertEquals("[ORCID] John Watson you have 6 new notifications", emailMessage.getSubject());
}
use of org.orcid.jaxb.model.notification.amended_v2.NotificationAmended in project ORCID-Source by ORCID.
the class NotificationController method addSubjectToNotifications.
private void addSubjectToNotifications(List<Notification> notifications) {
for (Notification notification : notifications) {
if (notification instanceof NotificationPermission) {
NotificationPermission naa = (NotificationPermission) notification;
String customSubject = naa.getNotificationSubject();
if (StringUtils.isNotBlank(customSubject)) {
naa.setSubject(customSubject);
} else {
naa.setSubject(getMessage(buildInternationalizationKey(NotificationType.class, naa.getNotificationType().value())));
}
} else if (notification instanceof NotificationAmended) {
NotificationAmended na = (NotificationAmended) notification;
na.setSubject(getMessage(buildInternationalizationKey(NotificationType.class, na.getNotificationType().value())));
} else if (notification instanceof NotificationInstitutionalConnection) {
NotificationInstitutionalConnection nic = (NotificationInstitutionalConnection) notification;
nic.setSubject(getMessage(buildInternationalizationKey(NotificationType.class, nic.getNotificationType().value())));
}
}
}
use of org.orcid.jaxb.model.notification.amended_v2.NotificationAmended in project ORCID-Source by ORCID.
the class NotificationManagerImpl method sendAmendEmail.
@Override
public void sendAmendEmail(OrcidProfile amendedProfile, AmendedSection amendedSection, Collection<Item> items) {
String amenderOrcid = sourceManager.retrieveSourceOrcid();
if (amenderOrcid == null) {
LOGGER.debug("Not sending amend email, because amender is null: {}", amendedProfile);
return;
}
if (amenderOrcid.equals(amendedProfile.getOrcidIdentifier().getPath())) {
LOGGER.debug("Not sending amend email, because self edited: {}", amendedProfile);
return;
}
SendChangeNotifications sendChangeNotifications = amendedProfile.getOrcidInternal().getPreferences().getSendChangeNotifications();
if (sendChangeNotifications == null || !sendChangeNotifications.isValue()) {
LOGGER.debug("Not sending amend email, because option to send change notifications not set to true: {}", amendedProfile);
return;
}
if (OrcidType.ADMIN.equals(profileDao.retrieveOrcidType(amenderOrcid))) {
LOGGER.debug("Not sending amend email, because modified by admin ({}): {}", amenderOrcid, amendedProfile);
return;
}
String subject = getSubject("email.subject.amend", amendedProfile);
// Create map of template params
Map<String, Object> templateParams = new HashMap<String, Object>();
templateParams.put("emailName", deriveEmailFriendlyName(amendedProfile));
templateParams.put("orcid", amendedProfile.getOrcidIdentifier().getPath());
templateParams.put("amenderName", extractAmenderName(amendedProfile, amenderOrcid));
templateParams.put("baseUri", orcidUrlManager.getBaseUrl());
templateParams.put("baseUriHttp", orcidUrlManager.getBaseUriHttp());
templateParams.put("subject", subject);
addMessageParams(templateParams, amendedProfile);
// Generate body from template
String body = templateManager.processTemplate("amend_email.ftl", templateParams);
// Generate html from template
String html = templateManager.processTemplate("amend_email_html.ftl", templateParams);
boolean notificationsEnabled = profileEntityCacheManager.retrieve(amendedProfile.getOrcidIdentifier().getPath()).getEnableNotifications();
if (notificationsEnabled) {
NotificationAmended notification = new NotificationAmended();
notification.setNotificationType(NotificationType.AMENDED);
notification.setAmendedSection(amendedSection);
if (items != null) {
notification.setItems(new Items(new ArrayList<>(items)));
}
createNotification(amendedProfile.getOrcidIdentifier().getPath(), notification);
} else {
String email = amendedProfile.getOrcidBio().getContactDetails().retrievePrimaryEmail().getValue();
mailGunManager.sendEmail(AMEND_NOTIFY_ORCID_ORG, email, subject, body, html);
}
}
Aggregations