package org.gcube.gcat.moderation.thread.social; import java.io.StringWriter; 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.Message; import org.gcube.gcat.social.SocialMessage; import org.gcube.gcat.social.SocialUsers; import org.gcube.gcat.utils.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) */ public class SocialMessageModerationThread extends ModerationThread { private static final Logger logger = LoggerFactory.getLogger(SocialMessageModerationThread.class); protected StringBuffer getMainItemInfo(CMItemStatus cmItemStatus) { StringBuffer stringBuffer = new 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: "); stringBuffer.append(itemURL); stringBuffer.append("\n\n"); return stringBuffer; } public void postItemCreated() throws Exception{ String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); stringBuffer.append("Message:\n"); stringBuffer.append(fullName); stringBuffer.append(" created '"); stringBuffer.append(itemTitle); stringBuffer.append("'. It is now in "); stringBuffer.append(cmItemStatus.getFancyValue()); stringBuffer.append(" state and must be moderated."); postMessage(cmItemStatus, stringBuffer.toString()); } public void postItemUpdated() throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); stringBuffer.append("Message:\n"); stringBuffer.append(fullName); stringBuffer.append(" updated '"); stringBuffer.append(itemTitle); stringBuffer.append("'. It is now in "); stringBuffer.append(cmItemStatus.getFancyValue()); stringBuffer.append(" state and must be moderated."); postMessage(cmItemStatus, stringBuffer.toString()); } protected StringBuffer addUserWithRole(String fullName, String role, StringBuffer stringBuffer) { stringBuffer.append(fullName); stringBuffer.append(" ["); stringBuffer.append(role); stringBuffer.append("] "); return stringBuffer; } public void postItemRejected(String userMessage) throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.REJECTED; StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); stringBuffer.append("Message:\n"); stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); stringBuffer.append("rejected '"); stringBuffer.append(itemTitle); stringBuffer.append("'."); stringBuffer.append(" The author can delete or update it."); if(userMessage!=null && userMessage.length()>0) { stringBuffer.append("\n\n"); stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); stringBuffer.append("added the following comment:\n"); stringBuffer.append(userMessage); } postMessage(cmItemStatus, stringBuffer.toString()); } public void postItemApproved(String userMessage) throws Exception{ String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.APPROVED; StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); stringBuffer.append("Message:\n"); stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); stringBuffer.append("approved the '"); stringBuffer.append(itemTitle); stringBuffer.append("'."); stringBuffer.append(" It is now available in the catalogue at "); stringBuffer.append(itemURL); if(userMessage!=null && userMessage.length()>0) { stringBuffer.append("\n\n"); stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); stringBuffer.append("added the following comment:\n"); stringBuffer.append(userMessage); } postMessage(cmItemStatus, stringBuffer.toString()); } protected String getSubject(CMItemStatus cmItemStatus) { StringWriter stringWriter = new StringWriter(); stringWriter.append("[Catalogue Service] "); stringWriter.append(itemTitle); stringWriter.append(" (name:"); stringWriter.append(itemName); stringWriter.append(" - id:"); stringWriter.append(itemID); stringWriter.append(")"); return stringWriter.toString(); } protected Message getMessage(CMItemStatus cmItemStatus, String messageString) throws Exception { Message message = new Message(); message.setMessage(messageString); message.setSubject(getSubject(cmItemStatus)); Set moderators = SocialUsers.getUsernamesByRole(Moderated.CATALOGUE_MODERATOR); message.setUsers(moderators); return message; } @Override protected void postMessage(CMItemStatus cmItemStatus, String messageString) throws Exception { SecretManager secretManager = SecretManagerProvider.instance.get(); String username = secretManager.getUser().getUsername(); Message message = getMessage(cmItemStatus, messageString); message.addUser(username); Secret secret = Constants.getCatalogueSecret(); secretManager.startSession(secret); try { sendMessage(message); }finally { secretManager.endSession(); } } @Override public void postUserMessage(CMItemStatus cmItemStatus, String userMessage) throws Exception { String fullName = ckanUser.getNameSurname(); StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); stringBuffer = addUserWithRole(fullName, isItemAuthor() ? "Author" : Moderated.CATALOGUE_MODERATOR, stringBuffer); stringBuffer.append("sent the following comment:\n"); stringBuffer.append(userMessage); Message message = getMessage(cmItemStatus, stringBuffer.toString()); SecretManager secretManager = SecretManagerProvider.instance.get(); String username = secretManager.getUser().getUsername(); message.addUser(username); Secret secret = Constants.getCatalogueSecret(); secretManager.startSession(secret); try { sendMessage(message); }finally { secretManager.endSession(); } } protected void sendMessage(Message message) throws Exception { SocialMessage socialMessage = new SocialMessage(); socialMessage.setMessage(message); socialMessage.start(); } @Override protected void createModerationThread() throws Exception { // Nothing to do } }