diff --git a/pom.xml b/pom.xml index bb2528b..dc0b0e4 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ The gCube Ckan Content Moderator Widget caters for the approval stage before publishing in the D4Science Catalogue - + scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git scm:git:https://code-repo.d4science.org/gCubeSystem/${project.artifactId}.git https://code-repo.d4science.org/gCubeSystem/${project.artifactId} @@ -70,6 +70,22 @@ gwt-bootstrap 2.3.2.0 + + org.gcube.datacatalogue + catalogue-util-library + [1.0.0-SNAPSHOT, 2.0.0) + compile + + + org.slf4j + slf4j-log4j12 + provided + + + org.slf4j + slf4j-api + provided + junit junit diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java new file mode 100644 index 0000000..8af893d --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java @@ -0,0 +1,29 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.client; + +import java.util.List; + +import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; +import org.gcube.portlets.widgets.ckancontentmoderator.server.ContentModeratorSystem.ItemStatus; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +/** + * The client side stub for the RPC service. + */ +@RemoteServiceRelativePath("greet") +public interface CkanContentModeratorService extends RemoteService { + + public boolean isContentModeratorEnabled(); + + public void setStatus(String itemId, ItemStatus theStatus); + + public List getListItemsForStatus(ItemStatus theStatus); + + public void approveItem(String itemId); + + public void rejectItem(String itemId, boolean permanentlyDelete, String reasonMsg); + + public void permanentlyDelete(String itemId); + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java new file mode 100644 index 0000000..1c261b3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java @@ -0,0 +1,24 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.client; + +import java.util.List; + +import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; +import org.gcube.portlets.widgets.ckancontentmoderator.server.ContentModeratorSystem.ItemStatus; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +public interface CkanContentModeratorServiceAsync { + + void isContentModeratorEnabled(AsyncCallback callback); + + void approveItem(String itemId, AsyncCallback callback); + + void getListItemsForStatus(ItemStatus theStatus, AsyncCallback> callback); + + void permanentlyDelete(String itemId, AsyncCallback callback); + + void rejectItem(String itemId, boolean permanentlyDelete, String reasonMsg, AsyncCallback callback); + + void setStatus(String itemId, ItemStatus theStatus, AsyncCallback callback); + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java index 1b91b82..e581ffc 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java @@ -1,8 +1,12 @@ package org.gcube.portlets.widgets.ckancontentmoderator.client; +import java.util.List; + +import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; +import org.gcube.portlets.widgets.ckancontentmoderator.server.ContentModeratorSystem.ItemStatus; + import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; /** @@ -20,7 +24,7 @@ public class CkanContentModeratorWidget implements EntryPoint { /** * Create a remote service proxy to talk to the server-side Greeting service. */ - private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class); + private final CkanContentModeratorServiceAsync greetingService = GWT.create(CkanContentModeratorService.class); @@ -29,11 +33,12 @@ public class CkanContentModeratorWidget implements EntryPoint { */ public void onModuleLoad() { - greetingService.greetServer("I'm Francesco", new AsyncCallback() { + + greetingService.getListItemsForStatus(ItemStatus.PENDING, new AsyncCallback>() { @Override - public void onSuccess(String result) { - Window.alert(result); + public void onSuccess(List result) { + // TODO Auto-generated method stub } diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/GreetingService.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/GreetingService.java deleted file mode 100644 index 9b7277a..0000000 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/GreetingService.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.gcube.portlets.widgets.ckancontentmoderator.client; - -import com.google.gwt.user.client.rpc.RemoteService; -import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; - -/** - * The client side stub for the RPC service. - */ -@RemoteServiceRelativePath("greet") -public interface GreetingService extends RemoteService { - String greetServer(String name) throws IllegalArgumentException; -} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/GreetingServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/GreetingServiceAsync.java deleted file mode 100644 index 0ab0271..0000000 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/GreetingServiceAsync.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.gcube.portlets.widgets.ckancontentmoderator.client; - -import com.google.gwt.user.client.rpc.AsyncCallback; - -public interface GreetingServiceAsync { - - void greetServer(String name, AsyncCallback callback); - -} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java new file mode 100644 index 0000000..6e99383 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java @@ -0,0 +1,52 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.server; + +import java.util.List; + +import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; +import org.gcube.portlets.widgets.ckancontentmoderator.client.CkanContentModeratorService; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; + +/** + * The server side implementation of the RPC service. + */ +@SuppressWarnings("serial") +public class CkanContentModeratorServiceAImpl extends RemoteServiceServlet implements + CkanContentModeratorService, ContentModeratorSystem { + + @Override + public boolean isContentModeratorEnabled() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setStatus(String itemId, ItemStatus theStatus) { + // TODO Auto-generated method stub + + } + + @Override + public List getListItemsForStatus(ItemStatus theStatus) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void approveItem(String itemId) { + // TODO Auto-generated method stub + + } + + @Override + public void rejectItem(String itemId, boolean permanentlyDelete, String reasonMsg) { + // TODO Auto-generated method stub + + } + + @Override + public void permanentlyDelete(String itemId) { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java new file mode 100644 index 0000000..cb2d8c1 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java @@ -0,0 +1,108 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.server; + +import java.util.List; + +import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; + + +// TODO: Auto-generated Javadoc +/** + * The Interface ContentModeratorSystem. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * May 7, 2021 + */ +public interface ContentModeratorSystem { + + /** + * Checks if is content moderator enabled. + * + * @return true, if is content moderator enabled + */ + boolean isContentModeratorEnabled(); + + /** + * Sets the status. + * + * @param itemId the item id + * @param theStatus the the status + */ + void setStatus(String itemId, ItemStatus theStatus); + + + /** + * Gets the list items for status. + * + * @param theStatus the the status + * @return the list items for status + */ + List getListItemsForStatus(ItemStatus theStatus); + + /** + * Approve item. + * + * @param itemId the item id + */ + void approveItem(String itemId); + + /** + * Reject item. + * + * @param itemId the item id + * @param permanentlyDelete the permanently delete + * @param reasonMsg the reason msg + */ + void rejectItem(String itemId, boolean permanentlyDelete, String reasonMsg); + + /** + * Permanently delete. + * + * @param itemId the item id + */ + void permanentlyDelete(String itemId); + + /** + * The Enum ItemStatus. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * May 7, 2021 + */ + static enum ItemStatus { + PENDING("pending", "Pending"), APPROVED("approved", "Approved"), REJECTED("rejected", "Rejected"); + + private String id; + private String label; + + /** + * Instantiates a new item status. + * + * @param id the id + * @param label the label + */ + private ItemStatus(String id, String label) { + this.id = id; + this.label = label; + } + + /** + * Gets the id. + * + * @return the id + */ + public String getId() { + return id; + } + + /** + * Gets the label. + * + * @return the label + */ + public String getLabel() { + return label; + } + + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/GreetingServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/GreetingServiceImpl.java deleted file mode 100644 index 3dbaec7..0000000 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/GreetingServiceImpl.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.gcube.portlets.widgets.ckancontentmoderator.server; - -import org.gcube.portlets.widgets.ckancontentmoderator.client.GreetingService; -import org.gcube.portlets.widgets.ckancontentmoderator.shared.FieldVerifier; -import com.google.gwt.user.server.rpc.RemoteServiceServlet; - -/** - * The server side implementation of the RPC service. - */ -@SuppressWarnings("serial") -public class GreetingServiceImpl extends RemoteServiceServlet implements - GreetingService { - - public String greetServer(String input) throws IllegalArgumentException { - // Verify that the input is valid. - if (!FieldVerifier.isValidName(input)) { - // If the input is not valid, throw an IllegalArgumentException back to - // the client. - throw new IllegalArgumentException( - "Name must be at least 4 characters long"); - } - - String serverInfo = getServletContext().getServerInfo(); - String userAgent = getThreadLocalRequest().getHeader("User-Agent"); - - // Escape data from the client to avoid cross-site script vulnerabilities. - input = escapeHtml(input); - userAgent = escapeHtml(userAgent); - - return "Hello, " + input + "!

I am running " + serverInfo - + ".

It looks like you are using:
" + userAgent; - } - - /** - * Escape an html string. Escaping data received from the client helps to - * prevent cross-site script vulnerabilities. - * - * @param html the html string to escape - * @return the escaped string - */ - private String escapeHtml(String html) { - if (html == null) { - return null; - } - return html.replaceAll("&", "&").replaceAll("<", "<").replaceAll( - ">", ">"); - } -} diff --git a/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java b/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java new file mode 100644 index 0000000..6b7c4ae --- /dev/null +++ b/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java @@ -0,0 +1,14 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.server; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class CkanContentModeratorServiceAImplTest { + + @Test + public void test() { + fail("Not yet implemented"); + } + +}