Skip to content
This repository has been archived by the owner on Apr 8, 2019. It is now read-only.

Commit

Permalink
GTNPORTAL-3048: add portlet preference to header to specify levels of…
Browse files Browse the repository at this point in the history
… node to fetch on each ajax request.

Minor code cleanup.
  • Loading branch information
mwringe authored and bdaw committed May 24, 2013
1 parent 236a012 commit bf3095d
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 39 deletions.
11 changes: 11 additions & 0 deletions mobile-integration/portlets/header/pom.xml
Expand Up @@ -26,6 +26,17 @@
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<dependencies>org.gatein.common</dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
Expand Up @@ -40,8 +40,6 @@
import org.gatein.api.site.SiteQuery;
import org.gatein.api.site.SiteType;

import com.google.javascript.jscomp.FindExportableNodes.GenerateNodeContext;

/**
* @author <a href="mailto:mwringe@redhat.com">Matt Wringe</a>
* @version $Revision$
Expand All @@ -52,11 +50,21 @@ public class HeaderBean {
private static final String REGISTER_NODE = "register";

private final SSOHelper ssoHelper;
protected int nodeLevel;

public HeaderBean() {
public HeaderBean(int nodeLevel) {
this.nodeLevel = nodeLevel;
ssoHelper = (SSOHelper) ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(SSOHelper.class);
}

public void setNodeLevel(int nodeLevel) {
this.nodeLevel = nodeLevel;
}

public int getNodeLevel() {
return nodeLevel;
}

public String generateLoginLink(String defaultAction) {
if (ssoHelper != null) {
PortalRequestContext pContext = Util.getPortalRequestContext();
Expand Down Expand Up @@ -111,16 +119,16 @@ public Map<String, NodeBean> getGroupNodes() throws Exception {
if (portalRequest.getPortal().hasPermission(portalRequest.getUser(), site.getAccessPermission())
&& !site.getName().equals("/platform/guests")) {
Navigation siteNavigation = portalRequest.getPortal().getNavigation(site.getId());
Node node = siteNavigation.getRootNode(Nodes.visitNodes(2));
Node node = siteNavigation.getRootNode(Nodes.visitNodes(this.nodeLevel));
if (node.isVisible()) {
String groupLabel = OrganizationUtils.getGroupLabel(siteNavigation.getSiteId().getName().toString());
NodeBean nodeBean = new NodeBean(node, site.getId());
NodeBean nb2 = nodeBean.generateNodeBean(node, site.getId(), true);
navNodes.put(groupLabel, nb2);
NodeBean nodeBean = new NodeBean(node, site.getId(), true);
navNodes.put(groupLabel, nodeBean);
}
}
}

return navNodes;
}

}
Expand Up @@ -25,32 +25,56 @@
import java.io.IOException;

import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;

/**
* @author <a href="mailto:mwringe@redhat.com">Matt Wringe</a>
* @version $Revision$
*/
public class HeaderPortlet extends NodePortlet {

private static final Logger log = LoggerFactory.getLogger(HeaderPortlet.class);
private final int DEFAULT_NODE_LEVEL = 2;
public static final String NODE_LEVEL_PREFERENCE = "level";

HeaderBean headerBean;

public HeaderPortlet() {
headerBean = new HeaderBean();
headerBean = new HeaderBean(DEFAULT_NODE_LEVEL);
}

@Override
protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
headerBean.setNodeLevel(getNodeLevel(request));
request.setAttribute("headerbean", headerBean);
PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher("/jsp/header.jsp");
prd.include(request, response);
}

@Override
public void serveResource(javax.portlet.ResourceRequest request, javax.portlet.ResourceResponse response)
throws PortletException, IOException {
super.serveResource(request, response);
};
protected int getNodeLevel(PortletRequest request) {
int nodeLevel = DEFAULT_NODE_LEVEL;
try {
nodeLevel = Integer.valueOf(request.getPreferences().getValue(NODE_LEVEL_PREFERENCE,
String.valueOf(DEFAULT_NODE_LEVEL)));
} catch (NumberFormatException nfe) {
log.warn("Preference for Node level can only be an integer. Received invalid value of : "
+ request.getPreferences().getValue(NODE_LEVEL_PREFERENCE, null) + ". Using default value: "
+ DEFAULT_NODE_LEVEL);
}

if (nodeLevel < 2) {
nodeLevel = 2;
log.warn("Preference for Node level must be greater than 1. Current value of "
+ request.getPreferences().getValue(NODE_LEVEL_PREFERENCE, null) + " is invalid. Using default value of "
+ DEFAULT_NODE_LEVEL);
}
return nodeLevel;
}
}
Expand Up @@ -44,6 +44,8 @@ public class NodeBean {

List<NodeBean> children;

protected boolean showEmptyCategories = false;

public List<NodeBean> getChildren() {
return children;
}
Expand Down Expand Up @@ -85,13 +87,19 @@ public boolean isSystem() {
* @param node A node to be encapsulated by this NavigationNodeBean.
*/
public NodeBean(Node node, SiteId siteId) {
this.node = node;
this.siteId = siteId;
this(node, siteId, false);
}

public NodeBean(Node node, SiteId siteId, Boolean showEmptyCategory) {
public NodeBean(Node node, SiteId siteId, Boolean showEmptyCategories) {
this.node = node;
this.siteId = siteId;
this.showEmptyCategories = showEmptyCategories;

List<NodeBean> nodeChildrenList = getChildren(node, siteId, false, showEmptyCategories);
if (!showEmptyCategories) {
setEmptyCategory(isEmptyCategory(node));
}
setChildren(nodeChildrenList);
}

/**
Expand Down Expand Up @@ -171,16 +179,6 @@ public String getURI() {
return node.getURI();
}

protected NodeBean generateNodeBean(Node node, SiteId siteId, boolean showEmptyCategory) {
NodeBean nodeBean = new NodeBean(node, siteId);
List<NodeBean> nodeChildrenList = getChildren(node, siteId, false, showEmptyCategory);
if (!showEmptyCategory) {
nodeBean.setEmptyCategory(isEmptyCategory(node));
}
nodeBean.setChildren(nodeChildrenList);
return nodeBean;
}

private boolean isEmptyCategory(Node n) {

if (n.getPageId() != null) {
Expand Down
Expand Up @@ -41,11 +41,15 @@
import org.gatein.api.navigation.NodePath;
import org.gatein.api.navigation.Nodes;
import org.gatein.api.site.SiteId;
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;

public class NodePortlet extends GenericPortlet {
public abstract class NodePortlet extends GenericPortlet {

private static final Logger log = LoggerFactory.getLogger(NodePortlet.class);

private final String EMPTY_CATEGORY_PROPERTY_NAME = "ShowEmptyCategories";
public static final String NODE_RESOURCE_ID_PREFIX = "node:";
public static final String NODE_RESOURCE_ID = "node";

/**
* The serveResource method is used for handling AJAX requests. It's used for the rendering of sub-menus. Anytime users
Expand All @@ -63,14 +67,13 @@ public class NodePortlet extends GenericPortlet {
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
String resourceID = request.getResourceID();

if (resourceID != null && resourceID.startsWith(NODE_RESOURCE_ID_PREFIX)) {
if (resourceID != null && resourceID.equals(NODE_RESOURCE_ID)) {
String siteId = request.getParameter("siteId");
Navigation navigation = PortalRequest.getInstance().getPortal().getNavigation(SiteId.fromString(siteId));

String chosenNodeURI = resourceID.substring(NODE_RESOURCE_ID_PREFIX.length());
// String siteId = request.getParameter("siteId");
String chosenNodeURI = request.getParameter("uri");

Node chosenNode = navigation.getNode(NodePath.fromString(chosenNodeURI), Nodes.visitNodes(2));
Node chosenNode = navigation.getNode(NodePath.fromString(chosenNodeURI), Nodes.visitNodes(getNodeLevel(request)));

boolean showEmptyCategory = getShowEmptyCategory(request);

Expand Down Expand Up @@ -146,4 +149,5 @@ protected boolean getShowEmptyCategory(PortletRequest request) {
return Boolean.valueOf(showEmptyCategoryStringValue);
}

protected abstract int getNodeLevel(PortletRequest request);
}
Expand Up @@ -28,6 +28,10 @@
<name>enable.grouppages.link</name>
<value>true</value>
</preference>
<preference>
<name>level</name>
<value>2</value>
</preference>
</portlet-preferences>
</portlet>
</portlet-app>
Expand Up @@ -10,13 +10,9 @@
<%-- Hack because web ui can't properly handle javascript modules after a full ajax page reload --%>
<%
JavascriptManager jsMan = ((WebuiRequestContext)WebuiRequestContext.getCurrentInstance()).getJavascriptManager();
jsMan.require("SHARED/org_gatein_responsive_collapsiblecontainer", "collapsibleContainer")
.addScripts("collapsibleContainer.init();");
jsMan.require("SHARED/org_gatein_responsive_dropdownmenu_jquery", "dropdownmenu")
.addScripts("dropdownmenu.init();");
jsMan.require("SHARED/org_gatein_responsive_menu", "menu")
.addScripts("menu.init();");
jsMan.require("SHARED/org_gatein_responsive_collapsiblecontainer", "collapsibleContainer").addScripts("collapsibleContainer.init();");
jsMan.require("SHARED/org_gatein_responsive_dropdownmenu_jquery", "dropdownmenu").addScripts("dropdownmenu.init();");
jsMan.require("SHARED/org_gatein_responsive_menu", "menu").addScripts("menu.init();");
%>

<%-- The resourceBundle used to retrieve locale string values --%>
Expand Down
Expand Up @@ -29,7 +29,7 @@ limitations under the License.
<ol class="menu">
<c:forEach var="node" items="${parentNode.children}">

<portlet:resourceURL var="ajaxResourceURL" id="node:${node.path}">
<portlet:resourceURL var="ajaxResourceURL" id="node">
<portlet:param name="uri" value="${node.path}" />
<portlet:param name="siteId" value="${node.siteId}"/>
</portlet:resourceURL>
Expand Down

0 comments on commit bf3095d

Please sign in to comment.