Compare commits

..

53 Commits

Author SHA1 Message Date
Francesco Mangiacrapa e724aff6a3 Added optional message on approving action. 2022-05-06 10:19:23 +02:00
Francesco Mangiacrapa 0a21bd0d3f fixing x-multiple in the Tab UI 2022-05-06 09:59:50 +02:00
Francesco Mangiacrapa b3d62d9a3d Added moderation checks when consuming Moderation Link. Implemented
closable tabs
2022-05-05 11:48:33 +02:00
Francesco Mangiacrapa d3954ecd71 [#23258] Implemented the requirement described in #23156 2022-05-04 15:15:54 +02:00
Francesco Mangiacrapa 4542ef599b enhancement on moderation init part 2022-05-04 11:06:04 +02:00
Francesco Mangiacrapa 473443ced0 Added DEFAULT_SORT_BY_FIELDS 2022-05-03 17:16:43 +02:00
Francesco Mangiacrapa f7e52ae4f8 Added and managed "Order by" feature 2022-04-22 15:38:57 +02:00
Francesco Mangiacrapa f161ec65e1 #23197 Revised the query passed to gCat with the moderation states 2022-04-21 16:02:20 +02:00
Francesco Mangiacrapa 51fac51ccf refactored method 'catalogueImpl.performQueryForItems' 2022-04-08 15:02:51 +02:00
Francesco Mangiacrapa 9c01905b86 improved management of existsMyItemInModeration method 2022-04-08 12:37:36 +02:00
Francesco Mangiacrapa cd214925c1 fixed css 2022-04-08 12:32:49 +02:00
Francesco Mangiacrapa d58a35a07d Improved controllers and init phase 2022-04-08 12:06:33 +02:00
Francesco Mangiacrapa fdbf2d3a76 Enabled read only mode. Added filtering on items per email(s) 2022-04-07 15:31:48 +02:00
Francesco Mangiacrapa 81f102c6f8 Improved UX. Added reload action and updated Ckan iFrame 2022-04-04 14:28:59 +02:00
Francesco Mangiacrapa d9ec54bd11 changed scroll behaviour, scrolling on table 2022-03-18 17:23:33 +01:00
Francesco Mangiacrapa 88a62069fe set new id internal frame 2022-02-25 10:56:05 +01:00
Francesco Mangiacrapa 97fff2c428 removed hiding frame panel 2022-02-25 10:11:24 +01:00
Francesco Mangiacrapa 0de87b53ff LOG set to TRACE for converted dataset 2022-02-24 12:38:44 +01:00
Francesco Mangiacrapa 3fcd1f3f3a fixed GUI on performing actions (changing moderation status) 2022-02-24 11:40:02 +01:00
Francesco Mangiacrapa cff1e2a78f Updated CkanContentModeratorCheckConfig 2022-02-23 16:22:50 +01:00
Francesco Mangiacrapa 2ca89206e6 added check configurations. Improved GUI 2022-02-22 14:48:17 +01:00
Francesco Mangiacrapa 12bca95bf8 reading Catalogue-Moderator role 2022-02-21 15:59:13 +01:00
Francesco Mangiacrapa 1990d0591c removed unused imports 2022-02-18 14:17:35 +01:00
Francesco Mangiacrapa cbb9bfc4ca integrated with gCatCaller methods 2022-02-18 14:17:19 +01:00
Francesco Mangiacrapa b726ba0b83 improved GUI and CSS 2022-02-17 16:43:43 +01:00
Francesco Mangiacrapa 259a809de1 added operation report 2022-02-08 15:41:30 +01:00
Francesco Mangiacrapa e758633752 managing do action 2021-06-29 17:56:15 +02:00
Francesco Mangiacrapa dd04e57060 removed unsed code 2021-06-29 17:30:44 +02:00
Francesco Mangiacrapa 88a36476ad in progress on managing operations 2021-06-29 16:14:33 +02:00
Francesco Mangiacrapa ae9f61a4f2 Introducing the DoAction Form 2021-06-28 18:41:52 +02:00
Francesco Mangiacrapa 9977824106 bugs fixing, enhancements 2021-06-28 15:40:53 +02:00
Francesco Mangiacrapa d7ad1914b4 in progress 2021-06-25 16:56:43 +02:00
Francesco Mangiacrapa 34277dafb0 in progress 2021-06-24 15:02:49 +02:00
Francesco Mangiacrapa 814a0c6661 managed event close all tabs 2021-06-22 18:09:16 +02:00
Francesco Mangiacrapa 199d4f1566 in progress 2021-06-22 17:38:42 +02:00
Francesco Mangiacrapa 8f9fc4ef04 in progress 2021-06-21 18:08:20 +02:00
Francesco Mangiacrapa 04b8b0f40e fixed multi-selection 2021-06-21 15:35:47 +02:00
Francesco Mangiacrapa 479c748369 added TabPanel and iFrame 2021-06-18 12:10:49 +02:00
Francesco Mangiacrapa 2b458df5c6 in progress 2021-06-16 18:02:54 +02:00
Francesco Mangiacrapa 373ee7fe56 first version of pagination is available 2021-06-16 15:53:06 +02:00
Francesco Mangiacrapa a974ecebff in progress on GUI 2021-06-16 11:25:49 +02:00
Francesco Mangiacrapa 8f8c1c3e5d in progress 2021-06-15 18:36:28 +02:00
Francesco Mangiacrapa 2ea8dee474 reverted to gwt 2.7 2021-06-15 16:52:27 +02:00
Francesco Mangiacrapa cfa3484421 removed Materials. Moved to GWT-Bootstrap 2021-06-15 12:38:59 +02:00
Francesco Mangiacrapa e517689cc0 commented entry point 2021-06-14 18:28:17 +02:00
Francesco Mangiacrapa e13a087c7a added gwt2.8.2 2021-06-14 18:17:01 +02:00
Francesco Mangiacrapa 2ce14fe572 updated pom to build as jar 2021-06-14 18:00:07 +02:00
Francesco Mangiacrapa 00a9c62879 in progress 2021-06-14 17:39:44 +02:00
Francesco Mangiacrapa f99b5b9fb3 in progress 2021-06-14 11:27:53 +02:00
Francesco Mangiacrapa 53df376b96 configurating the gwt service impl 2021-06-01 18:36:18 +02:00
Francesco Mangiacrapa a36d2ca1f4 integrated with gwt-material 2021-06-01 16:07:50 +02:00
Francesco Mangiacrapa 857ff7996a fixed project with gwt-material 2021-06-01 13:24:09 +02:00
Francesco Mangiacrapa 3a5f01f2e4 test 2021-05-26 17:58:12 +02:00
20 changed files with 139 additions and 179 deletions

View File

@ -11,6 +11,16 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes> <attributes>
<attribute name="test" value="true"/> <attribute name="test" value="true"/>
@ -24,16 +34,6 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> <classpathentry kind="lib" path="/home/francescomangiacrapa/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar"/>
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/> <classpathentry kind="output" path="target/classes"/>
</classpath> </classpath>

View File

@ -15,6 +15,16 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>com.gwtplugins.gdt.eclipse.core.webAppProjectValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.gwtplugins.gwt.eclipse.core.gwtProjectValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand> <buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name> <name>org.eclipse.wst.validation.validationbuilder</name>
<arguments> <arguments>
@ -32,6 +42,7 @@
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature> <nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>com.gwtplugins.gwt.eclipse.core.gwtNature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature> <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures> </natures>
</projectDescription> </projectDescription>

View File

@ -1,5 +1,4 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
jarsExcludedFromWebInfLib= lastWarOutDir=/home/francescomangiacrapa/git/ckan-content-moderator-widget/target/ckan-content-moderator-widget-0.1.0-SNAPSHOT
lastWarOutDir=/home/francescomangiacrapa/git/ckan-content-moderator-widget/target/ckan-content-moderator-widget-1.2.0-SNAPSHOT warSrcDir=src/main/webapp
warSrcDir=
warSrcDirIsOutput=false warSrcDirIsOutput=false

View File

@ -1,4 +1,2 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
entryPointModules= entryPointModules=
filesCopiedToWebInfLib=
gwtSyncCodeServer=true

View File

@ -1,59 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="ckan-content-moderator-widget-0.1.0-SNAPSHOT">
<wb-module deploy-name="ckan-content-moderator-widget-1.2.0-SNAPSHOT">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/gwt"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/gwt"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<dependent-module archiveName="catalogue-util-library-1.1.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/catalogue-util-library/catalogue-util-library"> <dependent-module archiveName="catalogue-util-library-1.1.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/catalogue-util-library/catalogue-util-library">
<dependency-type>uses</dependency-type> <dependency-type>uses</dependency-type>
</dependent-module> </dependent-module>
<property name="context-root" value="ckan-content-moderator-widget"/> <property name="context-root" value="ckan-content-moderator-widget"/>
<property name="java-output-path" value="/ckan-content-moderator-widget/target/classes"/>
<property name="java-output-path" value="/ckan-content-moderator-widget/target/ckan-content-moderator-widget-0.1.0-SNAPSHOT/WEB-INF/classes"/>
</wb-module> </wb-module>

View File

@ -0,0 +1,7 @@
<root>
<facet id="jst.jaxrs">
<node name="libprov">
<attribute name="provider-id" value="jaxrs-no-op-library-provider"/>
</node>
</facet>
</root>

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<faceted-project> <faceted-project>
<fixed facet="wst.jsdt.web"/> <fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="2.3"/>
<installed facet="com.gwtplugins.gwt.facet" version="1.0"/>
<installed facet="wst.jsdt.web" version="1.0"/> <installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/> <installed facet="java" version="1.8"/>
<installed facet="jst.utility" version="1.0"/> <installed facet="jst.jaxrs" version="2.0"/>
</faceted-project> </faceted-project>

View File

@ -4,31 +4,8 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.2.0] - 2023-01-19
#### Enhancements ## [v1.0.0-SNAPSHOT] - 2022-04-04
- [#23903] Catalogue Moderation: allow to send a message to the moderators on reject to pending operation
- [#24519] Added social_post=true to approve request
## [v1.1.1] - 2022-10-27
#### Fixing
- GWT-Servlet at provided
## [v1.1.0] - 2022-08-01
#### Enhancements
- [#23692] Optimized the listing and the paging of catalogue items
## [v1.0.1] - 2022-06-27
- [#23525] Removed the scope of xml-apis dependency
- Moved to maven-portal-bom v3.6.4
## [v1.0.0] - 2022-05-18
- [#21363] Implemented the ckan-content-moderator-widget - [#21363] Implemented the ckan-content-moderator-widget
- [#20650] Provided moderator skills to Catalogue Moderator(s) - [#20650] Provided moderator skills to Catalogue Moderator(s)

22
pom.xml
View File

@ -14,7 +14,7 @@
<groupId>org.gcube.portlets.widgets</groupId> <groupId>org.gcube.portlets.widgets</groupId>
<artifactId>ckan-content-moderator-widget</artifactId> <artifactId>ckan-content-moderator-widget</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<version>1.2.0</version> <version>1.0.0-SNAPSHOT</version>
<name>gCube Ckan Content Moderator Widget</name> <name>gCube Ckan Content Moderator Widget</name>
<description> <description>
@ -43,7 +43,7 @@
<dependency> <dependency>
<groupId>org.gcube.distribution</groupId> <groupId>org.gcube.distribution</groupId>
<artifactId>maven-portal-bom</artifactId> <artifactId>maven-portal-bom</artifactId>
<version>3.6.4</version> <version>3.6.3-SNAPSHOT</version>
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
<exclusions> <exclusions>
@ -66,6 +66,22 @@
<dependencies> <dependencies>
<!-- needed to compile/run in devMode with gwt > 2.7 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- needed to compile/run in devMode with gwt > 2.7 -->
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>com.google.gwt</groupId> <groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId> <artifactId>gwt-user</artifactId>
@ -76,7 +92,7 @@
<groupId>com.google.gwt</groupId> <groupId>com.google.gwt</groupId>
<artifactId>gwt-servlet</artifactId> <artifactId>gwt-servlet</artifactId>
<version>${gwtVersion}</version> <version>${gwtVersion}</version>
<scope>provided</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.gwt</groupId> <groupId>com.google.gwt</groupId>

View File

@ -106,10 +106,7 @@ public class CkanContentModeratorCheckConfigs {
attemptLC++; attemptLC++;
GWT.log("checking configuration loaded, attempt " + attemptLC + " of " GWT.log("checking configuration loaded, attempt " + attemptLC + " of "
+ MAX_RETRY_ON_LOADING_CONFIG); + MAX_RETRY_ON_LOADING_CONFIG);
int confLoaded = getConfigurationLoaded(); boolean configsLoaded = getConfigurationLoaded() == CONFIGURATION_EXPECTED;
GWT.log("configuration loaded " + confLoaded + " of "
+ CONFIGURATION_EXPECTED);
boolean configsLoaded = confLoaded == CONFIGURATION_EXPECTED;
GWT.log("configsLoaded: " + configsLoaded); GWT.log("configsLoaded: " + configsLoaded);
if (configsLoaded) { if (configsLoaded) {
GWT.log("ContentModeratorCheckConfig loaded correclty"); GWT.log("ContentModeratorCheckConfig loaded correclty");

View File

@ -21,6 +21,17 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("ckanContentModeratorService") @RemoteServiceRelativePath("ckanContentModeratorService")
public interface CkanContentModeratorService extends RemoteService { public interface CkanContentModeratorService extends RemoteService {
/**
* Sets the status. Currently, this only used to change the status from Rejected
* to Pending
*
* @param theStatus the the status
* @param itemNames the item names
* @return the operation report
* @throws Exception the exception
*/
public OperationReport setStatus(ItemStatus theStatus, List<String> itemNames) throws Exception;
/** /**
* Reject item. * Reject item.
* *
@ -48,15 +59,12 @@ public interface CkanContentModeratorService extends RemoteService {
* @param theStatus the the status * @param theStatus the the status
* @param offset the offset * @param offset the offset
* @param limit the limit * @param limit the limit
* @param allFields the all fields. If true returns the all * @param restrictedToLoggedInUser the restricted to logged in user
* fields of an item
* @param restrictedToLoggedInUser if true restricts the list of items to logged
* in user
* @param sortForField the sort for field * @param sortForField the sort for field
* @return the list items for status * @return the list items for status
* @throws Exception the exception * @throws Exception the exception
*/ */
public List<CatalogueDataset> getListItemsForStatus(ItemStatus theStatus, int offset, int limit, boolean allFields, public List<CatalogueDataset> getListItemsForStatus(ItemStatus theStatus, int offset, int limit,
boolean restrictedToLoggedInUser, String sortForField) throws Exception; boolean restrictedToLoggedInUser, String sortForField) throws Exception;
/** /**
@ -124,16 +132,5 @@ public interface CkanContentModeratorService extends RemoteService {
* @return the item for name * @return the item for name
* @throws Exception the exception * @throws Exception the exception
*/ */
public CatalogueDataset getItemForName(String itemName) throws Exception; CatalogueDataset getItemForName(String itemName) throws Exception;
/**
* Sets the status.
*
* @param theStatus the the status
* @param itemNames the item names
* @return the operation report
* @throws Exception the exception
*/
public OperationReport setStatus(ItemStatus theStatus, List<String> itemNames, String message) throws Exception;
} }

View File

@ -36,14 +36,13 @@ public interface CkanContentModeratorServiceAsync {
* @param theStatus the the status * @param theStatus the the status
* @param offset the offset * @param offset the offset
* @param limit the limit * @param limit the limit
* @param allFields the all fields
* @param restrictedToLoggedInUser the restricted to logged in user * @param restrictedToLoggedInUser the restricted to logged in user
* @param sortForField the sort for field * @param sortForField the sort for field
* @param callback the callback * @param callback the callback
* @return the list items for status * @return the list items for status
*/ */
void getListItemsForStatus(ItemStatus theStatus, int offset, int limit, boolean allFields, void getListItemsForStatus(ItemStatus theStatus, int offset, int limit, boolean restrictedToLoggedInUser,
boolean restrictedToLoggedInUser, String sortForField, AsyncCallback<List<CatalogueDataset>> callback); String sortForField, AsyncCallback<List<CatalogueDataset>> callback);
/** /**
* Gets the data for status. * Gets the data for status.
@ -82,11 +81,9 @@ public interface CkanContentModeratorServiceAsync {
* *
* @param theStatus the the status * @param theStatus the the status
* @param itemNames the item names * @param itemNames the item names
* @param message the message
* @param callback the callback * @param callback the callback
*/ */
void setStatus(ItemStatus theStatus, List<String> itemNames, String message, void setStatus(ItemStatus theStatus, List<String> itemNames, AsyncCallback<OperationReport> callback);
AsyncCallback<OperationReport> callback);
/** /**
* Gets the CMS roles for user in the context. * Gets the CMS roles for user in the context.

View File

@ -123,8 +123,6 @@ public class CkanContentModeratorWidgetController {
if (result != null) { if (result != null) {
eventBus.fireEvent(new ShowItemEvent<CatalogueDataset>(Arrays.asList(result),true)); eventBus.fireEvent(new ShowItemEvent<CatalogueDataset>(Arrays.asList(result),true));
//Fired to set selectable row (i.e. checkbox) on STATUS (e.g. REJECT)
eventBus.fireEvent(new SelectItemsWithItemStatusEvent(status, null, null, null));
} }
} }
@ -278,21 +276,6 @@ public class CkanContentModeratorWidgetController {
GWT.log("sortForField is: " + sortForField); GWT.log("sortForField is: " + sortForField);
howeView.loadItemsWithStatus(statusSelectedEvent.getItemStatus(), sortForField); howeView.loadItemsWithStatus(statusSelectedEvent.getItemStatus(), sortForField);
mainTabPanel.selectTab(0); mainTabPanel.selectTab(0);
//#23903 Enabling the owner of the rejected item, to change the Status and send a message
switch (statusSelectedEvent.getItemStatus()) {
case REJECTED:
howeView.hideUpdateStatusAction(false);
howeView.hideSelectableRow(false);
break;
default:
howeView.hideUpdateStatusAction(readOnlyMode);
howeView.hideSelectableRow(readOnlyMode);
break;
}
//#23903 end
} }
if (statusSelectedEvent.getDisplayMessage() != null) { if (statusSelectedEvent.getDisplayMessage() != null) {

View File

@ -199,15 +199,6 @@ public class ContentModeratorPaginatedView {
*/ */
private void setNewPageResult(SearchedData result) { private void setNewPageResult(SearchedData result) {
GWT.log("setNewPageResult: " + result); GWT.log("setNewPageResult: " + result);
if(!GWT.isProdMode()) {
if(result.getData()!=null) {
for (CatalogueDataset dataset : result.getData()) {
GWT.log("dataset: " + dataset.getStatus());
}
}
}
serverStartIndex = result.getServerEndIndex(); serverStartIndex = result.getServerEndIndex();
SelectionModel<? super CatalogueDataset> sm = getCellTable().getSelectionModel(); SelectionModel<? super CatalogueDataset> sm = getCellTable().getSelectionModel();

View File

@ -117,8 +117,7 @@ public class DoActionCMSView extends Composite {
switch (toStatus) { switch (toStatus) {
case PENDING: case PENDING:
checkBoxPermDelete.setVisible(false); checkBoxPermDelete.setVisible(false);
txtMsgReason.setVisible(true); txtMsgReason.setVisible(false);
txtMsgReason.setPlaceholder("(Optional) Type a message...");
break; break;
case APPROVED: case APPROVED:
checkBoxPermDelete.setVisible(false); checkBoxPermDelete.setVisible(false);

View File

@ -106,7 +106,7 @@ public class HomeView extends Composite {
* @param status the status * @param status the status
* @param displayFields the display fields * @param displayFields the display fields
* @param sortByField the sort by field * @param sortByField the sort by field
* @param readOnlyMode the read only mode * @param readOnlyMode the read only mode
* @param restrictDataToLoggedInUser the restrict data to logged in user * @param restrictDataToLoggedInUser the restrict data to logged in user
*/ */
public HomeView(HandlerManager eventBus, ItemStatus status, DISPLAY_FIELD[] displayFields, public HomeView(HandlerManager eventBus, ItemStatus status, DISPLAY_FIELD[] displayFields,
@ -423,8 +423,8 @@ public class HomeView extends Composite {
/** /**
* Load form server the items with status. * Load form server the items with status.
* *
* @param itemStatus the item status * @param itemStatus the item status
* @param sortForField * @param sortForField
*/ */
public void loadItemsWithStatus(ItemStatus itemStatus, String sortForField) { public void loadItemsWithStatus(ItemStatus itemStatus, String sortForField) {
GWT.log("loadItemsWithStatus started"); GWT.log("loadItemsWithStatus started");
@ -456,7 +456,7 @@ public class HomeView extends Composite {
case PENDING: case PENDING:
CkanContentModeratorWidgetController.contentModeratorService.setStatus(toStatus, listDatasetNames, CkanContentModeratorWidgetController.contentModeratorService.setStatus(toStatus, listDatasetNames,
doActionCMSView.getTxtReasonMsg(), new AsyncCallback<OperationReport>() { new AsyncCallback<OperationReport>() {
@Override @Override
public void onSuccess(OperationReport result) { public void onSuccess(OperationReport result) {

View File

@ -54,7 +54,6 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope); DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope);
CatalogueContentModeratorSystem cmsInstance = catalogueImpl.getCatalogueContentModerator(); CatalogueContentModeratorSystem cmsInstance = catalogueImpl.getCatalogueContentModerator();
isModerationEnabled = cmsInstance.isModerationEnabled(reloadConfig); isModerationEnabled = cmsInstance.isModerationEnabled(reloadConfig);
LOG.info("is ModerationEnabled? " + isModerationEnabled);
} catch (Exception e) { } catch (Exception e) {
LOG.error("Error occured on checking isContentModeratorEnabled, so returning false", e); LOG.error("Error occured on checking isContentModeratorEnabled, so returning false", e);
return false; return false;
@ -177,8 +176,6 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
* @param theStatus the the status * @param theStatus the the status
* @param offset the offset * @param offset the offset
* @param limit the limit * @param limit the limit
* @param allFields the all fields. If true returns the all
* fields of an item
* @param restrictedToLoggedInUser if true restricts the list of items to logged * @param restrictedToLoggedInUser if true restricts the list of items to logged
* in user * in user
* @param sortForField the sort for field * @param sortForField the sort for field
@ -187,7 +184,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
*/ */
@Override @Override
public List<CatalogueDataset> getListItemsForStatus(ItemStatus theStatus, int offset, int limit, public List<CatalogueDataset> getListItemsForStatus(ItemStatus theStatus, int offset, int limit,
boolean allFields, boolean restrictedToLoggedInUser, String sortForField) throws Exception { boolean restrictedToLoggedInUser, String sortForField) throws Exception {
LOG.info("called getListItemsForStatus with [status: " + theStatus + ", offset: " + offset + ", limit: " + limit LOG.info("called getListItemsForStatus with [status: " + theStatus + ", offset: " + offset + ", limit: " + limit
+ ", restrictedToLoggedInUser: " + restrictedToLoggedInUser + "]"); + ", restrictedToLoggedInUser: " + restrictedToLoggedInUser + "]");
List<CatalogueDataset> datasetList = null; List<CatalogueDataset> datasetList = null;
@ -204,7 +201,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, valueOfQueryEmails); filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, valueOfQueryEmails);
} }
List<CkanDataset> datasets = cmsInstance.getListItemsForStatus(theStatus, limit, offset, allFields, filters, List<CkanDataset> datasets = cmsInstance.getListItemsForStatus(theStatus, limit, offset, filters,
sortForField); sortForField);
if (datasets != null) { if (datasets != null) {
int size = datasets.size(); int size = datasets.size();
@ -251,34 +248,32 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
String scope = setContexts(); String scope = setContexts();
DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope); DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope);
GCubeUser user = GcubeContextUtil.getCurrentUser(this.getThreadLocalRequest()); GCubeUser user = GcubeContextUtil.getCurrentUser(this.getThreadLocalRequest());
boolean moderationCheckPassed = false; boolean moderationCheckPassed = false;
if (user != null) { if (user != null) {
CkanDataset ckanDataset = catalogueImpl.getDataset(itemName, user.getUsername()); CkanDataset ckanDataset = catalogueImpl.getDataset(itemName, user.getUsername());
ds = null; ds = null;
if (ckanDataset != null) { if (ckanDataset != null) {
ds = toPatchedCatalogueDataset(ckanDataset, catalogueImpl.getCatalogueUrl()); ds = toPatchedCatalogueDataset(ckanDataset, catalogueImpl.getCatalogueUrl());
Boolean userModerator = isModeratorRoleAssigned(); Boolean userModerator = isModeratorRoleAssigned();
moderationCheckPassed = userModerator ? true : false; moderationCheckPassed = userModerator?true:false;
LOG.info("Moderation check: is the user a Moderator? " + moderationCheckPassed); LOG.info("Moderation check: is the user a Moderator? "+moderationCheckPassed);
// The user is not a Moderator, yes otherwise //The user is not a Moderator, yes otherwise
if (!moderationCheckPassed) { if(!moderationCheckPassed) {
String datasetAuthorMail = ds.getAuthorEmail(); String datasetAuthorMail = ds.getAuthorEmail();
String userMail = user.getEmail(); String userMail = user.getEmail();
if (datasetAuthorMail != null && userMail != null if(datasetAuthorMail!=null && userMail!=null && datasetAuthorMail.compareTo(userMail)==0) {
&& datasetAuthorMail.compareTo(userMail) == 0) { //The user is the owner of the dataset, so he/she can view the dataset (moderation check passed)
// The user is the owner of the dataset, so he/she can view the dataset moderationCheckPassed = true;
// (moderation check passed)
moderationCheckPassed = true;
} }
LOG.info("Moderation check: is the user the owner of the dataset? " + moderationCheckPassed); LOG.info("Moderation check: is the user the owner of the dataset? "+moderationCheckPassed);
} }
} }
} }
if (!moderationCheckPassed) { if(!moderationCheckPassed) {
LOG.info("Moderation ckeck not passed, returning null"); LOG.info("Moderation ckeck not passed, returning null");
ds = null; ds = null;
} }
@ -288,7 +283,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
throw e; throw e;
} }
LOG.info("getItemForName " + itemName + ", returning: " + ds); LOG.info("getItemForName "+itemName+", returning: " + ds);
return ds; return ds;
} }
@ -297,29 +292,22 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
* *
* @param theStatus the the status * @param theStatus the the status
* @param itemNames the item names * @param itemNames the item names
* @param message the message to send to Moderators. If null no messange is sent
* @return the operation report * @return the operation report
* @throws Exception the exception * @throws Exception the exception
*/ */
@Override @Override
public OperationReport setStatus(ItemStatus theStatus, List<String> itemNames, String message) throws Exception { public OperationReport setStatus(ItemStatus theStatus, List<String> itemNames) throws Exception {
LOG.info("Called set status " + theStatus + " for items with name: " + itemNames + ". Is message null?: "+(message==null)); LOG.info("Called set status " + theStatus + " for Items with name: " + itemNames);
try { try {
String scope = setContexts(); String scope = setContexts();
DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope); DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope);
CatalogueContentModeratorSystem cmsInstance = catalogueImpl.getCatalogueContentModerator();
Map<String, String> errorMapItems = new HashMap<String, String>(); Map<String, String> errorMapItems = new HashMap<String, String>();
List<String> changedStatusListItems = new ArrayList<String>(); List<String> changedStatusListItems = new ArrayList<String>();
for (String itemName : itemNames) { for (String itemName : itemNames) {
try { try {
catalogueImpl.refreshDataset(itemName); catalogueImpl.refreshDataset(itemName);
LOG.info("refresh dataset done");
changedStatusListItems.add(itemName); changedStatusListItems.add(itemName);
if(message!=null && !message.isEmpty()) {
LOG.debug("Sending message: "+message);
cmsInstance.messageItem(itemName, message);
}
} catch (Exception e) { } catch (Exception e) {
LOG.warn("Error when setting status (updating) the itemName: " + itemName, e); LOG.warn("Error when setting status (updating) the itemName: " + itemName, e);
errorMapItems.put(itemName, e.getMessage()); errorMapItems.put(itemName, e.getMessage());
@ -356,7 +344,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
List<String> approvedListItems = new ArrayList<String>(); List<String> approvedListItems = new ArrayList<String>();
for (String itemName : itemNames) { for (String itemName : itemNames) {
try { try {
cmsInstance.approveItem(itemName, moderatorMessage, true); cmsInstance.approveItem(itemName, moderatorMessage);
approvedListItems.add(itemName); approvedListItems.add(itemName);
} catch (Exception e) { } catch (Exception e) {
LOG.warn("Error when approving itemName: " + itemName, e); LOG.warn("Error when approving itemName: " + itemName, e);
@ -484,7 +472,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
List<CatalogueDataset> listDataset = new ArrayList<CatalogueDataset>(); List<CatalogueDataset> listDataset = new ArrayList<CatalogueDataset>();
try { try {
LOG.debug("getListItemsForStatus with searchStartIndex: " + searchStartIndex + ", limit: " + limit); LOG.debug("getListItemsForStatus with searchStartIndex: " + searchStartIndex + ", limit: " + limit);
listDataset = getListItemsForStatus(status, searchStartIndex, limit, true, restrictedToLoggedInUser, listDataset = getListItemsForStatus(status, searchStartIndex, limit, restrictedToLoggedInUser,
sortForField); sortForField);
} catch (Exception e) { } catch (Exception e) {
String error = "Error occurred on getting items for status: " + status; String error = "Error occurred on getting items for status: " + status;
@ -508,4 +496,5 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem
LOG.debug("Returning: " + searchedData); LOG.debug("Returning: " + searchedData);
return searchedData; return searchedData;
} }
} }

1
src/test/.gitignore vendored
View File

@ -1 +0,0 @@
/resources/

View File

@ -17,36 +17,32 @@ import org.slf4j.LoggerFactory;
public class CkanContentModeratorServiceTest { public class CkanContentModeratorServiceTest {
private String scope = "/gcube/devsec/devVRE"; //private String scope = "/gcube/devsec/devVRE";
// private String scope = "/pred4s/preprod/Dorne"; private String scope = "/pred4s/preprod/Dorne";
private String testUser = "francesco.mangiacrapa"; private String testUser = "francesco.mangiacrapa";
// private String authorizationToken = ""; private String authorizationToken = "";
// private String scope = "/gcube/devsec";
private String authorizationToken = ""; // devVRE
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(CkanContentModeratorServiceTest.class); private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(CkanContentModeratorServiceTest.class);
// @Test //@Test
public void test() { public void test() {
fail("Not yet implemented"); fail("Not yet implemented");
} }
//@Test //@Test
public void loadItemsForStatus() { public void loadItemsForStatus() {
ScopeProvider.instance.set(scope); ScopeProvider.instance.set(scope);
SecurityTokenProvider.instance.set(authorizationToken); SecurityTokenProvider.instance.set(authorizationToken);
ItemStatus itemStatus = ItemStatus.PENDING; ItemStatus itemStatus = ItemStatus.PENDING;
try { try {
CatalogueContentModeratorSystem cms = CatalogueCMSFactory.getFactory().getCMSPerScope(scope); CatalogueContentModeratorSystem cms = CatalogueCMSFactory.getFactory().getCMSPerScope(scope);
Map<String, String> filters = new HashMap<String, String>(1); Map<String, String> filters = new HashMap<String, String>(1);
filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, "francesco.mangiacrapa@isti.cnr.it");
"francesco.mangiacrapa@isti.cnr.it"); List<CkanDataset> items = cms.getListItemsForStatus(itemStatus, 20, 0, filters, GCatCaller.DEFAULT_SORT_VALUE);
List<CkanDataset> items = cms.getListItemsForStatus(itemStatus, 20, 0, true, filters,
GCatCaller.DEFAULT_SORT_VALUE);
int i = 0; int i = 0;
System.out.println("Datasets with status " + itemStatus + " are: " + items.size()); System.out.println("Datasets with status "+itemStatus+" are: "+items.size());
for (CkanDataset ckanDataset : items) { for (CkanDataset ckanDataset : items) {
System.out.println(i++ + ")Read dataset: " + ckanDataset); System.out.println(i++ +")Read dataset: "+ckanDataset);
} }
} catch (Exception e) { } catch (Exception e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block

8
src/test/resources/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
/devNext.gcubekey
/devVRE.gcubekey
/devsec.gcubekey
/gCubeApps.gcubekey
/gcube.gcubekey
/log4j.properties
/pred4s.gcubekey
/preprod.gcubekey