Implementing notifications
This commit is contained in:
parent
bb60d40cd5
commit
41a8011afb
|
@ -0,0 +1,220 @@
|
|||
package org.gcube.gcat.moderation.thread.social.notifications;
|
||||
|
||||
import java.io.StringWriter;
|
||||
import java.net.URL;
|
||||
import java.util.Set;
|
||||
|
||||
import org.gcube.common.authorization.utils.manager.SecretManager;
|
||||
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
|
||||
import org.gcube.common.authorization.utils.secret.Secret;
|
||||
import org.gcube.gcat.api.moderation.CMItemStatus;
|
||||
import org.gcube.gcat.api.moderation.Moderated;
|
||||
import org.gcube.gcat.moderation.thread.ModerationThread;
|
||||
import org.gcube.gcat.social.SocialUsers;
|
||||
import org.gcube.gcat.utils.Constants;
|
||||
import org.gcube.social_networking.social_networking_client_library.NotificationClient;
|
||||
import org.gcube.social_networking.socialnetworking.model.beans.catalogue.CatalogueEvent;
|
||||
import org.gcube.social_networking.socialnetworking.model.beans.catalogue.CatalogueEventType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public class SocialNotificationModerationThread extends ModerationThread {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SocialNotificationModerationThread.class);
|
||||
|
||||
protected CatalogueEventType catalogueEventType;
|
||||
|
||||
protected StringBuffer getMainItemInfo(StringBuffer stringBuffer) {
|
||||
stringBuffer.append("Status: ");
|
||||
stringBuffer.append(cmItemStatus.getFancyValue());
|
||||
stringBuffer.append("\n");
|
||||
stringBuffer.append("Title: ");
|
||||
stringBuffer.append(itemTitle);
|
||||
stringBuffer.append("\n");
|
||||
stringBuffer.append("Name: ");
|
||||
stringBuffer.append(itemName);
|
||||
stringBuffer.append("\n");
|
||||
stringBuffer.append("ID: ");
|
||||
stringBuffer.append(itemID);
|
||||
stringBuffer.append("\n");
|
||||
stringBuffer.append("URL: ");
|
||||
if(cmItemStatus == CMItemStatus.APPROVED) {
|
||||
stringBuffer.append(itemURL);
|
||||
}else {
|
||||
stringBuffer.append(getModerationURL());
|
||||
}
|
||||
stringBuffer.append("\n\n");
|
||||
return stringBuffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the message for an item that is created/updated
|
||||
*/
|
||||
public void notifyItemToBeManaged() throws Exception {
|
||||
/*
|
||||
* An example of created message is:
|
||||
*
|
||||
* [mister x] created / updated the following item
|
||||
*
|
||||
* Title: RESTful Transaction Model
|
||||
* Name: my_first_restful_transaction_model
|
||||
* ID: e31a6ba8-66ef-47b8-b61f-99a1366b4a69
|
||||
* URL: https://data.dev.d4science.org/ctlg/devVRE/my_first_restful_transaction_model
|
||||
*
|
||||
* You are kindly requested to review it and decide either to APPROVE or REJECT it at <url of the item>
|
||||
*
|
||||
*/
|
||||
cmItemStatus = CMItemStatus.PENDING;
|
||||
String fullName = ckanUser.getNameSurname();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
stringBuffer.append(fullName);
|
||||
stringBuffer.append(create ? " created " : " updated ");
|
||||
stringBuffer.append("the following item\n\n");
|
||||
stringBuffer = getMainItemInfo(stringBuffer);
|
||||
stringBuffer.append("You are kindly requested to review it and decide either to APPROVE or REJECT it.");
|
||||
// stringBuffer.append("You are kindly requested to review it and decide either to APPROVE or REJECT at");
|
||||
// String manageURL = getManageURL();
|
||||
// stringBuffer.append(manageURL);
|
||||
postMessage(stringBuffer.toString());
|
||||
}
|
||||
|
||||
|
||||
public void postItemCreated() throws Exception {
|
||||
create = true;
|
||||
cmItemStatus = CMItemStatus.PENDING;
|
||||
catalogueEventType = CatalogueEventType.ITEM_SUBMITTED;
|
||||
notifyItemToBeManaged();
|
||||
}
|
||||
|
||||
public void postItemUpdated() throws Exception {
|
||||
create = false;
|
||||
cmItemStatus = CMItemStatus.PENDING;
|
||||
catalogueEventType = CatalogueEventType.ITEM_UPDATED;
|
||||
notifyItemToBeManaged();
|
||||
}
|
||||
|
||||
protected StringBuffer addUserWithRole(String fullName, String role, StringBuffer stringBuffer) {
|
||||
stringBuffer.append(fullName);
|
||||
stringBuffer.append(" [");
|
||||
stringBuffer.append(role);
|
||||
stringBuffer.append("] ");
|
||||
return stringBuffer;
|
||||
}
|
||||
|
||||
public void postItemManaged(String userMessage) throws Exception {
|
||||
create = false;
|
||||
String fullName = ckanUser.getNameSurname();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer);
|
||||
stringBuffer.append(cmItemStatus.getValue());
|
||||
stringBuffer.append(" the following item");
|
||||
if(userMessage!=null && userMessage.length()>0) {
|
||||
stringBuffer.append(" with this accompanying message\n\n");
|
||||
stringBuffer = getMainItemInfo(stringBuffer);
|
||||
stringBuffer.append(userMessage);
|
||||
}else {
|
||||
stringBuffer.append("\n\n");
|
||||
stringBuffer = getMainItemInfo(stringBuffer);
|
||||
}
|
||||
postMessage(stringBuffer.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postItemRejected(String userMessage) throws Exception {
|
||||
create = false;
|
||||
cmItemStatus = CMItemStatus.REJECTED;
|
||||
postItemManaged(userMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postItemApproved(String userMessage) throws Exception {
|
||||
create = false;
|
||||
cmItemStatus = CMItemStatus.APPROVED;
|
||||
postItemManaged(userMessage);
|
||||
}
|
||||
|
||||
protected String getSubject() {
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
if(!create) {
|
||||
logger.trace("It's a reply");
|
||||
stringWriter.append("Re: ");
|
||||
}
|
||||
stringWriter.append("[Catalogue Service] ");
|
||||
stringWriter.append(itemTitle);
|
||||
return stringWriter.toString();
|
||||
}
|
||||
|
||||
protected CatalogueEvent getCatalogueEvent(String messageString) throws Exception {
|
||||
CatalogueEvent catalogueEvent = new CatalogueEvent();
|
||||
catalogueEvent.setItemId(itemID);
|
||||
if(cmItemStatus == CMItemStatus.APPROVED) {
|
||||
catalogueEvent.setItemURL(new URL(itemURL));
|
||||
}else {
|
||||
catalogueEvent.setItemURL(new URL(getModerationURL()));
|
||||
}
|
||||
|
||||
catalogueEvent.setNotifyText(messageString);
|
||||
|
||||
Set<String> users = SocialUsers.getUsernamesByRole(Moderated.CATALOGUE_MODERATOR);
|
||||
SecretManager secretManager = SecretManagerProvider.instance.get();
|
||||
String username = secretManager.getUser().getUsername();
|
||||
users.add(username);
|
||||
|
||||
catalogueEvent.setIdsToNotify(users.toArray(new String[users.size()]));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return catalogueEvent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void postMessage(String messageString) throws Exception {
|
||||
CatalogueEvent catalogueEvent = getCatalogueEvent(messageString);
|
||||
SecretManager secretManager = SecretManagerProvider.instance.get();
|
||||
Secret secret = Constants.getCatalogueSecret();
|
||||
secretManager.startSession(secret);
|
||||
try {
|
||||
sendNotification(catalogueEvent);
|
||||
}finally {
|
||||
secretManager.endSession();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postUserMessage(CMItemStatus cmItemStatus, String userMessage) throws Exception {
|
||||
this.create = false;
|
||||
this.cmItemStatus = cmItemStatus;
|
||||
String fullName = ckanUser.getNameSurname();
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
stringBuffer = addUserWithRole(fullName, itemAuthor ? "Author" : Moderated.CATALOGUE_MODERATOR, stringBuffer);
|
||||
stringBuffer.append("sent a message regarding the following item\n\n");
|
||||
stringBuffer = getMainItemInfo(stringBuffer);
|
||||
stringBuffer.append(userMessage);
|
||||
CatalogueEvent catalogueEvent = getCatalogueEvent(stringBuffer.toString());
|
||||
SecretManager secretManager = SecretManagerProvider.instance.get();
|
||||
Secret secret = Constants.getCatalogueSecret();
|
||||
secretManager.startSession(secret);
|
||||
try {
|
||||
sendNotification(catalogueEvent);
|
||||
}finally {
|
||||
secretManager.endSession();
|
||||
}
|
||||
}
|
||||
|
||||
protected void sendNotification(CatalogueEvent catalogueEvent) throws Exception {
|
||||
NotificationClient nc = new NotificationClient();
|
||||
nc.sendCatalogueEvent(catalogueEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createModerationThread() throws Exception {
|
||||
create = true;
|
||||
cmItemStatus = CMItemStatus.PENDING;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue