UIMiniConnectionsPortlet.java
- /*
- * Copyright (C) 2003-2015 eXo Platform SAS.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package org.exoplatform.social.user.portlet;
- import java.util.List;
- import javax.portlet.MimeResponse;
- import javax.portlet.ResourceRequest;
- import org.apache.commons.lang.StringEscapeUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.exoplatform.social.core.identity.model.Identity;
- import org.exoplatform.social.core.identity.model.Profile;
- import org.exoplatform.social.core.profile.ProfileFilter;
- import org.exoplatform.social.webui.Utils;
- import org.exoplatform.webui.application.WebuiRequestContext;
- import org.exoplatform.webui.config.annotation.ComponentConfig;
- import org.exoplatform.webui.config.annotation.EventConfig;
- import org.exoplatform.webui.core.lifecycle.UIApplicationLifecycle;
- import org.exoplatform.webui.event.Event;
- import org.exoplatform.webui.event.EventListener;
- import org.json.JSONObject;
- @ComponentConfig(
- lifecycle = UIApplicationLifecycle.class,
- template = "app:/groovy/social/portlet/user/UIMiniConnectionsPortlet.gtmpl",
- events = {
- @EventConfig(listeners = UIMiniConnectionsPortlet.RemoveConnectionActionListener.class)
- }
- )
- public class UIMiniConnectionsPortlet extends UIAbstractUserPortlet {
- protected final static int MAX_DISPLAY = 12;
- private static final String PROFILE_LOADING_RESOURCE = "profile-loading";
- private static final String SIZE_LOADING_RESOURCE = "size-loading";
- private static int connectionSize = 0;
- public UIMiniConnectionsPortlet() throws Exception {
- }
-
- @Override
- public void afterProcessRender(WebuiRequestContext context) {
- super.afterProcessRender(context);
- context.getJavascriptManager().getRequireJS()
- .require("SHARED/user-profile", "userprofile").addScripts("userprofile.loadingProfile('" + getId() + "');");
- }
- private int getAllSize() throws Exception {
- return Utils.getRelationshipManager().getConnectionsByFilter(currentProfile.getIdentity(), new ProfileFilter()).getSize();
- }
- @Override
- public void serveResource(WebuiRequestContext context) throws Exception {
- super.serveResource(context);
- ResourceRequest req = context.getRequest();
- MimeResponse res = context.getResponse();
- String resourceId = req.getResourceID();
- if (PROFILE_LOADING_RESOURCE.equals(resourceId)) {
- res.setContentType("text/html");
- //
- res.getWriter().write(profileListHTML());
- } else if (SIZE_LOADING_RESOURCE.equals(resourceId)) {
- res.setContentType("application/json");
- int size = (connectionSize < MAX_DISPLAY) ? connectionSize : getAllSize();
- JSONObject object = new JSONObject();
- object.put("size", size);
- object.put("showAll", (size > 0));
- //
- res.getWriter().write(object.toString());
- }
- }
- private String profileListHTML() throws Exception {
- StringBuilder html = new StringBuilder("");
- List<Identity> identities = Utils.getRelationshipManager().getLastConnections(currentProfile.getIdentity(), MAX_DISPLAY);
- connectionSize = identities.size();
- for (Identity identity : identities) {
- ProfileBean profile = new ProfileBean(identity);
- html.append("<a href=\"").append(profile.getProfileURL()).append("\" class=\"avatarXSmall\" data-link=\"")
- .append(event("RemoveConnection")).append("\">\n <img alt=\"").append(StringEscapeUtils.escapeHtml(profile.getDisplayName()))
- .append("\" src=\"").append(profile.getAvatarURL()).append("\"/>\n</a>\n");
- }
- return html.toString();
- }
- public static class RemoveConnectionActionListener extends EventListener<UIMiniConnectionsPortlet> {
- @Override
- public void execute(Event<UIMiniConnectionsPortlet> event) throws Exception {
- event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource());
- }
- }
- protected class ProfileBean {
- private final String avatarURL;
- private final String displayName;
- private final String profileURL;
- private final String userId;
- public ProfileBean(Identity identity) {
- this.userId = identity.getRemoteId();
- //
- Profile profile = identity.getProfile();
- this.displayName = profile.getFullName();
- this.profileURL = profile.getUrl();
- String avatarURL = profile.getAvatarUrl();
- if (StringUtils.isBlank(avatarURL) || avatarURL.equalsIgnoreCase("null")) {
- avatarURL = "/eXoSkin/skin/images/system/UserAvtDefault.png";
- }
- this.avatarURL = avatarURL;
- }
- public String getUserId() {
- return userId;
- }
- public String getAvatarURL() {
- return avatarURL;
- }
- public String getDisplayName() {
- return displayName;
- }
- public String getProfileURL() {
- return profileURL;
- }
- }
- }