diff --git a/mobile-integration/portlets/header/pom.xml b/mobile-integration/portlets/header/pom.xml index efadab29d..47d6932b9 100644 --- a/mobile-integration/portlets/header/pom.xml +++ b/mobile-integration/portlets/header/pom.xml @@ -26,6 +26,17 @@ 1.6 + + org.apache.maven.plugins + maven-war-plugin + + + + org.gatein.common + + + + diff --git a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderBean.java b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderBean.java index 9e40847a9..ce7b0135c 100644 --- a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderBean.java +++ b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderBean.java @@ -40,8 +40,6 @@ import org.gatein.api.site.SiteQuery; import org.gatein.api.site.SiteType; -import com.google.javascript.jscomp.FindExportableNodes.GenerateNodeContext; - /** * @author Matt Wringe * @version $Revision$ @@ -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(); @@ -111,16 +119,16 @@ public Map 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; } + } diff --git a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderPortlet.java b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderPortlet.java index 1ffa49d5c..eb2b329f8 100644 --- a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderPortlet.java +++ b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/HeaderPortlet.java @@ -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 Matt Wringe * @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; + } } diff --git a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodeBean.java b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodeBean.java index cfd6b405c..c7b24bc96 100644 --- a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodeBean.java +++ b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodeBean.java @@ -44,6 +44,8 @@ public class NodeBean { List children; + protected boolean showEmptyCategories = false; + public List getChildren() { return children; } @@ -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 nodeChildrenList = getChildren(node, siteId, false, showEmptyCategories); + if (!showEmptyCategories) { + setEmptyCategory(isEmptyCategory(node)); + } + setChildren(nodeChildrenList); } /** @@ -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 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) { diff --git a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodePortlet.java b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodePortlet.java index b58fb4ce7..c0bd43208 100644 --- a/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodePortlet.java +++ b/mobile-integration/portlets/header/src/main/java/org/gatein/portlet/responsive/header/NodePortlet.java @@ -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 @@ -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); @@ -146,4 +149,5 @@ protected boolean getShowEmptyCategory(PortletRequest request) { return Boolean.valueOf(showEmptyCategoryStringValue); } + protected abstract int getNodeLevel(PortletRequest request); } diff --git a/mobile-integration/portlets/header/src/main/webapp/WEB-INF/portlet.xml b/mobile-integration/portlets/header/src/main/webapp/WEB-INF/portlet.xml index 32bdbb8b3..9474e7cff 100644 --- a/mobile-integration/portlets/header/src/main/webapp/WEB-INF/portlet.xml +++ b/mobile-integration/portlets/header/src/main/webapp/WEB-INF/portlet.xml @@ -28,6 +28,10 @@ enable.grouppages.link true + + level + 2 + diff --git a/mobile-integration/portlets/header/src/main/webapp/jsp/header.jsp b/mobile-integration/portlets/header/src/main/webapp/jsp/header.jsp index 49383e2d4..d4803e7ae 100644 --- a/mobile-integration/portlets/header/src/main/webapp/jsp/header.jsp +++ b/mobile-integration/portlets/header/src/main/webapp/jsp/header.jsp @@ -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 --%> diff --git a/mobile-integration/portlets/header/src/main/webapp/jsp/node.jsp b/mobile-integration/portlets/header/src/main/webapp/jsp/node.jsp index 35dfeacaf..d130a8789 100644 --- a/mobile-integration/portlets/header/src/main/webapp/jsp/node.jsp +++ b/mobile-integration/portlets/header/src/main/webapp/jsp/node.jsp @@ -29,7 +29,7 @@ limitations under the License.