Merge pull request 'feature_23903' (!4) from feature_23903 into master
Reviewed-on: #4
This commit is contained in:
commit
3680ffd875
|
@ -1,12 +1,12 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" output="target/gcube-ckan-datacatalog-2.2.4-SNAPSHOT/WEB-INF/classes" path="src/main/java">
|
<classpathentry kind="src" output="target/gcube-ckan-datacatalog-2.2.5-SNAPSHOT/WEB-INF/classes" path="src/main/java">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry excluding="**" kind="src" output="target/gcube-ckan-datacatalog-2.2.4-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
|
<classpathentry excluding="**" kind="src" output="target/gcube-ckan-datacatalog-2.2.5-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
|
@ -35,5 +35,5 @@
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="output" path="target/gcube-ckan-datacatalog-2.2.4-SNAPSHOT/WEB-INF/classes"/>
|
<classpathentry kind="output" path="target/gcube-ckan-datacatalog-2.2.5-SNAPSHOT/WEB-INF/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
>>>>>>>=refs/heads/task_20699
|
>>>>>>>=refs/heads/task_20699
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
jarsExcludedFromWebInfLib=
|
jarsExcludedFromWebInfLib=
|
||||||
lastWarOutDir=/home/francescomangiacrapa/git/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-2.2.4-SNAPSHOT
|
lastWarOutDir=/home/francescomangiacrapa/git/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-2.2.5-SNAPSHOT
|
||||||
warSrcDir=src/main/webapp
|
warSrcDir=src/main/webapp
|
||||||
warSrcDirIsOutput=false
|
warSrcDirIsOutput=false
|
||||||
|
|
|
@ -31,7 +31,23 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<wb-module deploy-name="gcube-ckan-datacatalog-2.2.4-SNAPSHOT">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<wb-module deploy-name="gcube-ckan-datacatalog-2.2.5-SNAPSHOT">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -84,6 +100,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +141,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -150,6 +182,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -164,6 +204,20 @@
|
||||||
|
|
||||||
|
|
||||||
<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.3.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/catalogue-util-library/catalogue-util-library">
|
||||||
|
<dependency-type>uses</dependency-type>
|
||||||
|
</dependent-module>
|
||||||
|
<dependent-module archiveName="ckan-content-moderator-widget-1.2.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/ckan-content-moderator-widget/ckan-content-moderator-widget">
|
||||||
|
<dependency-type>uses</dependency-type>
|
||||||
|
</dependent-module>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,6 +270,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -249,6 +311,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -282,6 +352,14 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,14 @@
|
||||||
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).
|
||||||
|
|
||||||
|
## [v2.2.5-SNAPSHOT] - 2023-01-26
|
||||||
|
|
||||||
|
#### Enhancements
|
||||||
|
|
||||||
|
- [#23903] Catalogue Moderation: allow to send a message to the moderators
|
||||||
|
- [#24309] Inform the VRE users that the catalogue is moderated
|
||||||
|
- Moved to gwt 2.10.0
|
||||||
|
|
||||||
## [v2.2.4] - 2022-10-27
|
## [v2.2.4] - 2022-10-27
|
||||||
|
|
||||||
#### Enhancements
|
#### Enhancements
|
||||||
|
|
13
pom.xml
13
pom.xml
|
@ -14,7 +14,7 @@
|
||||||
<groupId>org.gcube.portlets.gcubeckan</groupId>
|
<groupId>org.gcube.portlets.gcubeckan</groupId>
|
||||||
<artifactId>gcube-ckan-datacatalog</artifactId>
|
<artifactId>gcube-ckan-datacatalog</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<version>2.2.4</version>
|
<version>2.2.5-SNAPSHOT</version>
|
||||||
<name>gCube CKAN Data Catalog</name>
|
<name>gCube CKAN Data Catalog</name>
|
||||||
<description>The gCube CKAN Data Catalog portlet</description>
|
<description>The gCube CKAN Data Catalog portlet</description>
|
||||||
|
|
||||||
|
@ -40,7 +40,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.7.0-SNAPSHOT</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
|
@ -59,6 +59,13 @@
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- <dependency> -->
|
||||||
|
<!-- <groupId>javax.servlet</groupId> -->
|
||||||
|
<!-- <artifactId>javax.servlet-api</artifactId> -->
|
||||||
|
<!-- <version>3.0.1</version> -->
|
||||||
|
<!-- <scope>compile</scope> -->
|
||||||
|
<!-- </dependency> -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.gwt</groupId>
|
<groupId>com.google.gwt</groupId>
|
||||||
<artifactId>gwt-user</artifactId>
|
<artifactId>gwt-user</artifactId>
|
||||||
|
@ -75,7 +82,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>runtime</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.gwtbootstrap</groupId>
|
<groupId>com.github.gwtbootstrap</groupId>
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowOrgani
|
||||||
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowStatisticsEvent;
|
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowStatisticsEvent;
|
||||||
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowTypesEvent;
|
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowTypesEvent;
|
||||||
|
|
||||||
|
import com.github.gwtbootstrap.client.ui.Alert;
|
||||||
import com.github.gwtbootstrap.client.ui.AlertBlock;
|
import com.github.gwtbootstrap.client.ui.AlertBlock;
|
||||||
import com.github.gwtbootstrap.client.ui.Button;
|
import com.github.gwtbootstrap.client.ui.Button;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
import com.github.gwtbootstrap.client.ui.constants.AlertType;
|
||||||
|
@ -23,6 +24,7 @@ import com.github.gwtbootstrap.client.ui.constants.ButtonType;
|
||||||
import com.github.gwtbootstrap.client.ui.constants.IconType;
|
import com.github.gwtbootstrap.client.ui.constants.IconType;
|
||||||
import com.google.gwt.dom.client.Style.Float;
|
import com.google.gwt.dom.client.Style.Float;
|
||||||
import com.google.gwt.dom.client.Style.FontWeight;
|
import com.google.gwt.dom.client.Style.FontWeight;
|
||||||
|
import com.google.gwt.dom.client.Style.TextAlign;
|
||||||
import com.google.gwt.dom.client.Style.Unit;
|
import com.google.gwt.dom.client.Style.Unit;
|
||||||
import com.google.gwt.event.dom.client.ClickEvent;
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
import com.google.gwt.event.dom.client.ClickHandler;
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
|
@ -39,6 +41,10 @@ import com.google.gwt.user.client.ui.InlineHTML;
|
||||||
*/
|
*/
|
||||||
public class CkanMetadataManagementPanel extends FlowPanel {
|
public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
|
|
||||||
|
private static final String MESSAGE_MODERATED_CATALOGUE = "Controlled Catalogue";
|
||||||
|
|
||||||
|
public static final String CATALOGUE_ITEMS_WERE_APPROVED_BY_CATALOGUE_MODERATOR_S = "Catalogue items were approved by Catalogue Moderator(s).";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -47,7 +53,7 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
private static final String MANAGE_GRSF_ITEM_TOOLTIP = "By pushing on this button, you will be able to manage the item you are viewing."
|
private static final String MANAGE_GRSF_ITEM_TOOLTIP = "By pushing on this button, you will be able to manage the item you are viewing."
|
||||||
+ " Manageable items are the GRSF ones.";
|
+ " Manageable items are the GRSF ones.";
|
||||||
|
|
||||||
private static final String MANAGE_CMS_ITEMS_TOOLTIP = "By pushing on this button, you will be able to manage (APPROVING or REJECTING) the item under approval"
|
private static final String MANAGE_CMS_ITEMS_TOOLTIP = "By pushing on this button, you will be able to manage (APPROVING or REJECTING) the item under approval."
|
||||||
+ " Manageable items are not APPROVED and NOT PUBLISHED in the Catalogue.";
|
+ " Manageable items are not APPROVED and NOT PUBLISHED in the Catalogue.";
|
||||||
|
|
||||||
private AlertBlock nav = new AlertBlock();
|
private AlertBlock nav = new AlertBlock();
|
||||||
|
@ -76,6 +82,9 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
private Button editMeta = new Button("Edit Item");
|
private Button editMeta = new Button("Edit Item");
|
||||||
private Button manageGRSFProduct = new Button("Manage GRSF Item"); // GRSF Manage
|
private Button manageGRSFProduct = new Button("Manage GRSF Item"); // GRSF Manage
|
||||||
private Button manageCModS = new Button("Manage Items"); // Moderation
|
private Button manageCModS = new Button("Manage Items"); // Moderation
|
||||||
|
|
||||||
|
private Alert messageModerationEnanbled = new Alert(MESSAGE_MODERATED_CATALOGUE); // Moderation message
|
||||||
|
|
||||||
private HandlerManager eventBus;
|
private HandlerManager eventBus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -111,6 +120,11 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
manageCModS.setType(ButtonType.PRIMARY);
|
manageCModS.setType(ButtonType.PRIMARY);
|
||||||
manageCModS.getElement().getStyle().setFloat(Float.RIGHT);
|
manageCModS.getElement().getStyle().setFloat(Float.RIGHT);
|
||||||
manageCModS.getElement().getStyle().setMarginRight(20, Unit.PX);
|
manageCModS.getElement().getStyle().setMarginRight(20, Unit.PX);
|
||||||
|
messageModerationEnanbled.setType(AlertType.INFO);
|
||||||
|
messageModerationEnanbled.setClose(false);
|
||||||
|
//messageModerationEnanbled.addStyleName("moderation-message");
|
||||||
|
messageModerationEnanbled.getElement().getStyle().setTextAlign(TextAlign.CENTER);
|
||||||
|
messageModerationEnanbled.setTitle(CATALOGUE_ITEMS_WERE_APPROVED_BY_CATALOGUE_MODERATOR_S);
|
||||||
|
|
||||||
// set icons
|
// set icons
|
||||||
home.setIcon(IconType.HOME);
|
home.setIcon(IconType.HOME);
|
||||||
|
@ -138,6 +152,7 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
manageGRSFProduct.setEnabled(false);
|
manageGRSFProduct.setEnabled(false);
|
||||||
manageCModS.setVisible(false);
|
manageCModS.setVisible(false);
|
||||||
manageCModS.setEnabled(false);
|
manageCModS.setEnabled(false);
|
||||||
|
messageModerationEnanbled.setVisible(false);
|
||||||
|
|
||||||
// manage GRSF item info
|
// manage GRSF item info
|
||||||
manageGRSFProduct.setTitle(MANAGE_GRSF_ITEM_TOOLTIP);
|
manageGRSFProduct.setTitle(MANAGE_GRSF_ITEM_TOOLTIP);
|
||||||
|
@ -147,6 +162,7 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
manageCModS.setTitle(MANAGE_CMS_ITEMS_TOOLTIP);
|
manageCModS.setTitle(MANAGE_CMS_ITEMS_TOOLTIP);
|
||||||
manageCModS.getElement().getStyle().setFontWeight(FontWeight.BOLD);
|
manageCModS.getElement().getStyle().setFontWeight(FontWeight.BOLD);
|
||||||
|
|
||||||
|
nav.add(messageModerationEnanbled);
|
||||||
// add to navigation bar
|
// add to navigation bar
|
||||||
nav.add(home);
|
nav.add(home);
|
||||||
nav.add(organizations);
|
nav.add(organizations);
|
||||||
|
@ -374,7 +390,8 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Button to manage the products under moderation via Content Moderation System (CMS)
|
* Button to manage the products under moderation via Content Moderation System
|
||||||
|
* (CMS)
|
||||||
*
|
*
|
||||||
* @param value true or false
|
* @param value true or false
|
||||||
*/
|
*/
|
||||||
|
@ -382,6 +399,17 @@ public class CkanMetadataManagementPanel extends FlowPanel {
|
||||||
manageCModS.setVisible(value);
|
manageCModS.setVisible(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show message catalogue is moderated.
|
||||||
|
*
|
||||||
|
* @param isContentModerationEnabled the is content moderation enabled
|
||||||
|
*/
|
||||||
|
public void showMessageCatalogueIsModerated(boolean isContentModerationEnabled) {
|
||||||
|
messageModerationEnanbled.setVisible(isContentModerationEnabled);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable manage CMS products button.
|
* Enable manage CMS products button.
|
||||||
*
|
*
|
||||||
|
|
|
@ -268,6 +268,10 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
|
||||||
GWT.log("Moderator role is assigned? " + isModeratorRoleAssingned);
|
GWT.log("Moderator role is assigned? " + isModeratorRoleAssingned);
|
||||||
GWT.log("isExistsMyItemInModeration? " + isExistsMyItemInModeration);
|
GWT.log("isExistsMyItemInModeration? " + isExistsMyItemInModeration);
|
||||||
|
|
||||||
|
if (isContentModerationEnabled) {
|
||||||
|
managementPanel.showMessageCatalogueIsModerated(isContentModerationEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
// Enabling moderation if the moderation is active in the context and
|
// Enabling moderation if the moderation is active in the context and
|
||||||
// the user has the role of MODERATOR in the context
|
// the user has the role of MODERATOR in the context
|
||||||
if (isContentModerationEnabled && isModeratorRoleAssingned) {
|
if (isContentModerationEnabled && isModeratorRoleAssingned) {
|
||||||
|
|
|
@ -552,6 +552,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
|
||||||
String scopePerCurrentUrl = SessionUtil.getScopeFromClientUrl(getThreadLocalRequest());
|
String scopePerCurrentUrl = SessionUtil.getScopeFromClientUrl(getThreadLocalRequest());
|
||||||
DataCatalogue catalogue = getCatalogue(scopePerCurrentUrl);
|
DataCatalogue catalogue = getCatalogue(scopePerCurrentUrl);
|
||||||
boolean moderationEnabled = catalogue.isModerationEnabled(reloadConfig);
|
boolean moderationEnabled = catalogue.isModerationEnabled(reloadConfig);
|
||||||
|
logger.info("moderation Enabled? "+moderationEnabled);
|
||||||
return new ManageProductResponse(moderationEnabled, scopePerCurrentUrl);
|
return new ManageProductResponse(moderationEnabled, scopePerCurrentUrl);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,13 +11,6 @@
|
||||||
<param-value>/gcube/service/connect</param-value>
|
<param-value>/gcube/service/connect</param-value>
|
||||||
</context-param>
|
</context-param>
|
||||||
|
|
||||||
<!-- <context-param> -->
|
|
||||||
<!-- <description>Used like GET parameter in order to hide header section
|
|
||||||
of CKAN template from gCube Portal</description> -->
|
|
||||||
<!-- <param-name>CkanHideHeader</param-name> -->
|
|
||||||
<!-- <param-value>hh</param-value> -->
|
|
||||||
<!-- </context-param> -->
|
|
||||||
|
|
||||||
<context-param>
|
<context-param>
|
||||||
<description>ckan connector logout from CKAN</description>
|
<description>ckan connector logout from CKAN</description>
|
||||||
<param-name>CkanConnectorLogout</param-name>
|
<param-name>CkanConnectorLogout</param-name>
|
||||||
|
@ -30,16 +23,6 @@
|
||||||
<servlet-class>org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server.GcubeCkanDataCatalogServiceImpl</servlet-class>
|
<servlet-class>org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server.GcubeCkanDataCatalogServiceImpl</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
<!-- <servlet> -->
|
|
||||||
<!-- <servlet-name>gcubeckanlogout</servlet-name> -->
|
|
||||||
<!-- <servlet-class>org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server.CkanLogout</servlet-class> -->
|
|
||||||
<!-- </servlet> -->
|
|
||||||
|
|
||||||
<!-- <servlet> -->
|
|
||||||
<!-- <servlet-name>checkServlet</servlet-name> -->
|
|
||||||
<!-- <servlet-class>org.gcube.portlets.widgets.sessionchecker.server.SessionCheckerServiceImpl</servlet-class> -->
|
|
||||||
<!-- </servlet> -->
|
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
<servlet-name>ckanpublisherservices</servlet-name>
|
<servlet-name>ckanpublisherservices</servlet-name>
|
||||||
<servlet-class>org.gcube.portlets.widgets.ckandatapublisherwidget.server.CKANPublisherServicesImpl</servlet-class>
|
<servlet-class>org.gcube.portlets.widgets.ckandatapublisherwidget.server.CKANPublisherServicesImpl</servlet-class>
|
||||||
|
|
Loading…
Reference in New Issue