diff --git a/distro/changelog.xml b/distro/changelog.xml
index 1bfcc55..82fb39a 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -3,6 +3,7 @@
date="2016-12-02">
removed asl session
Increased general performance and bugfixes
+ fetching of users list to mention in comments loaded on demand
diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SuperPosedTextArea.java b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SuperPosedTextArea.java
index 111bbaa..778337c 100644
--- a/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SuperPosedTextArea.java
+++ b/src/main/java/org/gcube/portlets/user/newsfeed/client/ui/SuperPosedTextArea.java
@@ -9,7 +9,6 @@ import java.util.HashSet;
import org.gcube.portlets.user.gcubewidgets.client.elements.Div;
import org.gcube.portlets.user.newsfeed.client.NewsService;
import org.gcube.portlets.user.newsfeed.client.NewsServiceAsync;
-import org.gcube.portlets.user.newsfeed.client.panels.NewsFeedPanel;
import org.gcube.portlets.widgets.pickitem.client.dialog.PickItemsDialog;
import org.gcube.portlets.widgets.pickitem.client.events.PickedItemEvent;
import org.gcube.portlets.widgets.pickitem.client.events.PickedItemEventHandler;
@@ -17,6 +16,8 @@ import org.gcube.portlets.widgets.pickitem.shared.ItemBean;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
@@ -38,7 +39,7 @@ public class SuperPosedTextArea extends TextArea {
private final HandlerManager eventBus = new HandlerManager(null);
- private PickItemsDialog pickUserDlg;
+ private PickItemsDialog pickUserDlg = null;
private Div highlighterDIV;
public final static int ARROW_UP = 38;
public final static int ARROW_DOWN = 40;
@@ -59,18 +60,6 @@ public class SuperPosedTextArea extends TextArea {
this.highlighterDIV = highlighterDIV;
//needed to give unique identifiers to the Area (for the jQuery plugin)
areaId = "postTextArea"+Random.nextInt();
-
- newsService.getOrganizationUsers(new AsyncCallback>() {
-
- @Override
- public void onSuccess(ArrayList users) {
- pickUserDlg = new PickItemsDialog('@', users, eventBus, 460);
- }
-
- @Override
- public void onFailure(Throwable caught) {
- }
- });
getElement().setAttribute("id", areaId);
bind();
Timer t = new Timer() {
@@ -84,7 +73,23 @@ public class SuperPosedTextArea extends TextArea {
this.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
- pickUserDlg.onKeyPress(getCursorPos(), event.getUnicodeCharCode(), getAbsoluteLeft(), getAbsoluteTop()+getOffsetHeight(), getText());
+ if (pickUserDlg != null)
+ pickUserDlg.onKeyPress(getCursorPos(), event.getUnicodeCharCode(), getAbsoluteLeft(), getAbsoluteTop()+getOffsetHeight(), getText());
+ }
+ });
+ this.addFocusHandler(new FocusHandler() {
+ @Override
+ public void onFocus(FocusEvent event) {
+ newsService.getOrganizationUsers(new AsyncCallback>() {
+ @Override
+ public void onSuccess(ArrayList users) {
+ pickUserDlg = new PickItemsDialog('@', users, eventBus, 460);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ }
+ });
}
});
diff --git a/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java b/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java
index 7cea707..d58b44f 100644
--- a/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/user/newsfeed/server/NewsServiceImpl.java
@@ -59,10 +59,12 @@ import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.TeamRetrievalFault;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
+import org.gcube.vomanagement.usermanagement.exception.VirtualGroupNotExistingException;
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager;
import org.gcube.vomanagement.usermanagement.model.GCubeGroup;
+import org.gcube.vomanagement.usermanagement.model.GCubeTeam;
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -85,7 +87,8 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
private static final String REFRESH_TIME = "REFRESH_TIME";
private static final String SESSION_ADMIN_ATTR = "SESSION_ADMIN_ATTR";
-
+ public static final String NF_ORGANIZATIONUSERS_CACHE = "NF_ORGANIZATIONUSERS_CACHE";
+ public static final String LAST_RETRIEVED_TIME = "NF_LAST_RETRIEVED_TIME";
private String APP_ID;
@@ -893,12 +896,41 @@ public class NewsServiceImpl extends RemoteServiceServlet implements NewsService
}
@Override
public ArrayList getOrganizationUsers() {
+ ArrayList portalBeans = new ArrayList();
PortalContext pContext = PortalContext.getConfiguration();
- String userName = pContext.getCurrentUser(getThreadLocalRequest()).getUsername();
- String currentScope = pContext.getCurrentScope(getThreadLocalRequest());
- ArrayList toReturn = Utils.getDisplayableItemBeans(currentScope, userName, isWithinPortal());
- _log.trace("Returning " + toReturn.size() + " users for scope " + currentScope);
- return toReturn;
+ GCubeUser currentUser = pContext.getCurrentUser(getThreadLocalRequest());
+ String userName = currentUser.getUsername();
+ UserManager um = new LiferayUserManager();
+ GroupManager gm = new LiferayGroupManager();
+ long currentGroupId = pContext.getCurrentGroupId(getThreadLocalRequest());
+ Set users = new HashSet<>();
+ List teams = new ArrayList<>(); //TODO: teams should be added also in root Mode
+ try {
+ if (gm.isRootVO(currentGroupId)) {
+ Set userGroups = gm.listGroupsByUserAndSite(currentUser.getUserId(), getThreadLocalRequest().getServerName());
+ for (GCubeGroup userGroup : userGroups) {
+ if (gm.isVRE(userGroup.getGroupId())) {
+ users.addAll(um.listUsersByGroup(userGroup.getGroupId()));
+ _log.debug("getOrganizationUsers added users of group " + userGroup.getGroupId());
+ }
+ }
+ } else { //is a VRE
+ users.addAll(um.listUsersByGroup(currentGroupId));
+ teams = new LiferayRoleManager().listTeamsByGroup(currentGroupId);
+ }
+ } catch (UserManagementSystemException | GroupRetrievalFault | UserRetrievalFault | VirtualGroupNotExistingException e) {
+ e.printStackTrace();
+ }
+ for (GCubeUser user : users) {
+ if (user.getUsername().compareTo("test.user") != 0 && user.getUsername().compareTo(userName) != 0) { //skip test.user & current user
+ portalBeans.add(new ItemBean(user.getUserId()+"", user.getUsername(), user.getFullname(), user.getUserAvatarURL()));
+ }
+ }
+ for (GCubeTeam gCubeTeam : teams) {
+ portalBeans.add(new ItemBean(gCubeTeam.getTeamId()+"", gCubeTeam.getTeamName()));
+ }
+ _log.trace("Returning " + portalBeans.size() + " users for scope groupid = " + currentGroupId);
+ return portalBeans;
}
/**