package org.exoplatform.platform.component; import java.util.List; import java.util.ResourceBundle; import org.exoplatform.platform.common.service.MenuConfiguratorService; import org.exoplatform.platform.navigation.component.breadcrumb.UserNavigationHandlerService; import org.exoplatform.platform.webui.NavigationURLUtils; import org.exoplatform.portal.application.PortalRequestContext; import org.exoplatform.portal.mop.SiteType; import org.exoplatform.portal.mop.user.UserNavigation; import org.exoplatform.portal.mop.user.UserNode; import org.exoplatform.portal.mop.user.UserPortal; import org.exoplatform.portal.webui.util.Util; import org.exoplatform.social.core.identity.model.Profile; import org.exoplatform.social.core.service.LinkProvider; import org.exoplatform.social.core.space.model.Space; import org.exoplatform.social.webui.Utils; import org.exoplatform.webui.application.WebuiApplication; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.core.UIPortletApplication; import org.exoplatform.webui.core.lifecycle.UIApplicationLifecycle; /** * @author <a href="rtouzi@exoplatform.com">rtouzi</a> */ @ComponentConfig( lifecycle = UIApplicationLifecycle.class, template = "app:/groovy/platformNavigation/portlet/UIBreadCrumbsNavigationPortlet/UIBreadCrumbsNavigationPortlet.gtmpl" ) public class UIBreadCrumbsNavigationPortlet extends UIPortletApplication { private UserNavigationHandlerService userService = null; private static final String USER = "/user/"; private static final String WIKI_HOME = "/WikiHome"; private static final String WIKI_REF = "wiki"; private static final String EDIT_PROFILE_NODE = "edit-profile"; private static final String PROFILE_PATH = "/profile"; private static final String MY_PROFILE_TITLE = "UIBreadCrumbsNavigationPortlet.title.MyProfile"; private static final String EDIT_MY_PROFILE_TITLE = "UIBreadCrumbsNavigationPortlet.title.EditProfile"; public UIBreadCrumbsNavigationPortlet() throws Exception { userService = getApplicationComponent(UserNavigationHandlerService.class); } @Override public void processRender(WebuiApplication app, WebuiRequestContext context) throws Exception { if (isUserUrl() && isOnProfilePage() || isEditProfilePage()) { ResourceBundle resApp = context.getApplicationResourceBundle(); String title = getOwnerProfile().getFullName(); if (isEditProfilePage()) { title = resApp.getString(EDIT_MY_PROFILE_TITLE); } else if (isOwner()) { title = resApp.getString(MY_PROFILE_TITLE); } Util.getPortalRequestContext().getRequest().setAttribute(PortalRequestContext.REQUEST_TITLE, title); } super.processRender(app, context); } protected UserNavigation getSelectedNode() throws Exception { UserNode node = Util.getUIPortal().getSelectedUserNode(); UserNavigation nav = getUserPortal().getNavigation(node.getNavigation().getKey()); return nav; } protected String getSpacename(String SpaceUrl) throws Exception { Space space = Utils.getSpaceService().getSpaceByUrl(SpaceUrl); if (space != null) { String spaceNAme = space.getDisplayName(); return spaceNAme; } else { return ""; } } protected String getSpaceUrl() throws Exception { String spaceUrl = null; UserNavigation nav = getSelectedNode(); String ownerId = nav.getKey().getName(); if (ownerId.contains("/spaces/")) { Space space = Utils.getSpaceService().getSpaceByGroupId(ownerId); if (space == null) { return spaceUrl; } return space.getUrl(); } return spaceUrl; } protected String getImageSource(String url) throws Exception { Space space = Utils.getSpaceService().getSpaceByUrl(url); if (space == null) { return LinkProvider.SPACE_DEFAULT_AVATAR_URL; } String spaceAvatar = space.getAvatarUrl(); return (spaceAvatar == null || spaceAvatar.isEmpty()) ? LinkProvider.SPACE_DEFAULT_AVATAR_URL : spaceAvatar; } protected String getAvatarURL(Profile profile) { String ownerAvatar = profile.getAvatarUrl(); if (ownerAvatar == null || ownerAvatar.isEmpty()) { ownerAvatar = LinkProvider.PROFILE_DEFAULT_AVATAR_URL; } return ownerAvatar; } protected boolean isUserUrl() throws Exception { List<String> uris = userService.loadUserNavigation(); UserNavigation nav = getSelectedNode(); SiteType navType = nav.getKey().getType(); UserNode node = Util.getUIPortal().getSelectedUserNode(); String uri = node.getURI(); if (uris.contains(uri) || navType.equals(SiteType.USER) || Util.getPortalRequestContext().getRequest().getRequestURL().toString().contains(getWikiURL())) { return true; } else return false; } protected boolean isEditProfilePage() throws Exception { String uri = Util.getUIPortal().getSelectedUserNode().getURI(); if (uri.endsWith(EDIT_PROFILE_NODE)) { return true; } return false; } private boolean isOnProfilePage() throws Exception { return Util.getPortalRequestContext().getRequest().getRequestURL().toString().contains(PROFILE_PATH); } private String getWikiURL() { return NavigationURLUtils.getURLInCurrentPortal(WIKI_REF) + USER + getCurrentLogin() + WIKI_HOME; } public static String getCurrentLogin() { String currentUserName = org.exoplatform.platform.navigation.component.utils.NavigationUtils.getCurrentLoginUser(); if (currentUserName == null || currentUserName.equals("")) { return Utils.getViewerRemoteId(); } return currentUserName; } private Profile getOwnerProfile() { return Utils.getOwnerIdentity(true).getProfile(); } protected boolean isGroupUrl() throws Exception { List<UserNode> setupMenuUserNodes = getApplicationComponent(MenuConfiguratorService.class).getSetupMenuItems(getUserPortal()); UserNode node = Util.getUIPortal().getSelectedUserNode(); boolean isAdminUrl = false; for (UserNode menuNode : setupMenuUserNodes) { if (menuNode.getURI().equals(node.getURI()) && menuNode.getPageRef().equals(node.getPageRef())) { isAdminUrl = true; break; } } if (isAdminUrl || node.getURI().equals("search")) { return true; } else { return false; } } protected static String getEncodedResolvedLabel() throws Exception { UserNode node = Util.getUIPortal().getSelectedUserNode(); UserPortal userPortal = getUserPortal(); UserNavigation nav = userPortal.getNavigation(node.getNavigation().getKey()); UserNode targetNode = userPortal.resolvePath(nav, null, node.getURI()); return targetNode.getResolvedLabel(); } private static UserPortal getUserPortal() { return Util.getPortalRequestContext().getUserPortalConfig().getUserPortal(); } protected boolean isSpaceUrl() throws Exception { String urlPath = Util.getPortalRequestContext().getRequest().getRequestURI(); UserNavigation nav = getSelectedNode(); SiteType navType = nav.getKey().getType(); if (urlPath.contains(":spaces:") && navType.equals(SiteType.GROUP)) { return true; } else { return false; } } protected boolean isOwner() { return Utils.isOwner(); } }