in progress notification plugin
This commit is contained in:
parent
b422fc8b56
commit
b502ad0c2d
|
@ -16,6 +16,76 @@ This module is expected to contain plugin definitions for the generations of not
|
||||||
## Documentation
|
## Documentation
|
||||||
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
|
This plugin requires a configuration of type:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"subscribeNotifications": [
|
||||||
|
{
|
||||||
|
"event": "EVENT_NAME",
|
||||||
|
"notificationFor": [
|
||||||
|
{
|
||||||
|
"roles": [
|
||||||
|
"USER_ROLE"
|
||||||
|
],
|
||||||
|
"when": [
|
||||||
|
{
|
||||||
|
"target_phase": [
|
||||||
|
"TARGET_PHASE"
|
||||||
|
],
|
||||||
|
"last_invoked_step": LAST_INVOKED_STEP_1,
|
||||||
|
"notify": [
|
||||||
|
{
|
||||||
|
"type": "NOTIFICATION_TYPE",
|
||||||
|
"send": "true/false",
|
||||||
|
"placeholder_msg": "PLACEHOLDER_MESSAGE_1",
|
||||||
|
"export_as_pdf": {
|
||||||
|
"placeholder_msg": "Export as PDF placeholder",
|
||||||
|
"export": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target_phase": [
|
||||||
|
"TARGET_PHASE"
|
||||||
|
],
|
||||||
|
"last_invoked_step": LAST_INVOKED_STEP_2,
|
||||||
|
"notify": [
|
||||||
|
{
|
||||||
|
"type": "NOTIFICATION_TYPE",
|
||||||
|
"send": "true/false",
|
||||||
|
"placeholder_msg": "PLACEHOLDER_MESSAGE_2",
|
||||||
|
"export_as_pdf": {
|
||||||
|
"placeholder_msg": "Export as PDF placeholder",
|
||||||
|
"export": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled":true/false,
|
||||||
|
"link_to_notifications_messages" (mandatory): "link to file containg the messages as properties like PLACEHOLDER_MESSAGE_{N} = value"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Where:
|
||||||
|
|
||||||
|
* `enabled`: (optional) can be true/false. Default is true. It enables or not the plugin.
|
||||||
|
* `link_to_notifications_messages`: it is the URL to Notifications Messages file with placeholder values. A property file like PLACEHOLDER_MESSAGE_{N} = value
|
||||||
|
|
||||||
|
and
|
||||||
|
|
||||||
|
* `EVENT_NAME` (mandatory) can be: `PROJECT_CREATED`, `PROJECT_UPDATED`, `PROJECT_DELETED`, `LIFECYCLE_STEP_PERFORMED`.
|
||||||
|
* `USER_ROLE` (mandatory) can be: `Data-Manager`, `Data-Editor`, `Member"`, `Item_Creator`, `Any`;
|
||||||
|
* `TARGET_PHASE` (mandatory) can be: `DRAFT`, `Pending Approval`, `Published`, `Any`;
|
||||||
|
* `LAST_INVOKED_STEP` (optional) can be: `SUBMIT-FOR-REVIEW`, `APPROVE-SUBMITTED`, `REJECT-DRAFT`, `UNPUBLISH`;
|
||||||
|
* `NOTIFICATION_TYPE` (mandatory) can be: `USER_POST`, `VRE_POST`, `EMAIL`;
|
||||||
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -14,4 +14,5 @@ public class NotificationEventsSubscribedConfig {
|
||||||
UseCaseDescriptor ucd;
|
UseCaseDescriptor ucd;
|
||||||
List<SubscribeNotificationEvent> listNotificationEventSubscribed;
|
List<SubscribeNotificationEvent> listNotificationEventSubscribed;
|
||||||
String linkToNotificationsMessages;
|
String linkToNotificationsMessages;
|
||||||
|
boolean enabled = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -316,7 +316,9 @@ public class NotificationsPlugin extends AbstractPlugin implements EventListener
|
||||||
notificationMapPerContext
|
notificationMapPerContext
|
||||||
.setListNotificationEventSubscribed(listNotificationEventsSubscribedPerUCD);
|
.setListNotificationEventSubscribed(listNotificationEventsSubscribedPerUCD);
|
||||||
String linkToMessages = profileConfiguration.get("link_to_notifications_messages", String.class);
|
String linkToMessages = profileConfiguration.get("link_to_notifications_messages", String.class);
|
||||||
|
Boolean enabledNotifications = profileConfiguration.get("enabled", Boolean.class);
|
||||||
notificationMapPerContext.setLinkToNotificationsMessages(linkToMessages);
|
notificationMapPerContext.setLinkToNotificationsMessages(linkToMessages);
|
||||||
|
notificationMapPerContext.setEnabled(enabledNotifications);
|
||||||
}
|
}
|
||||||
setNotificationBindingMapPerContext(context, useCaseDescriptor, notificationMapPerContext);
|
setNotificationBindingMapPerContext(context, useCaseDescriptor, notificationMapPerContext);
|
||||||
|
|
||||||
|
@ -352,7 +354,7 @@ public class NotificationsPlugin extends AbstractPlugin implements EventListener
|
||||||
@Override
|
@Override
|
||||||
public void doAction(ItemObserved<Project> itemObserved) {
|
public void doAction(ItemObserved<Project> itemObserved) {
|
||||||
log.debug("doAction called...");
|
log.debug("doAction called...");
|
||||||
|
|
||||||
boolean isSubscribedEvent = checkIfSubscribedEvent(itemObserved);
|
boolean isSubscribedEvent = checkIfSubscribedEvent(itemObserved);
|
||||||
|
|
||||||
log.info("Is the event {} subscribed in notification plugin configured in the UCD: {} ",
|
log.info("Is the event {} subscribed in notification plugin configured in the UCD: {} ",
|
||||||
|
@ -366,35 +368,34 @@ public class NotificationsPlugin extends AbstractPlugin implements EventListener
|
||||||
NotificationEventsSubscribedConfig subscribedConfig = notificationMapPerContext
|
NotificationEventsSubscribedConfig subscribedConfig = notificationMapPerContext
|
||||||
.get(itemObserved.getUCD_Id());
|
.get(itemObserved.getUCD_Id());
|
||||||
|
|
||||||
String linkToFileWithMessages = subscribedConfig.getLinkToNotificationsMessages();
|
boolean subscribeNotificationsEnabled = subscribedConfig.isEnabled();
|
||||||
List<SubscribeNotificationEvent> list = subscribedConfig.getListNotificationEventSubscribed();
|
|
||||||
|
|
||||||
//Filtering list of SubscribeNotificationEvent for itemObserved Event
|
log.info("subscribeNotifications enabled: {}", subscribeNotificationsEnabled);
|
||||||
List<SubscribeNotificationEvent> filterList = list.stream()
|
|
||||||
.filter(sne -> sne.getEvent().equals(itemObserved.getEvent())).collect(Collectors.toList());
|
if (subscribeNotificationsEnabled) {
|
||||||
|
|
||||||
|
String linkToFileWithMessages = subscribedConfig.getLinkToNotificationsMessages();
|
||||||
|
List<SubscribeNotificationEvent> list = subscribedConfig.getListNotificationEventSubscribed();
|
||||||
|
|
||||||
|
// Filtering list of SubscribeNotificationEvent for itemObserved Event
|
||||||
|
List<SubscribeNotificationEvent> filterList = list.stream()
|
||||||
|
.filter(sne -> sne.getEvent().equals(itemObserved.getEvent())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
log.debug(linkToFileWithMessages);
|
||||||
|
NMessagesPlaceholdersSubstitutorUtil nMPlaceholdersSUtil = null;
|
||||||
|
try {
|
||||||
|
nMPlaceholdersSUtil = new NMessagesPlaceholdersSubstitutorUtil(linkToFileWithMessages);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Error instancing the {}. Please check the URL {}. Returning!!",
|
||||||
|
NMessagesPlaceholdersSubstitutorUtil.class.getSimpleName(), linkToFileWithMessages);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ManageDoActionNotification mdoact = new ManageDoActionNotification(itemObserved, nMPlaceholdersSUtil,
|
||||||
|
filterList);
|
||||||
|
mdoact.manage();
|
||||||
|
|
||||||
log.debug(linkToFileWithMessages);
|
|
||||||
NMessagesPlaceholdersSubstitutorUtil nMPlaceholdersSUtil = null;
|
|
||||||
try {
|
|
||||||
nMPlaceholdersSUtil = new NMessagesPlaceholdersSubstitutorUtil(linkToFileWithMessages);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error("Error instancing the {}. Please check the URL {}. Returning!!", NMessagesPlaceholdersSubstitutorUtil.class.getSimpleName(), linkToFileWithMessages);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ManageDoActionNotification mdoact = new ManageDoActionNotification(itemObserved, nMPlaceholdersSUtil, filterList);
|
|
||||||
mdoact.manage();
|
|
||||||
|
|
||||||
// for (SubscribeNotificationEvent subscribeNotificationEvent : filterList) {
|
|
||||||
// List<NotificationFor> listNotificationFor = subscribeNotificationEvent.getNotificationFor();
|
|
||||||
//
|
|
||||||
// UserUtils.getCurrent().getRoles();
|
|
||||||
//
|
|
||||||
// for (NotificationFor notificationFor : listNotificationFor) {
|
|
||||||
// notificationFor.getRoles();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,18 +6,6 @@ import org.gcube.com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new notify.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
{
|
|
||||||
"type": "NOTIFICATION_TYPE",
|
|
||||||
"send": "true/false",
|
|
||||||
"placeholder_msg": "PLACEHOLDER_MESSAGE_1",
|
|
||||||
"export_as_pdf": "ExportAsPDF"
|
|
||||||
}
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Data
|
@Data
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class Notify {
|
public class Notify {
|
||||||
|
|
|
@ -7,62 +7,6 @@ import org.gcube.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
|
||||||
*
|
|
||||||
* Jan 30, 2024
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new subscribe notification config.
|
|
||||||
*
|
|
||||||
{
|
|
||||||
"subscribeNotifications": [
|
|
||||||
{
|
|
||||||
"event": "EVENT_NAME",
|
|
||||||
"notificationFor": [
|
|
||||||
{
|
|
||||||
"roles": [
|
|
||||||
"USER_ROLE"
|
|
||||||
],
|
|
||||||
"when": [
|
|
||||||
{
|
|
||||||
"target_phase": [
|
|
||||||
"TARGET_PHASE"
|
|
||||||
],
|
|
||||||
"notify": [
|
|
||||||
{
|
|
||||||
"type": "NOTIFICATION_TYPE",
|
|
||||||
"send": "true/false",
|
|
||||||
"attach_pdf_document": "true/false",
|
|
||||||
"message": "PLACEHOLDER_MESSAGE_1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"target_phase": [
|
|
||||||
"TARGET_PHASE"
|
|
||||||
],
|
|
||||||
"notify": [
|
|
||||||
{
|
|
||||||
"type": "NOTIFICATION_TYPE",
|
|
||||||
"send": "true/false",
|
|
||||||
"attach_pdf_document": "true/false",
|
|
||||||
"message": "PLACEHOLDER_MESSAGE_2"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"link_to_messages": "link to file containing the messages as properties like ID_MESSAGE_{N} = value"
|
|
||||||
}
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class SubscribeNotificationEvent {
|
public class SubscribeNotificationEvent {
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package org.gcube.application.cms.notifications.config.serviceaccount;
|
||||||
|
|
||||||
|
import java.util.AbstractMap.SimpleEntry;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import javax.ws.rs.InternalServerErrorException;
|
||||||
|
|
||||||
|
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
|
||||||
|
import org.gcube.common.authorization.utils.secret.JWTSecret;
|
||||||
|
import org.gcube.common.authorization.utils.secret.Secret;
|
||||||
|
import org.gcube.common.keycloak.KeycloakClientFactory;
|
||||||
|
import org.gcube.common.keycloak.model.TokenResponse;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class GeoportalServiceAccount {
|
||||||
|
|
||||||
|
//geoportal service account config property file
|
||||||
|
protected static final String CLIENT_ID_PROPERTY_NAME = "clientId";
|
||||||
|
|
||||||
|
private static String clientId = "geoportal";
|
||||||
|
|
||||||
|
private static Entry<String, String> getClientIdAndClientSecret(String context) {
|
||||||
|
try {
|
||||||
|
IAMClientCredentials credentials = IAMClientCredentialsReader.getCredentials();
|
||||||
|
|
||||||
|
clientId = credentials.getClientId()==null?clientId:credentials.getClientId();
|
||||||
|
String clientSecret = credentials.getClientSecret();
|
||||||
|
SimpleEntry<String, String> entry = new SimpleEntry<String, String>(clientId, clientSecret);
|
||||||
|
return entry;
|
||||||
|
} catch(Exception e) {
|
||||||
|
throw new InternalServerErrorException(
|
||||||
|
"Unable to retrieve Application Token for context " + SecretManagerProvider.instance.get().getContext(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TokenResponse getJWTAccessToken() throws Exception {
|
||||||
|
String context = SecretManagerProvider.instance.get().getContext();
|
||||||
|
Entry<String,String> entry = getClientIdAndClientSecret(context);
|
||||||
|
TokenResponse tr = KeycloakClientFactory.newInstance().queryUMAToken(context, entry.getKey(), entry.getValue(), context, null);
|
||||||
|
return tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Secret getGeoportalSecret() throws Exception {
|
||||||
|
TokenResponse tr = getJWTAccessToken();
|
||||||
|
Secret secret = new JWTSecret(tr.getAccessToken());
|
||||||
|
return secret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package org.gcube.application.cms.notifications.config.serviceaccount;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class IAMClientCredentials.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Sep 23, 2021
|
||||||
|
*/
|
||||||
|
public class IAMClientCredentials implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 7242909633989611318L;
|
||||||
|
private String clientId;
|
||||||
|
private String clientSecret;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new IAM client credentials.
|
||||||
|
*/
|
||||||
|
public IAMClientCredentials() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a new IAM client credentials.
|
||||||
|
*
|
||||||
|
* @param clientId the client id
|
||||||
|
* @param clientSecret the client secret
|
||||||
|
*/
|
||||||
|
public IAMClientCredentials(String clientId, String clientSecret) {
|
||||||
|
this.clientId = clientId;
|
||||||
|
this.clientSecret = clientSecret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the client id.
|
||||||
|
*
|
||||||
|
* @return the client id
|
||||||
|
*/
|
||||||
|
public String getClientId() {
|
||||||
|
return clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the client secret.
|
||||||
|
*
|
||||||
|
* @return the client secret
|
||||||
|
*/
|
||||||
|
public String getClientSecret() {
|
||||||
|
return clientSecret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the client id.
|
||||||
|
*
|
||||||
|
* @param clientId the new client id
|
||||||
|
*/
|
||||||
|
public void setClientId(String clientId) {
|
||||||
|
this.clientId = clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the client secret.
|
||||||
|
*
|
||||||
|
* @param clientSecret the new client secret
|
||||||
|
*/
|
||||||
|
public void setClientSecret(String clientSecret) {
|
||||||
|
this.clientSecret = clientSecret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To string.
|
||||||
|
*
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("IAMClientCredentials [clientId=");
|
||||||
|
builder.append(clientId);
|
||||||
|
builder.append(", clientSecret=");
|
||||||
|
builder.append(clientSecret != null ? clientSecret.subSequence(0, 5) + "_MASKED_SECRET" : null);
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
package org.gcube.application.cms.notifications.config.serviceaccount;
|
||||||
|
|
||||||
|
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
|
||||||
|
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
|
||||||
|
import org.gcube.common.encryption.StringEncrypter;
|
||||||
|
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||||
|
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
||||||
|
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||||
|
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class GNABaseMapsResourceReader.
|
||||||
|
*
|
||||||
|
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||||
|
*
|
||||||
|
* Sep 23, 2021
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class IAMClientCredentialsReader {
|
||||||
|
|
||||||
|
private static final String SE_PROFILE_NAME = "geoportal";
|
||||||
|
private static final String SE_CATEGORY_NAME = "SystemClient";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the credentials.
|
||||||
|
*
|
||||||
|
* @return the credentials
|
||||||
|
* @throws Exception the exception
|
||||||
|
*/
|
||||||
|
public static IAMClientCredentials getCredentials() throws Exception {
|
||||||
|
|
||||||
|
String currentContext = SecretManagerProvider.instance.get().getContext();
|
||||||
|
|
||||||
|
log.info("Searching SE in the scope: " + currentContext + " with profile name: " + SE_PROFILE_NAME
|
||||||
|
+ " and category name: " + SE_CATEGORY_NAME);
|
||||||
|
|
||||||
|
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
||||||
|
query.addCondition("$resource/Profile/Name/text() eq '" + SE_PROFILE_NAME + "'");
|
||||||
|
query.addCondition("$resource/Profile/Category/text() eq '" + SE_CATEGORY_NAME + "'");
|
||||||
|
|
||||||
|
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
||||||
|
List<ServiceEndpoint> resources = client.submit(query);
|
||||||
|
|
||||||
|
if (resources.size() > 0)
|
||||||
|
log.info("The query returned " + resources.size() + " ServiceEndpoint/s");
|
||||||
|
else
|
||||||
|
throw new RuntimeException("ServiceEndpoint not found. Searching for profile name '" + SE_PROFILE_NAME
|
||||||
|
+ "' and category name '" + SE_CATEGORY_NAME + "' in the scope: " + currentContext);
|
||||||
|
|
||||||
|
ServiceEndpoint se = resources.get(0);
|
||||||
|
Collection<AccessPoint> theAccessPoints = se.profile().accessPoints().asCollection();
|
||||||
|
String clientId = null;
|
||||||
|
String secredPwd = null;
|
||||||
|
for (AccessPoint accessPoint : theAccessPoints) {
|
||||||
|
clientId = accessPoint.username();
|
||||||
|
secredPwd = accessPoint.password();
|
||||||
|
log.debug("Found clientId: " + clientId + " and encrypted secret: " + secredPwd);
|
||||||
|
// decrypting the pwd
|
||||||
|
try {
|
||||||
|
if (secredPwd != null) {
|
||||||
|
secredPwd = StringEncrypter.getEncrypter().decrypt(secredPwd);
|
||||||
|
log.debug("Secret decrypted is: " + secredPwd.substring(0, secredPwd.length() / 2)
|
||||||
|
+ "_MASKED_TOKEN_");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Error on decrypting the pwd: ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("Returning keycloack credentials for SE {} read from SE", SE_PROFILE_NAME);
|
||||||
|
return new IAMClientCredentials(clientId, secredPwd);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -87,7 +87,7 @@ public class ManageDoActionNotification {
|
||||||
String lastInvokedStep = lInfo.getLastInvokedStep();
|
String lastInvokedStep = lInfo.getLastInvokedStep();
|
||||||
log.debug("ItemObserved phase is: {}, lastInvokedStep is: {}", itemPhase, lastInvokedStep);
|
log.debug("ItemObserved phase is: {}, lastInvokedStep is: {}", itemPhase, lastInvokedStep);
|
||||||
|
|
||||||
//final SecretManager cm = SecretManagerProvider.instance.get();
|
// final SecretManager cm = SecretManagerProvider.instance.get();
|
||||||
|
|
||||||
for (final NotificationFor notificationFor : listNotificationFor) {
|
for (final NotificationFor notificationFor : listNotificationFor) {
|
||||||
// Filtering notifications on 'phase' and 'lastInvokedStep' according to item
|
// Filtering notifications on 'phase' and 'lastInvokedStep' according to item
|
||||||
|
@ -100,16 +100,17 @@ public class ManageDoActionNotification {
|
||||||
|
|
||||||
if (notificationsCompliantToPhase != null && notificationsCompliantToPhase.size() > 0) {
|
if (notificationsCompliantToPhase != null && notificationsCompliantToPhase.size() > 0) {
|
||||||
// GET LIST USER COMPLIANT TO ROLES
|
// GET LIST USER COMPLIANT TO ROLES
|
||||||
List<User> notifyUsers = getListUserCompliantToRoles(notificationFor, itemObserved, true);
|
List<User> notifyUsers = getListUserCompliantToRoles(notificationFor, itemObserved, false);
|
||||||
final SocialClients socialClients = new SocialClients();
|
final SocialClients socialClients = new SocialClients();
|
||||||
CatalogueEventType catalogueEventType = MappingToCatalogue.toCatalogueEventType(itemPhase, lastInvokedStep);
|
CatalogueEventType catalogueEventType = MappingToCatalogue.toCatalogueEventType(itemPhase,
|
||||||
|
lastInvokedStep);
|
||||||
|
|
||||||
if (notifyUsers.size() > 0) {
|
if (notifyUsers.size() > 0) {
|
||||||
log.info("Users compliant to role are: {}", notifyUsers.size());
|
log.info("Users compliant to role are: {}", notifyUsers.size());
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
notifyUsers.stream().forEach(u -> log.debug("notifying user: " + u));
|
notifyUsers.stream().forEach(u -> log.debug("notifying user: " + u));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
NotifyUsers mnu = new NotifyUsers(socialClients, notificationsCompliantToPhase,
|
NotifyUsers mnu = new NotifyUsers(socialClients, notificationsCompliantToPhase,
|
||||||
nMPlaceholdersS, notifyUsers, catalogueEventType);
|
nMPlaceholdersS, notifyUsers, catalogueEventType);
|
||||||
|
@ -125,8 +126,9 @@ public class ManageDoActionNotification {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<NotificationWhen> matchNotificationsAccordingItemStatus(NotificationFor notificationFor,
|
public static List<NotificationWhen> matchNotificationsAccordingItemStatus(NotificationFor notificationFor,
|
||||||
String itemPhase, String lastInvokedStep) {
|
final String itemPhase, final String lastInvokedStep) {
|
||||||
log.info("Filtering notifications according to phase: {}, lastInvokedStep: {}", itemPhase, lastInvokedStep);
|
log.info("Filtering notifications according to item status [phase: {}, lastInvokedStep: {}]", itemPhase,
|
||||||
|
lastInvokedStep);
|
||||||
|
|
||||||
List<NotificationWhen> filteredList = new ArrayList<NotificationWhen>();
|
List<NotificationWhen> filteredList = new ArrayList<NotificationWhen>();
|
||||||
|
|
||||||
|
@ -136,20 +138,29 @@ public class ManageDoActionNotification {
|
||||||
notificationWhen.getTarget_phase(), notificationWhen.getLast_invoked_step());
|
notificationWhen.getTarget_phase(), notificationWhen.getLast_invoked_step());
|
||||||
if (notificationWhen.getTarget_phase().contains(itemPhase) || notificationWhen.getTarget_phase()
|
if (notificationWhen.getTarget_phase().contains(itemPhase) || notificationWhen.getTarget_phase()
|
||||||
.contains(NotificationGenericConstants.CUSTOM_TARGET_PHASE.Any.name())) {
|
.contains(NotificationGenericConstants.CUSTOM_TARGET_PHASE.Any.name())) {
|
||||||
if (notificationWhen.getLast_invoked_step() == null) {
|
log.debug("target phase: {} - matched", itemPhase);
|
||||||
|
|
||||||
|
String lastInvokedStepConfig = notificationWhen.getLast_invoked_step().trim();
|
||||||
|
log.debug("last_invoked_step read in config is {}", lastInvokedStepConfig);
|
||||||
|
if (lastInvokedStepConfig == null) {
|
||||||
|
log.debug("last_invoked_step is null or empty - {} matched", lastInvokedStep);
|
||||||
// no filtering on lastInvokedStep
|
// no filtering on lastInvokedStep
|
||||||
filteredList.add(notificationWhen);
|
filteredList.add(notificationWhen);
|
||||||
|
}else if (lastInvokedStepConfig.contentEquals(lastInvokedStep)) {
|
||||||
} else if (notificationWhen.getLast_invoked_step().compareToIgnoreCase(lastInvokedStep) == 0) {
|
log.debug("last_invoked_step: {} - matched", lastInvokedStep);
|
||||||
// matching the lastInvokedStep
|
// matching the lastInvokedStep
|
||||||
filteredList.add(notificationWhen);
|
filteredList.add(notificationWhen);
|
||||||
|
} else {
|
||||||
|
log.debug("last_invoked_step {} - NOT matched", lastInvokedStep);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.debug("target phase: {} - NOT matched", itemPhase);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("returning filtered list with {} object {}. If 0 returned no notifications is sent", filteredList.size(),
|
log.info("returning filtered list with {} object {} (if 0 returned no notifications is sent)",
|
||||||
NotificationWhen.class.getSimpleName());
|
filteredList.size(), NotificationWhen.class.getSimpleName());
|
||||||
return filteredList;
|
return filteredList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,13 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.gcube.application.cms.notifications.config.NotificationWhen;
|
import org.gcube.application.cms.notifications.config.NotificationWhen;
|
||||||
import org.gcube.application.cms.notifications.config.Notify;
|
import org.gcube.application.cms.notifications.config.Notify;
|
||||||
|
import org.gcube.application.cms.notifications.config.serviceaccount.GeoportalServiceAccount;
|
||||||
import org.gcube.application.cms.notifications.social.SocialClients;
|
import org.gcube.application.cms.notifications.social.SocialClients;
|
||||||
import org.gcube.application.cms.notifications.substitutor.NMessagesPlaceholdersSubstitutorUtil;
|
import org.gcube.application.cms.notifications.substitutor.NMessagesPlaceholdersSubstitutorUtil;
|
||||||
import org.gcube.application.geoportal.common.model.document.accounting.User;
|
import org.gcube.application.geoportal.common.model.document.accounting.User;
|
||||||
import org.gcube.common.authorization.utils.manager.SecretManager;
|
import org.gcube.common.authorization.utils.manager.SecretManager;
|
||||||
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
|
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
|
||||||
|
import org.gcube.common.authorization.utils.secret.Secret;
|
||||||
import org.gcube.portal.databook.shared.Post;
|
import org.gcube.portal.databook.shared.Post;
|
||||||
import org.gcube.social_networking.social_networking_client_library.NotificationClient;
|
import org.gcube.social_networking.social_networking_client_library.NotificationClient;
|
||||||
import org.gcube.social_networking.socialnetworking.model.beans.PostInputBean;
|
import org.gcube.social_networking.socialnetworking.model.beans.PostInputBean;
|
||||||
|
@ -30,7 +32,8 @@ public class NotifyUsers {
|
||||||
private CatalogueEventType catalogueEventType;
|
private CatalogueEventType catalogueEventType;
|
||||||
|
|
||||||
public NotifyUsers(SocialClients socialClients, List<NotificationWhen> listWhen,
|
public NotifyUsers(SocialClients socialClients, List<NotificationWhen> listWhen,
|
||||||
NMessagesPlaceholdersSubstitutorUtil nMPlaceholdersSUtil, List<User> recipientUsers, CatalogueEventType catalogueEventType) {
|
NMessagesPlaceholdersSubstitutorUtil nMPlaceholdersSUtil, List<User> recipientUsers,
|
||||||
|
CatalogueEventType catalogueEventType) {
|
||||||
this.socialClients = socialClients;
|
this.socialClients = socialClients;
|
||||||
this.listNotificationWhen = listWhen;
|
this.listNotificationWhen = listWhen;
|
||||||
this.recipientUsers = recipientUsers;
|
this.recipientUsers = recipientUsers;
|
||||||
|
@ -38,7 +41,6 @@ public class NotifyUsers {
|
||||||
this.catalogueEventType = catalogueEventType;
|
this.catalogueEventType = catalogueEventType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendNotification() throws Exception {
|
public void sendNotification() throws Exception {
|
||||||
log.info("send notification...");
|
log.info("send notification...");
|
||||||
List<Notify> listNotifies = toNotify();
|
List<Notify> listNotifies = toNotify();
|
||||||
|
@ -51,14 +53,14 @@ public class NotifyUsers {
|
||||||
log.debug("Building message...");
|
log.debug("Building message...");
|
||||||
String subject = "Message";
|
String subject = "Message";
|
||||||
String body = null;
|
String body = null;
|
||||||
|
|
||||||
subject = nMPlaceholdersSUtil.replacePlaceholder(notify.getPlaceholder_title());
|
subject = nMPlaceholdersSUtil.replacePlaceholder(notify.getPlaceholder_title());
|
||||||
body = nMPlaceholdersSUtil.replacePlaceholder(notify.getPlaceholder_msg());
|
body = nMPlaceholdersSUtil.replacePlaceholder(notify.getPlaceholder_msg());
|
||||||
|
|
||||||
log.debug("subject: {}", subject);
|
log.debug("subject: {}", subject);
|
||||||
log.debug("body: {}", body);
|
log.debug("body: {}", body);
|
||||||
log.info("Sending message to users: {}", recipientUsers);
|
log.info("Sending message to users: {}", recipientUsers);
|
||||||
|
|
||||||
postMessage(subject, body, catalogueEventType);
|
postMessage(subject, body, catalogueEventType);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -80,7 +82,7 @@ public class NotifyUsers {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Notify> toNotify() {
|
private List<Notify> toNotify() {
|
||||||
List<Notify> listNotifies = new ArrayList<Notify>();
|
List<Notify> listNotifies = new ArrayList<Notify>();
|
||||||
for (NotificationWhen notificationWhen : listNotificationWhen) {
|
for (NotificationWhen notificationWhen : listNotificationWhen) {
|
||||||
|
@ -89,77 +91,83 @@ public class NotifyUsers {
|
||||||
}
|
}
|
||||||
return listNotifies;
|
return listNotifies;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void postMessage(String subject, String bodyMessage, CatalogueEventType catalogueEventType) throws Exception {
|
protected void postMessage(String subject, String bodyMessage, CatalogueEventType catalogueEventType)
|
||||||
|
throws Exception {
|
||||||
CatalogueEvent catalogueEvent = getCatalogueEvent(subject, bodyMessage);
|
CatalogueEvent catalogueEvent = getCatalogueEvent(subject, bodyMessage);
|
||||||
SecretManager secretManager = SecretManagerProvider.instance.get();
|
SecretManager secretManager = SecretManagerProvider.instance.get();
|
||||||
|
try {
|
||||||
//GET geoportal SECRET
|
Secret geoportalSecret = GeoportalServiceAccount.getGeoportalSecret();
|
||||||
|
secretManager.startSession(geoportalSecret);
|
||||||
// Secret secret = Constants.getCatalogueSecret();
|
sendNotification(catalogueEvent);
|
||||||
// if(notificationSentByGCat) {
|
} catch (Exception e) {
|
||||||
// secretManager.startSession(secret);
|
log.error("Error while sending notification", e);
|
||||||
// }
|
} finally {
|
||||||
// try {
|
if (secretManager != null) {
|
||||||
// sendNotification(catalogueEvent);
|
secretManager.endSession();
|
||||||
// }finally {
|
}
|
||||||
// if(notificationSentByGCat) {
|
}
|
||||||
// secretManager.endSession();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
//sendNotification(catalogueEvent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void sendNotification(CatalogueEvent catalogueEvent) throws Exception {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread thread = new Thread() {
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
log.debug("{} is going to send the following notification {}",
|
||||||
|
SecretManagerProvider.instance.get().getUser().getUsername(), catalogueEvent);
|
||||||
|
NotificationClient nc = socialClients.getNotificationClient();
|
||||||
|
nc.sendCatalogueEvent(catalogueEvent);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Error while sending notification from thread", e);
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// thread.run();
|
||||||
|
thread.start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Error while sending notification", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// log.debug("{} is going to send the following notification {}", SecretManagerProvider.instance.get().getUser().getUsername(), catalogueEvent);
|
||||||
|
// NotificationClient nc = socialClients.getNotificationClient();
|
||||||
|
// nc.sendCatalogueEvent(catalogueEvent);
|
||||||
|
}
|
||||||
|
|
||||||
protected CatalogueEvent getCatalogueEvent(String subject, String bodyMessage) throws Exception {
|
protected CatalogueEvent getCatalogueEvent(String subject, String bodyMessage) throws Exception {
|
||||||
CatalogueEvent catalogueEvent = new CatalogueEvent();
|
CatalogueEvent catalogueEvent = new CatalogueEvent();
|
||||||
catalogueEvent.setType(catalogueEventType);
|
catalogueEvent.setType(catalogueEventType);
|
||||||
catalogueEvent.setNotifyText(bodyMessage);
|
catalogueEvent.setNotifyText(bodyMessage);
|
||||||
catalogueEvent.setItemId(subject);
|
catalogueEvent.setItemId(subject);
|
||||||
String itemURL = nMPlaceholdersSUtil.getPlaceholderMapValues().getGisLink();
|
String itemURL = nMPlaceholdersSUtil.getPlaceholderMapValues().getGisLink();
|
||||||
if(itemURL!=null) {
|
if (itemURL != null) {
|
||||||
catalogueEvent.setItemURL(new URL(itemURL));
|
catalogueEvent.setItemURL(new URL(itemURL));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adding recipient users
|
// Adding recipient users
|
||||||
String[] usersToNotify = recipientUsers.stream().map(u -> u.getUsername()).toArray(String[]::new);
|
String[] usersToNotify = recipientUsers.stream().map(u -> u.getUsername()).toArray(String[]::new);
|
||||||
catalogueEvent.setIdsToNotify(usersToNotify);
|
catalogueEvent.setIdsToNotify(usersToNotify);
|
||||||
catalogueEvent.setIdsAsGroup(false);
|
catalogueEvent.setIdsAsGroup(false);
|
||||||
|
|
||||||
return catalogueEvent;
|
return catalogueEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected CatalogueEvent toCatalogueEvent(CatalogueEventType catalogueEventType, String messageString,
|
||||||
protected void sendNotification(CatalogueEvent catalogueEvent) throws Exception {
|
String subject, String itemURL, List<String> users) throws Exception {
|
||||||
Thread thread = new Thread() {
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
log.trace("{} is going to send the following notification {}", SecretManagerProvider.instance.get().getUser().getUsername(), catalogueEvent);
|
|
||||||
NotificationClient nc = socialClients.getNotificationClient();
|
|
||||||
nc.sendCatalogueEvent(catalogueEvent);
|
|
||||||
} catch(Exception e) {
|
|
||||||
log.error("Error while sending notification.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// thread.run();
|
|
||||||
thread.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected CatalogueEvent toCatalogueEvent(CatalogueEventType catalogueEventType, String messageString, String subject, String itemURL, List<String> users) throws Exception {
|
|
||||||
CatalogueEvent catalogueEvent = new CatalogueEvent();
|
CatalogueEvent catalogueEvent = new CatalogueEvent();
|
||||||
catalogueEvent.setType(catalogueEventType);
|
catalogueEvent.setType(catalogueEventType);
|
||||||
catalogueEvent.setNotifyText(messageString);
|
catalogueEvent.setNotifyText(messageString);
|
||||||
catalogueEvent.setItemId(subject);
|
catalogueEvent.setItemId(subject);
|
||||||
if(itemURL!=null) {
|
if (itemURL != null) {
|
||||||
catalogueEvent.setItemURL(new URL(itemURL));
|
catalogueEvent.setItemURL(new URL(itemURL));
|
||||||
}
|
}
|
||||||
catalogueEvent.setIdsToNotify(users.toArray(new String[users.size()]));
|
catalogueEvent.setIdsToNotify(users.toArray(new String[users.size()]));
|
||||||
catalogueEvent.setIdsAsGroup(false);
|
catalogueEvent.setIdsAsGroup(false);
|
||||||
|
|
||||||
return catalogueEvent;
|
return catalogueEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,11 +75,9 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
//@Test
|
||||||
public void checkNotifications() {
|
public void checkNotifications_LIFECYCLE_STEP_PERFORMED() {
|
||||||
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
// NotificationsPlugin plugin = (NotificationsPlugin)
|
|
||||||
// plugins.get(NotificationsPlugin.DESCRIPTOR.getId());
|
|
||||||
UseCaseDescriptor descriptor = TestProfiles.profiles.get("profiledConcessioni");
|
UseCaseDescriptor descriptor = TestProfiles.profiles.get("profiledConcessioni");
|
||||||
|
|
||||||
NotificationEventsSubscribedConfig notificationEventsSubs;
|
NotificationEventsSubscribedConfig notificationEventsSubs;
|
||||||
|
@ -93,7 +91,48 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ItemObserved<Project> item = mockItemObserverd();
|
||||||
|
|
||||||
|
EventManager.Event event = Event.LIFECYCLE_STEP_PERFORMED;
|
||||||
|
item.setEvent(event);
|
||||||
|
|
||||||
|
LifecycleInformation lifecycleInfo = item.getProject().getLifecycleInformation();
|
||||||
|
//(Pending Approval, "SUBMIT-FOR-REVIEW")
|
||||||
|
// lifecycleInfo.setPhase("Pending Approval");
|
||||||
|
// lifecycleInfo.setLastInvokedStep("SUBMIT-FOR-REVIEW");
|
||||||
|
//(DRAFT, REJECT-DRAFT)
|
||||||
|
lifecycleInfo.setPhase("DRAFT");
|
||||||
|
lifecycleInfo.setLastInvokedStep("REJECT-DRAFT");
|
||||||
|
|
||||||
|
System.out.println("By notifying event " + event + " project " + item.getProjectId());
|
||||||
|
EventManager.getInstance().notify(event, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sysOut(SubscribeNotificationEvent subscribeNotificationEvent) {
|
||||||
|
System.out.println("\n#SubscribeNotificationEvent - Event: " + subscribeNotificationEvent.getEvent());
|
||||||
|
List<NotificationFor> listNotificationFor = subscribeNotificationEvent.getNotificationFor();
|
||||||
|
for (NotificationFor notificationFor : listNotificationFor) {
|
||||||
|
System.out.println("\tNotificationFor - roles: " + notificationFor.getRoles());
|
||||||
|
for (NotificationWhen notificationWhen : notificationFor.getWhen()) {
|
||||||
|
System.out.println("\t\tNotificationWhen - Target_phase: " + notificationWhen.getTarget_phase()
|
||||||
|
+ ", Last_invoked_step: " + notificationWhen.getLast_invoked_step());
|
||||||
|
for (Notify notify : notificationWhen.getNotify()) {
|
||||||
|
System.out.println("\t\t\tNotify type : " + notify.getType());
|
||||||
|
System.out.println("\t\t\tNotify send : " + notify.getSend());
|
||||||
|
System.out.println("\t\t\tNotify placeholder_message : " + notify.getPlaceholder_msg());
|
||||||
|
if (notify.getExport_as_pdf() != null) {
|
||||||
|
System.out.println("\t\t\t\tExport as PDF : " + notify.getExport_as_pdf());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ItemObserved<Project> mockItemObserverd() {
|
||||||
|
|
||||||
|
UseCaseDescriptor descriptor = TestProfiles.profiles.get("profiledConcessioni");
|
||||||
|
|
||||||
// notifying the Event.PROJECT_CREATED;
|
// notifying the Event.PROJECT_CREATED;
|
||||||
ItemObserved<Project> item = new ItemObserved<Project>();
|
ItemObserved<Project> item = new ItemObserved<Project>();
|
||||||
EventManager.Event event = Event.LIFECYCLE_STEP_PERFORMED;
|
EventManager.Event event = Event.LIFECYCLE_STEP_PERFORMED;
|
||||||
|
@ -119,52 +158,51 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
testProject.setTheDocument(theDocument);
|
testProject.setTheDocument(theDocument);
|
||||||
|
|
||||||
LifecycleInformation lifecycleInfo = new LifecycleInformation();
|
LifecycleInformation lifecycleInfo = new LifecycleInformation();
|
||||||
lifecycleInfo.setPhase("Pending Approval");
|
//Pending Approval, "SUBMIT-FOR-REVIEW"
|
||||||
lifecycleInfo.setLastInvokedStep("SUBMIT-FOR-REVIEW");
|
// lifecycleInfo.setPhase("Pending Approval");
|
||||||
|
// lifecycleInfo.setLastInvokedStep("SUBMIT-FOR-REVIEW");
|
||||||
|
|
||||||
|
lifecycleInfo.setPhase("DRAFT");
|
||||||
|
lifecycleInfo.setLastInvokedStep("REJECT-DRAFT");
|
||||||
|
|
||||||
testProject.setLifecycleInformation(lifecycleInfo);
|
testProject.setLifecycleInformation(lifecycleInfo);
|
||||||
|
|
||||||
item.setProject(testProject);
|
item.setProject(testProject);
|
||||||
System.out.println("By notifying event " + event + " project " + item.getProjectId());
|
|
||||||
EventManager.getInstance().notify(event, item);
|
return item;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sysOut(SubscribeNotificationEvent subscribeNotificationEvent) {
|
|
||||||
System.out.println("\n#SubscribeNotificationEvent - Event: " + subscribeNotificationEvent.getEvent());
|
|
||||||
List<NotificationFor> listNotificationFor = subscribeNotificationEvent.getNotificationFor();
|
|
||||||
for (NotificationFor notificationFor : listNotificationFor) {
|
|
||||||
System.out.println("\tNotificationFor - roles: " + notificationFor.getRoles());
|
|
||||||
for (NotificationWhen notificationWhen : notificationFor.getWhen()) {
|
|
||||||
System.out.println("\t\tNotificationWhen - Target_phase: " + notificationWhen.getTarget_phase()
|
|
||||||
+ ", Last_invoked_step: " + notificationWhen.getLast_invoked_step());
|
|
||||||
for (Notify notify : notificationWhen.getNotify()) {
|
|
||||||
System.out.println("\t\t\tNotify type : " + notify.getType());
|
|
||||||
System.out.println("\t\t\tNotify send : " + notify.getSend());
|
|
||||||
System.out.println("\t\t\tNotify placeholder_message : " + notify.getPlaceholder_msg());
|
|
||||||
if (notify.getExport_as_pdf() != null) {
|
|
||||||
System.out.println("\t\t\t\tExport as PDF : " + notify.getExport_as_pdf());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
//@Test
|
||||||
public void matchingNotificationTest() {
|
public void matchingNotificationTest() {
|
||||||
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
|
||||||
String itemPhase = "Pending Approval";
|
// String itemPhase = "Pending Approval";
|
||||||
String lastInvokedStep = "SUBMIT-FOR-REVIEW";
|
// String lastInvokedStep = "SUBMIT-FOR-REVIEW";
|
||||||
|
|
||||||
|
String itemPhase = "DRAFT";
|
||||||
|
String lastInvokedStep = "REJECT-DRAFT";
|
||||||
|
|
||||||
|
UseCaseDescriptor descriptor = TestProfiles.profiles.get("profiledConcessioni");
|
||||||
|
NotificationEventsSubscribedConfig notificationEventsSubs;
|
||||||
List<NotificationWhen> listWhen = new ArrayList<NotificationWhen>();
|
List<NotificationWhen> listWhen = new ArrayList<NotificationWhen>();
|
||||||
|
try {
|
||||||
|
System.out.println(NotificationEventsSubscribedConfig.class.getSimpleName() + ": ");
|
||||||
|
notificationEventsSubs = plugin.readNotificationsSubscribedFromConfigurationInTheUCD(descriptor);
|
||||||
|
List<SubscribeNotificationEvent> events = notificationEventsSubs.getListNotificationEventSubscribed();
|
||||||
|
for (SubscribeNotificationEvent subscribeNotificationEvent : events) {
|
||||||
|
for (NotificationFor notificationFor : subscribeNotificationEvent.getNotificationFor()) {
|
||||||
|
listWhen.addAll(ManageDoActionNotification.matchNotificationsAccordingItemStatus(notificationFor, itemPhase, lastInvokedStep));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
/*
|
||||||
SubscribeNotificationEvent sne = mockSubscribeNotificationEvent();
|
SubscribeNotificationEvent sne = mockSubscribeNotificationEvent();
|
||||||
for (NotificationFor notificationFor : sne.getNotificationFor()) {
|
for (NotificationFor notificationFor : sne.getNotificationFor()) {
|
||||||
listWhen.addAll(ManageDoActionNotification.matchNotificationsAccordingItemStatus(notificationFor, itemPhase, lastInvokedStep));
|
listWhen.addAll(ManageDoActionNotification.matchNotificationsAccordingItemStatus(notificationFor, itemPhase, lastInvokedStep));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
System.out.println("Filtered notifications: "+listWhen);
|
System.out.println("Filtered notifications: "+listWhen);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
|
@ -201,11 +239,16 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
NotificationFor notificatioFor = new NotificationFor();
|
NotificationFor notificatioFor = new NotificationFor();
|
||||||
notificatioFor.setRoles(Arrays.asList("Data-Manager"));
|
notificatioFor.setRoles(Arrays.asList("Data-Manager"));
|
||||||
|
|
||||||
|
//Pending Approval, "SUBMIT-FOR-REVIEW"
|
||||||
List<NotificationWhen> listWhen = new ArrayList<NotificationWhen>();
|
List<NotificationWhen> listWhen = new ArrayList<NotificationWhen>();
|
||||||
NotificationWhen notificationWhen = new NotificationWhen();
|
NotificationWhen notificationWhen = new NotificationWhen();
|
||||||
|
|
||||||
notificationWhen.setTarget_phase(Arrays.asList("Pending Approval"));
|
notificationWhen.setTarget_phase(Arrays.asList("Pending Approval"));
|
||||||
notificationWhen.setLast_invoked_step("SUBMIT-FOR-REVIEW");
|
notificationWhen.setLast_invoked_step("SUBMIT-FOR-REVIEW");
|
||||||
|
|
||||||
|
// notificationWhen.setTarget_phase(Arrays.asList("DRAFT"));
|
||||||
|
// notificationWhen.setLast_invoked_step("REJECT-DRAFT");
|
||||||
|
|
||||||
Notify notify = new Notify();
|
Notify notify = new Notify();
|
||||||
notify.setType(NOTIFICATION_TYPE.EMAIL);
|
notify.setType(NOTIFICATION_TYPE.EMAIL);
|
||||||
notify.setSend(true);
|
notify.setSend(true);
|
||||||
|
@ -221,7 +264,7 @@ public class CatalogueBindingPluginTest extends BasicPluginTest {
|
||||||
notificatioFor.setWhen(listWhen);
|
notificatioFor.setWhen(listWhen);
|
||||||
|
|
||||||
listNotificationFor.add(notificatioFor);
|
listNotificationFor.add(notificatioFor);
|
||||||
|
|
||||||
sne.setNotificationFor(listNotificationFor);
|
sne.setNotificationFor(listNotificationFor);
|
||||||
|
|
||||||
return sne;
|
return sne;
|
||||||
|
|
|
@ -2,9 +2,7 @@ import java.io.BufferedInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.apache.commons.text.StringSubstitutor;
|
import org.apache.commons.text.StringSubstitutor;
|
||||||
|
@ -31,7 +29,7 @@ public class StringReplacerTest {
|
||||||
|
|
||||||
public static String FILE_URL = "https://code-repo.d4science.org/gCubeSystem/gcube-cms-suite/raw/branch/event_manager/D4S_UCDs/DEV/devVRE/notifications/Notifications_Messages.properties";
|
public static String FILE_URL = "https://code-repo.d4science.org/gCubeSystem/gcube-cms-suite/raw/branch/event_manager/D4S_UCDs/DEV/devVRE/notifications/Notifications_Messages.properties";
|
||||||
|
|
||||||
@Test
|
//@Test
|
||||||
public void checkReplace() {
|
public void checkReplace() {
|
||||||
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
org.junit.Assume.assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue