package org.gcube.gcat.moderation.thread; import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.gcat.api.moderation.CMItemStatus; import org.gcube.gcat.moderation.thread.social.SocialMessageModerationThread; import org.gcube.gcat.persistence.ckan.CKANUser; /** * @author Luca Frosini (ISTI - CNR) */ public abstract class ModerationThread { protected String itemID; protected String itemName; protected String itemTitle; protected String itemURL; protected boolean itemAuthor; protected CKANUser ckanUser; protected ObjectMapper objectMapper; public static ModerationThread getDefaultInstance() { // return new FakeModerationThread(); return new SocialMessageModerationThread(); } public ModerationThread() { this.objectMapper = new ObjectMapper(); itemAuthor = false; } public void setItemCoordinates(String itemID, String itemName, String itemTitle, String itemURL) { this.itemID = itemID; this.itemName = itemName; this.itemTitle = itemTitle; this.itemURL = itemURL; } public boolean isItemAuthor() { return itemAuthor; } public void setItemAuthor(boolean itemAuthor) { this.itemAuthor = itemAuthor; } public void setCKANUser(CKANUser ckanUser) { this.ckanUser = ckanUser; } /** * The message is sent as gCat * @param cmItemStatus * @param message * @throws Exception */ protected abstract void postMessage(CMItemStatus cmItemStatus, String message) throws Exception; /** * The message is sent as User * @param cmItemStatus * @param userMessage * @throws Exception */ public abstract void postUserMessage(CMItemStatus cmItemStatus, String userMessage) throws Exception; protected abstract void createModerationThread() throws Exception ; public void postItemCreated() throws Exception{ createModerationThread(); String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; String message = String.format("@**%s** created the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", fullName, itemName, itemID, cmItemStatus.getFancyValue()); postMessage(cmItemStatus, message); } public void postItemUpdated() throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; String message = String.format("@**%s** updated the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", fullName, itemName, itemID, cmItemStatus.getFancyValue()); postMessage(cmItemStatus, message); } public void postItemRejected(String userMessage) throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.REJECTED; String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", fullName, cmItemStatus.getFancyValue(), itemName, itemID); postMessage(cmItemStatus, message); postUserMessage(cmItemStatus, userMessage); } public void postItemApproved(String userMessage) throws Exception{ String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.APPROVED; String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", fullName, cmItemStatus.getFancyValue(), itemName, itemID, itemURL); postMessage(cmItemStatus, message); postUserMessage(cmItemStatus, userMessage); } }