in progress on defining the configuration
This commit is contained in:
parent
fb5b527a13
commit
49f7b248fb
|
@ -0,0 +1,15 @@
|
||||||
|
package org.gcube.application.cms.notifications;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.cms.notifications.config.SubscribeNotificationEvent;
|
||||||
|
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class NotificationEventsSubscribedConfig {
|
||||||
|
String context;
|
||||||
|
List<SubscribeNotificationEvent> listNotificationEventSubscribed;
|
||||||
|
}
|
|
@ -1,44 +1,305 @@
|
||||||
package org.gcube.application.cms.notifications;
|
package org.gcube.application.cms.notifications;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.bson.Document;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
|
import org.gcube.application.cms.notifications.config.SubscribeNotificationEvent;
|
||||||
|
import org.gcube.application.cms.plugins.EventListenerPluginInterface;
|
||||||
|
import org.gcube.application.cms.plugins.events.EventListener;
|
||||||
|
import org.gcube.application.cms.plugins.events.EventManager;
|
||||||
|
import org.gcube.application.cms.plugins.events.EventManager.Event;
|
||||||
|
import org.gcube.application.cms.plugins.events.ItemObserved;
|
||||||
|
import org.gcube.application.cms.plugins.faults.InitializationException;
|
||||||
|
import org.gcube.application.cms.plugins.faults.MaterializationException;
|
||||||
|
import org.gcube.application.cms.plugins.faults.ShutDownException;
|
||||||
import org.gcube.application.cms.plugins.implementations.AbstractPlugin;
|
import org.gcube.application.cms.plugins.implementations.AbstractPlugin;
|
||||||
|
import org.gcube.application.cms.plugins.reports.InitializationReport;
|
||||||
|
import org.gcube.application.cms.plugins.reports.Report;
|
||||||
|
import org.gcube.application.cms.plugins.reports.Report.Status;
|
||||||
|
import org.gcube.application.cms.serialization.Serialization;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
import org.gcube.application.geoportal.common.model.plugins.PluginDescriptor;
|
import org.gcube.application.geoportal.common.model.plugins.PluginDescriptor;
|
||||||
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
||||||
|
|
||||||
import com.vdurmont.semver4j.Semver;
|
import com.vdurmont.semver4j.Semver;
|
||||||
|
|
||||||
public class NotificationsPlugin extends AbstractPlugin {
|
import lombok.Synchronized;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
public static final PluginDescriptor DESCRIPTOR = new PluginDescriptor(NotificationsPlugin.class.getName(),
|
/**
|
||||||
"Notification");
|
* The Class NotificationsPlugin.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Jan 30, 2024
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class NotificationsPlugin extends AbstractPlugin implements EventListenerPluginInterface {
|
||||||
|
|
||||||
|
public static final String SUBSCRIBE_NOTIFICATIONS_CONFIG = "subscribeNotifications";
|
||||||
|
public static final String PLUGIN_ID = "Notifications-Plugin";
|
||||||
|
public static final String PLUGIN_TYPE = "EventListener";
|
||||||
|
|
||||||
|
public static final PluginDescriptor DESCRIPTOR = new PluginDescriptor(PLUGIN_ID, PLUGIN_TYPE);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
DESCRIPTOR.setVersion(new Semver("1.0.0"));
|
DESCRIPTOR.setVersion(new Semver("1.0.0"));
|
||||||
DESCRIPTOR.setDescription("Manage the notification from Geoportal engine");
|
DESCRIPTOR.setDescription("Manage the notification from Geoportal engine");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inits the.
|
||||||
|
*
|
||||||
|
* @return the initialization report
|
||||||
|
* @throws InitializationException the initialization exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public InitializationReport init() throws InitializationException {
|
||||||
|
log.debug("Called init");
|
||||||
|
InitializationReport report = null;
|
||||||
|
try {
|
||||||
|
// Creating all listeners
|
||||||
|
EventListener<ItemObserved<Project>> listenerCreated = new EventListener<ItemObserved<Project>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updated(ItemObserved<Project> observerd) {
|
||||||
|
log.info("listenerCreated fired on item: {} " + observerd);
|
||||||
|
|
||||||
|
boolean subscribed = checkIfSubscribedEvent(observerd);
|
||||||
|
|
||||||
|
if (subscribed) {
|
||||||
|
doAction(observerd);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
EventListener<ItemObserved<Project>> listenerUpdated = new EventListener<ItemObserved<Project>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updated(ItemObserved<Project> observerd) {
|
||||||
|
log.info("listenerUpdated fired on item: {} " + observerd);
|
||||||
|
boolean subscribed = checkIfSubscribedEvent(observerd);
|
||||||
|
|
||||||
|
if (subscribed) {
|
||||||
|
doAction(observerd);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
EventListener<ItemObserved<Project>> listenerDeleted = new EventListener<ItemObserved<Project>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updated(ItemObserved<Project> observerd) {
|
||||||
|
log.info("listenerDeleted fired on item: {} " + observerd);
|
||||||
|
boolean subscribed = checkIfSubscribedEvent(observerd);
|
||||||
|
|
||||||
|
if (subscribed) {
|
||||||
|
doAction(observerd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
EventListener<ItemObserved<Project>> listenerLCStepPerformed = new EventListener<ItemObserved<Project>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updated(ItemObserved<Project> observerd) {
|
||||||
|
log.info("listenerLCStepPerformed fired on item: {} " + observerd);
|
||||||
|
boolean subscribed = checkIfSubscribedEvent(observerd);
|
||||||
|
|
||||||
|
if (subscribed) {
|
||||||
|
doAction(observerd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Subscribing all events
|
||||||
|
EventManager eventMngInst = EventManager.getInstance();
|
||||||
|
eventMngInst.subscribe(Event.PROJECT_CREATED, listenerCreated);
|
||||||
|
eventMngInst.subscribe(Event.PROJECT_UPDATED, listenerUpdated);
|
||||||
|
eventMngInst.subscribe(Event.PROJECT_DELETED, listenerDeleted);
|
||||||
|
eventMngInst.subscribe(Event.LIFECYCLE_STEP_PERFORMED, listenerLCStepPerformed);
|
||||||
|
|
||||||
|
report = new InitializationReport(Status.OK, PLUGIN_ID + " init performed");
|
||||||
|
} catch (Exception e) {
|
||||||
|
InitializationException exc = new InitializationException("Unable to initialize " + DESCRIPTOR.getId(), e);
|
||||||
|
log.error("init error: {} ", exc);
|
||||||
|
throw exc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return report;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the descriptor.
|
||||||
|
*
|
||||||
|
* @return the descriptor
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public PluginDescriptor getDescriptor() {
|
public PluginDescriptor getDescriptor() {
|
||||||
|
|
||||||
/*
|
|
||||||
* Should basically perform something like curl --location --request POST
|
|
||||||
* 'https://api.dev.d4science.org/social-networking-library-ws/rest/2/
|
|
||||||
* notifications/catalogue' \ --header 'Content-Type: application/json' \
|
|
||||||
* --header 'Authorization: Bearer
|
|
||||||
* eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSSklZNEpoNF9qdDdvNmREY0NlUDFfS1l0akcxVExXVW9oMkQ2Tzk1bFNBIn0
|
|
||||||
* .
|
|
||||||
* eyJleHAiOjE2NTEyMzY2MzgsImlhdCI6MTY1MTIzNjMzOCwiYXV0aF90aW1lIjoxNjUxMjM2MzM0LCJqdGkiOiI5OGE5NjliMy04N2EzLTRiZWYtOWQ1Yi0yYTUwMmM5YWNmZTEiLCJpc3MiOiJodHRwczovL2FjY291bnRzLmRldi5kNHNjaWVuY2Uub3JnL2F1dGgvcmVhbG1zL2Q0c2NpZW5jZSIsImF1ZCI6IiUyRmdjdWJlJTJGZGV2c2VjJTJGZGV2VlJFIiwic3ViIjoiNmE4MmY1ODctYzgwZS00OWUzLTg4YzYtYzExN2U5ZDhkM2Y3IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibmV4dC5kNHNjaWVuY2Uub3JnIiwic2Vzc2lvbl9zdGF0ZSI6IjA2NzQ2ZDNkLTExNjYtNGVjMC1hZWZmLTBiY2Q2YTEzMTI0MiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiLyoiXSwicmVzb3VyY2VfYWNjZXNzIjp7ImNvbmR1Y3Rvci1zZXJ2ZXIiOnsicm9sZXMiOlsiY29uZHVjdG9yLW1hbmFnZXIiXX0sIiUyRmdjdWJlJTJGZGV2c2VjJTJGZGV2VlJFIjp7InJvbGVzIjpbIkRhdGEtTWFuYWdlciIsIlZSRS1NYW5hZ2VyIiwiTWVtYmVyIl19fSwiYXV0aG9yaXphdGlvbiI6eyJwZXJtaXNzaW9ucyI6W3sicnNpZCI6IjU3Mjg1NTEwLTM5MzktNGRlNy04ZmMxLWUzYTlkM2NjZTI4MSIsInJzbmFtZSI6IkRlZmF1bHQgUmVzb3VyY2UifV19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6Ik1hc3NpbWlsaWFuIEFzc2FudGUiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJtYXNzaW1pbGlhbm8uYXNzYW50ZSIsImdpdmVuX25hbWUiOiJNYXNzaW1pbGlhbiIsImxvY2FsZSI6ImVuIiwiZmFtaWx5X25hbWUiOiJBc3NhbnRlIiwiZW1haWwiOiJtYXNzaW1pbGlhbm8uYXNzYW50ZUBpc3RpLmNuci5pdCJ9
|
|
||||||
* .
|
|
||||||
* b7TBRgsW0__3kl2H_ljcL7fSI9I1QaIqQq0Y7S90bWHtkRvmPkPyzWuGq9hhyN1kRg52Ue_3tEEDEkGgtceBEoZ0RAbpppkum7AJvjX6tKHF79k7wpnbxl7ED65VZFk0EazfC2w_n0WvPHQsb67zdwFeZk97G0pbjsVxYUBrhmnEMtXNzmAWaC0cc_
|
|
||||||
* -
|
|
||||||
* DriE5BBn3DjuWnaxXDxp3DB74YZoJmYR9HYN94c7Y0IV1XZxGFXLZ8V7UTfcJrGqulhF7HU79jd8hccZniam3NEfTZV
|
|
||||||
* -knJ4uEnupRHfMLBhnn1MGzxYFPN1xPIPgwiLSvRef7lK2sjI_bi6GAcT0sg5zwA' \
|
|
||||||
* --data-raw ' { "idsToNotify" : ["leonardo.candela", "luca.frosini"], "itemId"
|
|
||||||
* : "Conversational search dataset with labels", "notifyText" :
|
|
||||||
* "published the test item '\''Conversational search dataset with labels'\''",
|
|
||||||
* "itemURL" :
|
|
||||||
* "https://data.d4science.org/ctlg/ResourceCatalogue/conversational_dataset_with_labels",
|
|
||||||
* "idsAsGroup" : false, "type" : "ITEM_PUBLISHED" }
|
|
||||||
*/
|
|
||||||
|
|
||||||
return DESCRIPTOR;
|
return DESCRIPTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inits the in context.
|
||||||
|
*
|
||||||
|
* @return the initialization report
|
||||||
|
* @throws InitializationException the initialization exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Synchronized
|
||||||
|
public InitializationReport initInContext() throws InitializationException {
|
||||||
|
InitializationReport report = new InitializationReport();
|
||||||
|
try {
|
||||||
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
if (getNotificationBindingMapPerContext() == null) {
|
||||||
|
log.info("Initializing in " + context);
|
||||||
|
notificationEventsBindingMap.put(context, new NotificationEventsSubscribedConfig());
|
||||||
|
}
|
||||||
|
report.setStatus(Report.Status.OK);
|
||||||
|
report.putMessage("Initialized " + DESCRIPTOR.getId() + " in the " + context);
|
||||||
|
} catch (Exception e) {
|
||||||
|
InitializationException exc = new InitializationException("Unable to initialize " + DESCRIPTOR.getId(), e);
|
||||||
|
log.error("initInContext error: {} ", exc);
|
||||||
|
throw exc;
|
||||||
|
}
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if subscribed event.
|
||||||
|
*
|
||||||
|
* @param observerd the observerd
|
||||||
|
* @return true, if successful
|
||||||
|
*/
|
||||||
|
public boolean checkIfSubscribedEvent(ItemObserved<Project> observerd) {
|
||||||
|
log.info("Checking if {} is an subscribed event", observerd.getEvent());
|
||||||
|
try {
|
||||||
|
NotificationEventsSubscribedConfig eventsSub = readNotificationsSubscribedFromConfigurationInTheUCD(
|
||||||
|
observerd.getUseCaseDescriptor());
|
||||||
|
|
||||||
|
List<SubscribeNotificationEvent> listEvents = eventsSub.getListNotificationEventSubscribed();
|
||||||
|
log.info("List events is {}", listEvents);
|
||||||
|
if (listEvents.contains(observerd.getEvent())) {
|
||||||
|
log.info("the event {} is subscribed from config ", observerd.getEvent());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
log.info("the event {} is not subscribed from config ", observerd.getEvent());
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Exception, Error on checking subscribed events", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Map<String, NotificationEventsSubscribedConfig> notificationEventsBindingMap = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the notification binding map per context.
|
||||||
|
*
|
||||||
|
* @return the notification binding map per context
|
||||||
|
*/
|
||||||
|
protected NotificationEventsSubscribedConfig getNotificationBindingMapPerContext() {
|
||||||
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
log.debug("Getting {} from cache map for context {}", NotificationsPlugin.PLUGIN_ID, context);
|
||||||
|
if (notificationEventsBindingMap == null)
|
||||||
|
notificationEventsBindingMap = new LinkedHashMap<String, NotificationEventsSubscribedConfig>();
|
||||||
|
|
||||||
|
return notificationEventsBindingMap.get(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read notifications subscribed from configuration in the UCD.
|
||||||
|
*
|
||||||
|
* @param useCaseDescriptor the use case descriptor
|
||||||
|
* @return the notification events subscribed config
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public NotificationEventsSubscribedConfig readNotificationsSubscribedFromConfigurationInTheUCD(
|
||||||
|
UseCaseDescriptor useCaseDescriptor) throws Exception {
|
||||||
|
|
||||||
|
log.debug("Reading subscribed events from UCD");
|
||||||
|
|
||||||
|
NotificationEventsSubscribedConfig eventsSubscrInTheUCD = new NotificationEventsSubscribedConfig();
|
||||||
|
|
||||||
|
if (useCaseDescriptor == null)
|
||||||
|
throw new Exception("Error reading UCD null found");
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
|
||||||
|
eventsSubscrInTheUCD = getNotificationBindingMapPerContext();
|
||||||
|
|
||||||
|
List<SubscribeNotificationEvent> listNotificationEventsSubscribedPerUCD = new ArrayList<SubscribeNotificationEvent>();
|
||||||
|
if (eventsSubscrInTheUCD == null || listNotificationEventsSubscribedPerUCD.isEmpty()) {
|
||||||
|
|
||||||
|
Document profileConfiguration = getConfigurationFromProfile(useCaseDescriptor).getConfiguration();
|
||||||
|
log.debug("UseCaseDescriptor Configuration is {} ", profileConfiguration);
|
||||||
|
// JSONPathWrapper schemaNavigator = new
|
||||||
|
// JSONPathWrapper(useCaseDescriptor.getSchema().toJson());
|
||||||
|
|
||||||
|
for (Object fsConfigObj : profileConfiguration.get(SUBSCRIBE_NOTIFICATIONS_CONFIG, List.class)) {
|
||||||
|
log.debug("Managing {} ", fsConfigObj);
|
||||||
|
SubscribeNotificationEvent fsConfig = Serialization.read(fsConfigObj.toString(),
|
||||||
|
SubscribeNotificationEvent.class);
|
||||||
|
log.debug("Converted config {}", fsConfig);
|
||||||
|
String theEventSubsribed = fsConfig.getEvent();
|
||||||
|
if (theEventSubsribed == null || theEventSubsribed.isEmpty())
|
||||||
|
throw new MaterializationException(
|
||||||
|
"Invalid Field Definition path in configuration [NO MATCH] : " + fsConfig.getEvent());
|
||||||
|
|
||||||
|
SubscribeNotificationEvent event = Serialization.convert(theEventSubsribed,
|
||||||
|
SubscribeNotificationEvent.class);
|
||||||
|
log.debug("Added event {} to list ", event);
|
||||||
|
listNotificationEventsSubscribedPerUCD.add(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventsSubscrInTheUCD = new NotificationEventsSubscribedConfig();
|
||||||
|
eventsSubscrInTheUCD.setContext(context);
|
||||||
|
eventsSubscrInTheUCD.setListNotificationEventSubscribed(listNotificationEventsSubscribedPerUCD);
|
||||||
|
notificationEventsBindingMap.put(context, eventsSubscrInTheUCD);
|
||||||
|
|
||||||
|
log.info("Events subscribed read from config {} ", eventsSubscrInTheUCD);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Unable to read configuration for "+NotificationsPlugin.PLUGIN_ID, e);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
log.error("Exception, Unable to read configuration ", t);
|
||||||
|
}
|
||||||
|
|
||||||
|
return eventsSubscrInTheUCD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shutdown.
|
||||||
|
*
|
||||||
|
* @throws ShutDownException the shut down exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void shutdown() throws ShutDownException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do action.
|
||||||
|
*
|
||||||
|
* @param itemObserved the item observed
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void doAction(ItemObserved<Project> itemObserved) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package org.gcube.application.cms.notifications.config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import org.gcube.com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class NotificationFor {
|
||||||
|
|
||||||
|
List<String> roles;
|
||||||
|
@JsonProperty("when")
|
||||||
|
List<NotificationWhen> when;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.gcube.application.cms.notifications.config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new notification when.
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class NotificationWhen {
|
||||||
|
|
||||||
|
List<String> target_phase;
|
||||||
|
Notify notify;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package org.gcube.application.cms.notifications.config;
|
||||||
|
|
||||||
|
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new notify.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
{
|
||||||
|
"send_personal_nofitication": false,
|
||||||
|
"send_email": true,
|
||||||
|
"send_pdf_document": false,
|
||||||
|
"post_on_vre": false,
|
||||||
|
"message": "ID_MESSAGE_1"
|
||||||
|
}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class Notify {
|
||||||
|
|
||||||
|
Boolean send_personal_nofitication;
|
||||||
|
Boolean send_email;
|
||||||
|
Boolean send_pdf_document;
|
||||||
|
Boolean post_on_vre;
|
||||||
|
String message;
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
package org.gcube.application.cms.notifications.config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Jan 30, 2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new subscribe notification config.
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* "event": "EVENT_NAME",
|
||||||
|
* "for": [
|
||||||
|
* {
|
||||||
|
* "roles": [
|
||||||
|
* "USER_ROLE"
|
||||||
|
* ],
|
||||||
|
* "when": [
|
||||||
|
* {
|
||||||
|
* "target_phase": [
|
||||||
|
* "TARGET_PHASE"
|
||||||
|
* ],
|
||||||
|
* "notify": {
|
||||||
|
* "send_personal_nofitication": "true/false",
|
||||||
|
* "send_email": "true/false",
|
||||||
|
* "send_pdf_document": "true/false",
|
||||||
|
* "post_on_vre": "true/false",
|
||||||
|
* "message": "ID_MESSAGE_1"
|
||||||
|
* }
|
||||||
|
* },
|
||||||
|
* {
|
||||||
|
* "target_phase": [
|
||||||
|
* "TARGET_PHASE"
|
||||||
|
* ],
|
||||||
|
* "notify": {
|
||||||
|
* "send_personal_nofitication": "true/false",
|
||||||
|
* "send_email": "true/false",
|
||||||
|
* "send_pdf_document": "true/false",
|
||||||
|
* "post_on_vre": "true/false",
|
||||||
|
* "message": "ID_MESSAGE_2"
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class SubscribeNotificationEvent {
|
||||||
|
|
||||||
|
String event;
|
||||||
|
List<NotificationFor> notificationFor;
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
/resources/
|
|
@ -0,0 +1,173 @@
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.application.cms.notifications.NotificationEventsSubscribedConfig;
|
||||||
|
import org.gcube.application.cms.notifications.NotificationsPlugin;
|
||||||
|
import org.gcube.application.cms.notifications.config.NotificationFor;
|
||||||
|
import org.gcube.application.cms.notifications.config.NotificationWhen;
|
||||||
|
import org.gcube.application.cms.notifications.config.Notify;
|
||||||
|
import org.gcube.application.cms.notifications.config.SubscribeNotificationEvent;
|
||||||
|
import org.gcube.application.cms.plugins.faults.InitializationException;
|
||||||
|
import org.gcube.application.cms.serialization.Serialization;
|
||||||
|
import org.gcube.application.cms.tests.TestProfiles;
|
||||||
|
import org.gcube.application.cms.tests.plugins.BasicPluginTest;
|
||||||
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
|
||||||
|
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|
||||||
|
public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
|
|
||||||
|
// @Test
|
||||||
|
public void checkPlugin() {
|
||||||
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
NotificationsPlugin plugin = (NotificationsPlugin) plugins.get(NotificationsPlugin.DESCRIPTOR.getId());
|
||||||
|
|
||||||
|
try {
|
||||||
|
plugin.init();
|
||||||
|
} catch (InitializationException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
plugin.initInContext();
|
||||||
|
} catch (InitializationException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Plugin check: " + plugin);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void checkPluginConfig() {
|
||||||
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
NotificationsPlugin plugin = (NotificationsPlugin) plugins.get(NotificationsPlugin.DESCRIPTOR.getId());
|
||||||
|
UseCaseDescriptor descriptor = TestProfiles.profiles.get("profiledConcessioni");
|
||||||
|
|
||||||
|
try {
|
||||||
|
plugin.init();
|
||||||
|
} catch (InitializationException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
plugin.initInContext();
|
||||||
|
} catch (InitializationException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationEventsSubscribedConfig notificationEventsSubs;
|
||||||
|
try {
|
||||||
|
notificationEventsSubs = plugin.readNotificationsSubscribedFromConfigurationInTheUCD(descriptor);
|
||||||
|
System.out
|
||||||
|
.println(NotificationEventsSubscribedConfig.class.getSimpleName() + ": " + notificationEventsSubs);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//@Test
|
||||||
|
public void checkDeserialize() {
|
||||||
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
|
||||||
|
SubscribeNotificationEvent sne = new SubscribeNotificationEvent();
|
||||||
|
sne.setEvent("LIFECYCLE_STEP_PERFORMED");
|
||||||
|
|
||||||
|
List<NotificationFor> listNotificationFor = new ArrayList<NotificationFor>();
|
||||||
|
|
||||||
|
NotificationFor notificatioFor = new NotificationFor();
|
||||||
|
notificatioFor.setRoles(Arrays.asList("Data-Manager"));
|
||||||
|
|
||||||
|
List<NotificationWhen> listWhen = new ArrayList<NotificationWhen>();
|
||||||
|
NotificationWhen notificationWhen = new NotificationWhen();
|
||||||
|
notificationWhen.setTarget_phase(Arrays.asList("Pending Approval"));
|
||||||
|
|
||||||
|
Notify notify = new Notify();
|
||||||
|
notify.setSend_personal_nofitication(false);
|
||||||
|
notify.setPost_on_vre(false);
|
||||||
|
notify.setSend_email(false);
|
||||||
|
notify.setSend_personal_nofitication(false);
|
||||||
|
notify.setMessage("message");
|
||||||
|
notificationWhen.setNotify(notify);
|
||||||
|
|
||||||
|
listWhen.add(notificationWhen);
|
||||||
|
notificatioFor.setWhen(listWhen);
|
||||||
|
|
||||||
|
listNotificationFor.add(notificatioFor);
|
||||||
|
|
||||||
|
sne.setNotificationFor(listNotificationFor);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
String serializeTOJSON = Serialization.write(sne);
|
||||||
|
System.out.println("Serialized toJSON :"+serializeTOJSON);
|
||||||
|
|
||||||
|
SubscribeNotificationEvent deserializeToJSON = Serialization.read(serializeTOJSON, SubscribeNotificationEvent.class);
|
||||||
|
System.out.println("Deserialized from JSON :"+deserializeToJSON);
|
||||||
|
|
||||||
|
//Test Notify
|
||||||
|
/*
|
||||||
|
String testNotify = " {\n"
|
||||||
|
+ " \"send_personal_nofitication\": false,\n"
|
||||||
|
+ " \"send_email\": true,\n"
|
||||||
|
+ " \"send_pdf_document\": false,\n"
|
||||||
|
+ " \"post_on_vre\": false,\n"
|
||||||
|
+ " \"message\": \"ID_MESSAGE_1\"\n"
|
||||||
|
+ " }";
|
||||||
|
|
||||||
|
System.out.println("String :"+testNotify);
|
||||||
|
Notify serialize = Serialization.read(testNotify, Notify.class);
|
||||||
|
System.out.println("Ser from JSON :"+serialize);
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Test NotificationFor
|
||||||
|
/*
|
||||||
|
String testNotificationFor = "{ \"when\": [\n"
|
||||||
|
+ " {\n"
|
||||||
|
+ " \"target_phase\": [\n"
|
||||||
|
+ " \"Rejected\"\n"
|
||||||
|
+ " ],\n"
|
||||||
|
+ " \"notify\": {\n"
|
||||||
|
+ " \"send_personal_nofitication\": false,\n"
|
||||||
|
+ " \"send_email\": true,\n"
|
||||||
|
+ " \"send_pdf_document\": false,\n"
|
||||||
|
+ " \"post_on_vre\": false,\n"
|
||||||
|
+ " \"message\": \"The project ${project_name} has just been rejected. You are kindly requested to review it\"\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " {\n"
|
||||||
|
+ " \"target_phase\": [\n"
|
||||||
|
+ " \"Published\"\n"
|
||||||
|
+ " ],\n"
|
||||||
|
+ " \"notify\": {\n"
|
||||||
|
+ " \"send_personal_nofitication\": false,\n"
|
||||||
|
+ " \"send_email\": true,\n"
|
||||||
|
+ " \"send_pdf_document\": true,\n"
|
||||||
|
+ " \"post_on_vre\": true,\n"
|
||||||
|
+ " \"message\": \"The project ${project_name} has just been published. See it at @link\"\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ " ]}";
|
||||||
|
|
||||||
|
System.out.println("String :"+testNotificationFor);
|
||||||
|
NotificationFor serializeNotificationWhen = Serialization.read(testNotificationFor, NotificationFor.class);
|
||||||
|
System.out.println("Ser from JSON :"+serializeNotificationWhen);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue