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 create; protected CMItemStatus cmItemStatus; 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(); this.itemAuthor = false; this.create = false; cmItemStatus = CMItemStatus.PENDING; } public void setItemCoordinates(String itemID, String itemName, String itemTitle, String itemURL) { this.itemID = itemID; this.itemName = itemName; this.itemTitle = itemTitle; this.itemURL = itemURL; } 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(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(); create = true; cmItemStatus = CMItemStatus.PENDING; String fullName = ckanUser.getNameSurname(); 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(message); } public void postItemUpdated() throws Exception { cmItemStatus = CMItemStatus.PENDING; String fullName = ckanUser.getNameSurname(); 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(message); } public void postItemRejected(String userMessage) throws Exception { cmItemStatus = CMItemStatus.REJECTED; String fullName = ckanUser.getNameSurname(); 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(message); postUserMessage(cmItemStatus, userMessage); } public void postItemApproved(String userMessage) throws Exception { cmItemStatus = CMItemStatus.APPROVED; String fullName = ckanUser.getNameSurname(); 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(message); postUserMessage(cmItemStatus, userMessage); } }