diff --git a/.classpath b/.classpath index df3408d..c97c8e3 100644 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - + - + @@ -22,13 +22,13 @@ - + - + @@ -36,22 +36,5 @@ - - - - - - - - - - - - - - - - - - + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 4e4a3ad..cac0df4 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -3,7 +3,9 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index e3f678d..5dd063a 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,11 +1,21 @@ - + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.java b/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.java index 4f4f63c..00f3936 100755 --- a/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.java +++ b/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.java @@ -55,7 +55,6 @@ import gwt.material.design.client.constants.IconType; import gwt.material.design.client.constants.Position; import gwt.material.design.client.ui.MaterialAnchorButton; import gwt.material.design.client.ui.MaterialBadge; -import gwt.material.design.client.ui.MaterialCollection; import gwt.material.design.client.ui.MaterialFAB; import gwt.material.design.client.ui.MaterialLink; import gwt.material.design.client.ui.MaterialProgress; @@ -88,10 +87,12 @@ public class ApplicationView extends Composite { @UiField MaterialFAB FAB; @UiField MaterialLink menu, newMessage, switcher; @UiField MaterialAnchorButton replyAll, reply, forward; - @UiField MaterialCollection messagesCollection; @UiField MaterialProgress messageLoader, messagesLoader; @UiField MaterialBadge badge; - + @UiField ShowMorePagerPanel pagerPanel; + + MyMaterialCollection messagesCollection; + private ConvMessage currentSelected; private DisplayMessage displayMessage; private WriteMessage newMessageDisplay; @@ -160,7 +161,6 @@ public class ApplicationView extends Composite { }); } private void showErrorOccurred() { - messagesCollection.clear(); messagesLoader.setVisible(false); messageLoader.setVisible(false); hideSidePanel(); @@ -172,18 +172,21 @@ public class ApplicationView extends Composite { * @param sent */ public void showMessages(ArrayList messages, boolean sent) { - messagesCollection.clear(); messagesLoader.setVisible(false); - messagesCollection.setVisible(true); int scrollerHeight = Window.getClientHeight() - 100; - scrollerPanel.setHeight(scrollerHeight+"px"); + scrollerPanel.setHeight(scrollerHeight+"px"); + pagerPanel.setHeight(scrollerHeight+"px"); + GWT.log("message returned are "+messages.size()); + messagesCollection= new MyMaterialCollection<>(messages, c -> new MessageItem(c, messagesCollection, this, sent)); + messagesCollection.init(); + pagerPanel.setDisplay(messagesCollection); for (ConvMessage convMessage : messages) { - messagesCollection.add(new MessageItem(convMessage, messagesCollection, this, sent)); if (! (sent || convMessage.isRead())) unreadMessages++; totalMessages++; } if (messages.size() > 0) { + GWT.log("message returned are "+messages.size()); MessageItem first = (MessageItem) messagesCollection.getChildrenList().get(0); first.setSelected(true); } else { @@ -247,7 +250,6 @@ public class ApplicationView extends Composite { } private void displayMessage(String messageId, final boolean sent) { - messageLoader.setColor(Utils.getRandomColor()); messageLoader.setVisible(true); scrollerPanel.clear(); convService.getMessageById(messageId, toggleSwitch, new AsyncCallback() { diff --git a/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.ui.xml b/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.ui.xml index a9fb246..e023952 100755 --- a/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.ui.xml +++ b/src/main/java/org/gcube/portets/user/message_conversations/client/ui/ApplicationView.ui.xml @@ -1,7 +1,9 @@ + xmlns:mc="urn:import:org.gcube.portets.user.message_conversations.client.autocomplete" + xmlns:my="urn:import:org.gcube.portets.user.message_conversations.client.ui"> .animation { @@ -41,42 +43,47 @@ - - - - - + + + + + showOn="SHOW_ON_MED_DOWN" iconType="MESSAGE" + textColor="LIGHT_BLUE_DARKEN_2" waves="LIGHT" /> - - - - - + + + + - + - + + waves="LIGHT" backgroundColor="BLUE" ui:field="forward" + iconType="FORWARD" /> + waves="LIGHT" backgroundColor="AMBER" ui:field="replyAll" + iconType="REPLY_ALL" /> + waves="LIGHT" backgroundColor="TEAL" ui:field="reply" + iconType="REPLY" /> + diff --git a/src/main/java/org/gcube/portets/user/message_conversations/client/ui/MyMaterialCollection.java b/src/main/java/org/gcube/portets/user/message_conversations/client/ui/MyMaterialCollection.java new file mode 100644 index 0000000..282f745 --- /dev/null +++ b/src/main/java/org/gcube/portets/user/message_conversations/client/ui/MyMaterialCollection.java @@ -0,0 +1,113 @@ +package org.gcube.portets.user.message_conversations.client.ui; + +import java.util.ArrayList; +import java.util.function.Function; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.view.client.HasRows; +import com.google.gwt.view.client.Range; +import com.google.gwt.view.client.RangeChangeEvent.Handler; + +import gwt.material.design.client.ui.MaterialCollection; + +public class MyMaterialCollection extends MaterialCollection implements HasRows { + + private final int DEFAULT_LENGTH= 20; + + private boolean init_called = false; + + ArrayList objects = new ArrayList<>(); + + Function converter; + + public MyMaterialCollection(ArrayList objects, Function function) { + this.objects = objects; + this.converter = function; + } + + int start=0; + int length=DEFAULT_LENGTH; + + public void init(){ + if (init_called) GWT.log("init already called"); + else { + init_called = true; + onRangeChanged(); + } + } + + private void onRangeChanged() { + int widgetCountIndex = super.getWidgetCount()-1; + int index = widgetCountIndex-1>start ? widgetCountIndex: start; + int finish = length>objects.size()? objects.size():length ; + + for (int i =index; i= lastScrollPos) { + return; + } + + HasRows display = getDisplay(); + if (display == null) { + return; + } + int maxScrollTop = scrollable.getWidget().getOffsetHeight() + - scrollable.getOffsetHeight(); + if (lastScrollPos >= maxScrollTop) { + // We are near the end, so increase the page size. + int newPageSize = Math.min( + display.getVisibleRange().getLength() + incrementSize, + display.getRowCount()); + display.setVisibleRange(0, newPageSize); + } + } + }); + } + + /** + * Get the number of rows by which the range is increased when the scrollbar + * reaches the bottom. + * + * @return the increment size + */ + public int getIncrementSize() { + return incrementSize; + } + + @Override + public void setDisplay(HasRows display) { + assert display instanceof Widget : "display must extend Widget"; + scrollable.setWidget((Widget) display); + scrollable.scrollToTop(); + super.setDisplay(display); + } + + /** + * Set the number of rows by which the range is increased when the scrollbar + * reaches the bottom. + * + * @param incrementSize the incremental number of rows + */ + public void setIncrementSize(int incrementSize) { + GWT.log("increment of "+ incrementSize); + this.incrementSize = incrementSize; + } + + @Override + protected void onRangeOrRowCountChanged() { + GWT.log("range changed ..."); + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portets/user/message_conversations/server/ConvService.java b/src/main/java/org/gcube/portets/user/message_conversations/server/ConvService.java new file mode 100644 index 0000000..e9b1962 --- /dev/null +++ b/src/main/java/org/gcube/portets/user/message_conversations/server/ConvService.java @@ -0,0 +1,79 @@ +package org.gcube.portets.user.message_conversations.server; + +import java.util.ArrayList; + +import javax.servlet.http.HttpServletRequest; + +import org.gcube.portets.user.message_conversations.client.MessageService; +import org.gcube.portets.user.message_conversations.shared.ConvMessage; +import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper; +import org.gcube.portets.user.message_conversations.shared.WSUser; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; + +@SuppressWarnings("serial") +public class ConvService extends RemoteServiceServlet implements MessageService, HttpServletRetriever { + + MessageService delegate; + + public void init() { + delegate = new ConvServiceImpl(this); + } + + @Override + public ArrayList getMessages(boolean sent) { + return delegate.getMessages(sent); + } + + @Override + public ConvMessage getMessageById(String messageId, boolean sent) { + return delegate.getMessageById(messageId, sent); + } + + @Override + public CurrUserAndPortalUsersWrapper getWorkspaceUsers() { + return delegate.getWorkspaceUsers(); + } + + @Override + public ArrayList getUsersInfo(String[] usernames) { + return delegate.getUsersInfo(usernames); + } + + @Override + public ArrayList searchUsers(String keyword) { + return delegate.searchUsers(keyword); + } + + @Override + public boolean sendToById(ArrayList recipientIds, ArrayList listAttachmentsId, String subject, + String body) { + return delegate.sendToById(recipientIds, listAttachmentsId, subject, body); + } + + @Override + public boolean deleteMessageById(String messageId, boolean sent) { + return delegate.deleteMessageById(messageId, sent); + } + + @Override + public String getAttachmentDownloadURL(String itemId) { + return delegate.getAttachmentDownloadURL(itemId); + } + + @Override + public boolean saveAttachmentToWorkspaceFolder(String itemId, String destinationFolderId) { + return delegate.saveAttachmentToWorkspaceFolder(itemId, destinationFolderId); + } + + @Override + public boolean markMessageUnread(String messageId, boolean sent) { + return delegate.markMessageUnread(messageId, sent); + } + + @Override + public HttpServletRequest getRequest() { + return getThreadLocalRequest(); + } + +} diff --git a/src/main/java/org/gcube/portets/user/message_conversations/server/ConvServiceImpl.java b/src/main/java/org/gcube/portets/user/message_conversations/server/ConvServiceImpl.java index aa8c515..e13f1c1 100644 --- a/src/main/java/org/gcube/portets/user/message_conversations/server/ConvServiceImpl.java +++ b/src/main/java/org/gcube/portets/user/message_conversations/server/ConvServiceImpl.java @@ -37,7 +37,6 @@ import org.gcube.vomanagement.usermanagement.util.ManagementUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.model.User; @@ -47,16 +46,18 @@ import com.liferay.portal.util.PortalUtil; /** * @author Massimiliano Assante, CNR-ISTI */ -@SuppressWarnings("serial") -public class ConvServiceImpl extends RemoteServiceServlet implements MessageService { +public class ConvServiceImpl implements MessageService { private static final Logger _log = LoggerFactory.getLogger(ConvServiceImpl.class); private PortalContext pContext; private UserManager um; - public void init() { + private HttpServletRetriever requestRetriever; + + ConvServiceImpl(HttpServletRetriever servletRetriever) { um = new LiferayUserManager(); pContext = PortalContext.getConfiguration(); + requestRetriever= servletRetriever; } /** * @@ -89,7 +90,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ return null; } } else { - return pContext.getCurrentUser(getThreadLocalRequest()); + return pContext.getCurrentUser(requestRetriever.getRequest()); } } @@ -97,10 +98,10 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ public ArrayList getMessages(boolean sent) { ArrayList toReturn = new ArrayList<>(); try { - GCubeUser user = getCurrentUser(getThreadLocalRequest()); + GCubeUser user = getCurrentUser(requestRetriever.getRequest()); pContext = PortalContext.getConfiguration(); _log.debug("*** Reading user = " +user.getFullname()); - String scope = pContext.getCurrentScope(getThreadLocalRequest()); + String scope = pContext.getCurrentScope(requestRetriever.getRequest()); ScopeProvider.instance.set(scope); String token = pContext.getCurrentUserToken(scope, user.getUserId()); SecurityTokenProvider.instance.set(token); @@ -186,8 +187,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ @Override public boolean markMessageUnread(String messageId, boolean sent) { - GCubeUser user = getCurrentUser(getThreadLocalRequest()); - String scope = pContext.getCurrentScope(getThreadLocalRequest()); + GCubeUser user = getCurrentUser(requestRetriever.getRequest()); + String scope = pContext.getCurrentScope(requestRetriever.getRequest()); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); try { MessageManagerClient client = AbstractPlugin.messages().build(); @@ -203,9 +204,9 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ public ConvMessage getMessageById(String messageId, boolean sent) { ConvMessage toReturn = null; try { - GCubeUser user = getCurrentUser(getThreadLocalRequest()); + GCubeUser user = getCurrentUser(requestRetriever.getRequest()); _log.debug("*** Reading user from liferay session = " +user.getFullname()); - String scope = pContext.getCurrentScope(getThreadLocalRequest()); + String scope = pContext.getCurrentScope(requestRetriever.getRequest()); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); LiferayUserManager um = new LiferayUserManager(); MessageManagerClient client = AbstractPlugin.messages().build(); @@ -262,8 +263,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ @Override public String getAttachmentDownloadURL(String itemId) { - GCubeUser user = getCurrentUser(getThreadLocalRequest()); - String scope = pContext.getCurrentScope(getThreadLocalRequest()); + GCubeUser user = getCurrentUser(requestRetriever.getRequest()); + String scope = pContext.getCurrentScope(requestRetriever.getRequest()); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); _log.info("getAttachmentDownloadURL for user "+user.getUsername() + " file id="+itemId); try { @@ -278,8 +279,8 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ } @Override public boolean saveAttachmentToWorkspaceFolder(String itemId, String destinationFolderId) { - GCubeUser user = getCurrentUser(getThreadLocalRequest()); - String scope = pContext.getCurrentScope(getThreadLocalRequest()); + GCubeUser user = getCurrentUser(requestRetriever.getRequest()); + String scope = pContext.getCurrentScope(requestRetriever.getRequest()); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); try { StorageHubClient shc = new StorageHubClient(); @@ -294,9 +295,9 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ @Override public boolean deleteMessageById(String messageId, boolean sent) { - GCubeUser user = getCurrentUser(getThreadLocalRequest()); + GCubeUser user = getCurrentUser(requestRetriever.getRequest()); _log.debug("deleteMessageById reading user from liferay session = " +user.getFullname() + " m id = " + messageId); - String scope = pContext.getCurrentScope(getThreadLocalRequest()); + String scope = pContext.getCurrentScope(requestRetriever.getRequest()); SecurityTokenProvider.instance.set(pContext.getCurrentUserToken(scope, user.getUserId())); try { MessageManagerClient client = AbstractPlugin.messages().build(); @@ -313,7 +314,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ public ArrayList searchUsers(String keyword) { ArrayList toReturn = new ArrayList<>(); if (isWithinPortal()) { - long gatewayGroupId = pContext.getCurrentGroupId(this.getThreadLocalRequest()); + long gatewayGroupId = pContext.getCurrentGroupId(this.requestRetriever.getRequest()); try { _log.debug("Searching " + keyword); List users = um.searchUsersByGroup(keyword, gatewayGroupId); @@ -357,7 +358,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ @Override public boolean sendToById(ArrayList recipientIds, ArrayList listAttachmentsId, String subject, String body) { PortalContext pContext = PortalContext.getConfiguration(); - GCubeUser currentUser = pContext.getCurrentUser(getThreadLocalRequest()); + GCubeUser currentUser = pContext.getCurrentUser(requestRetriever.getRequest()); MessageManagerClient client = AbstractPlugin.messages().build(); try { _log.info("Sending message to: " + recipientIds.toString()); @@ -375,7 +376,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ List recipients = getUsersbyUserId(recipientIds); - NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(getThreadLocalRequest()), pContext.getCurrentScope(getThreadLocalRequest()), + NotificationsManager nm = new ApplicationNotificationsManager(new SocialNetworkingSite(requestRetriever.getRequest()), pContext.getCurrentScope(requestRetriever.getRequest()), new SocialNetworkingUser( currentUser.getUsername(), currentUser.getEmail(), @@ -472,7 +473,7 @@ public class ConvServiceImpl extends RemoteServiceServlet implements MessageServ public CurrUserAndPortalUsersWrapper getWorkspaceUsers() { PortalContext pContext = PortalContext.getConfiguration(); - GCubeUser currentUser = pContext.getCurrentUser(getThreadLocalRequest()); + GCubeUser currentUser = pContext.getCurrentUser(requestRetriever.getRequest()); _log.debug("trying to get WorkspaceUsers .."); WSUser currUser = null; ArrayList portalUsers = new ArrayList(); diff --git a/src/main/java/org/gcube/portets/user/message_conversations/server/FakeConvServiceImpl.java b/src/main/java/org/gcube/portets/user/message_conversations/server/FakeConvServiceImpl.java new file mode 100644 index 0000000..14daf64 --- /dev/null +++ b/src/main/java/org/gcube/portets/user/message_conversations/server/FakeConvServiceImpl.java @@ -0,0 +1,144 @@ +package org.gcube.portets.user.message_conversations.server; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.gcube.portets.user.message_conversations.client.MessageService; +import org.gcube.portets.user.message_conversations.shared.ConvMessage; +import org.gcube.portets.user.message_conversations.shared.CurrUserAndPortalUsersWrapper; +import org.gcube.portets.user.message_conversations.shared.MessageUserModel; +import org.gcube.portets.user.message_conversations.shared.WSUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FakeConvServiceImpl implements MessageService{ + + private static final Logger _log = LoggerFactory.getLogger(FakeConvServiceImpl.class); + + + ArrayList receivedMessages; + ArrayList sentMessages; + + Map receivedMessagesMap = new HashMap<>(); + Map sentMessagesMap = new HashMap<>(); + + + final int messageReceivedNumberToTest = 200; + final int messageSentNumberToTest = 11; + + public FakeConvServiceImpl() { + Calendar cal = Calendar.getInstance(); + MessageUserModel mu = new MessageUserModel("andrea.rossi"); + + List recipients = Arrays.asList(new MessageUserModel("lucio.lelii")); + + String prefix ="received"; + receivedMessages = new ArrayList<>(); + for (int i =0; i(); + for (int i =0; i getMessages(boolean sent) { + if (sent) { + _log.info("sent messages call with sent {}",sent); + return new ArrayList<>(sentMessages); + } + else { + _log.info("received messages call with sent {}",sent); + return new ArrayList<>(receivedMessages); + } + } + + @Override + public ConvMessage getMessageById(String messageId, boolean sent) { + _log.info("get messageById called with id {} and sent {}", messageId,sent ); + + ConvMessage msg; + if (sent) + msg = sentMessagesMap.get(messageId); + else msg = receivedMessagesMap.get(messageId); + msg.setRead(true); + return msg; + } + + @Override + public CurrUserAndPortalUsersWrapper getWorkspaceUsers() { + _log.debug("trying to get WorkspaceUsers .."); + WSUser currUser = new WSUser("andrea.rossi", "andrea.rossi", "Andrea Rossi", "m.assante@gmail.com"); + ArrayList portalUsers = new ArrayList(); + + for (int i = 0; i < 10; i++) { + portalUsers.add(new WSUser(""+i, "username"+i, "userGetFullname()"+i, "user.getEmail()"+i)); + } + + CurrUserAndPortalUsersWrapper toReturn = new CurrUserAndPortalUsersWrapper(currUser, portalUsers); + return toReturn; + } + + @Override + public ArrayList getUsersInfo(String[] usernames) { + return new ArrayList<>(Arrays.asList(new WSUser("andrea.rossi", "andrea.rossi", "Andrea Rossi", "m.assante@gmail.com"))); + } + + @Override + public ArrayList searchUsers(String keyword) { + return new ArrayList<>(Arrays.asList(new WSUser("andrea.rossi", "andrea.rossi", "Andrea Rossi", "m.assante@gmail.com"))); + + } + + @Override + public boolean sendToById(ArrayList recipientIds, ArrayList listAttachmentsId, String subject, + String body) { + _log.info("email sent"); + return true; + } + + @Override + public boolean deleteMessageById(String messageId, boolean sent) { + _log.info("message deleted"); + return true; + } + + @Override + public String getAttachmentDownloadURL(String itemId) { + return "www.google.it"; + } + + @Override + public boolean saveAttachmentToWorkspaceFolder(String itemId, String destinationFolderId) { + _log.info("attachment saved"); + return true; + } + + @Override + public boolean markMessageUnread(String messageId, boolean sent) { + _log.info("message marked"); + return true; + } + + + +} diff --git a/src/main/java/org/gcube/portets/user/message_conversations/server/HttpServletRetriever.java b/src/main/java/org/gcube/portets/user/message_conversations/server/HttpServletRetriever.java new file mode 100644 index 0000000..e5befe1 --- /dev/null +++ b/src/main/java/org/gcube/portets/user/message_conversations/server/HttpServletRetriever.java @@ -0,0 +1,8 @@ +package org.gcube.portets.user.message_conversations.server; + +import javax.servlet.http.HttpServletRequest; + +public interface HttpServletRetriever { + + HttpServletRequest getRequest(); +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index b256492..0c7b12f 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -7,7 +7,7 @@ convServlet - org.gcube.portets.user.message_conversations.server.ConvServiceImpl + org.gcube.portets.user.message_conversations.server.ConvService @@ -20,7 +20,7 @@ com.liferay.portal.kernel.servlet.PortalDelegateServlet servlet-class - org.gcube.portets.user.message_conversations.server.ConvServiceImpl + org.gcube.portets.user.message_conversations.server.ConvService sub-context