You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by le...@apache.org on 2009/06/16 06:37:43 UTC

svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java

Author: lektran
Date: Tue Jun 16 04:37:42 2009
New Revision: 785077

URL: http://svn.apache.org/viewvc?rev=785077&view=rev
Log:
Complete the partial support for nested menu items, e.g.
<menu-item name="a" title="A">
    <link target="aLink"></link>
    <menu-item name="b" title="B">
        <link target="bLink"/>
    </menu-item>
</menu-item>
basically renders:
<li>
  <a href="aLink">A</a>
  <ul>
    <li>
      <a href="bLink">B</a>
    </li>
  </ul>
</li>

Modified:
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java?rev=785077&r1=785076&r2=785077&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java Tue Jun 16 04:37:42 2009
@@ -183,6 +183,24 @@
         //if (Debug.infoOn()) Debug.logInfo("in HtmlMenuRendererImage, link(0):" + link,"");
         if (link != null) {
             renderLink(writer, context, link);
+        } else {
+            String txt = menuItem.getTitle(context);
+            StringUtil.SimpleEncoder simpleEncoder = (StringUtil.SimpleEncoder) context.get("simpleEncoder");
+            if (simpleEncoder != null) {
+                txt = simpleEncoder.encode(txt);
+            }
+            writer.append(txt);
+            
+        }
+        if (!menuItem.getMenuItemList().isEmpty()) {
+            appendWhitespace(writer);
+            writer.append("    <ul>");
+            appendWhitespace(writer);
+            for (ModelMenuItem childMenuItem : menuItem.getMenuItemList()) {
+                childMenuItem.renderMenuItemString(writer, context, this);
+            }
+            writer.append("    </ul>");
+            appendWhitespace(writer);
         }
 
         writer.append("</li>");

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java?rev=785077&r1=785076&r2=785077&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java Tue Jun 16 04:37:42 2009
@@ -345,60 +345,7 @@
         // include portal pages if specified
         //menuStringRenderer.renderFormatSimpleWrapperRows(writer, context, this);
         for (ModelMenuItem item : this.menuItemList) {
-            String parentPortalPageId = item.getParentPortalPageId(context);
-            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
-                List <GenericValue> portalPages = null;
-                try {
-                    // first get public pages
-                    EntityCondition cond =
-                        EntityCondition.makeCondition(UtilMisc.toList(
-                            EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, "_NA_"),
-                            EntityCondition.makeCondition(UtilMisc.toList(
-                                    EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS, parentPortalPageId),
-                                    EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)),
-                                    EntityOperator.OR)),
-                            EntityOperator.AND);
-                    portalPages = delegator.findList("PortalPage", cond, null, null, null, false);
-                    if (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a user is logged in
-                        String userLoginId = ((GenericValue)context.get("userLogin")).getString("userLoginId");
-                        // replace with private pages
-                        for (GenericValue portalPage : portalPages) {
-                            cond = EntityCondition.makeCondition(UtilMisc.toList(
-                                    EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId),
-                                    EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, portalPage.getString("portalPageId"))),
-                                    EntityOperator.AND);
-                            List <GenericValue> privatePortalPages = delegator.findList("PortalPage", cond, null, null, null, false);
-                            if (UtilValidate.isNotEmpty(privatePortalPages)) {
-                                portalPages.remove(portalPage);
-                                portalPages.add(privatePortalPages.get(0));
-                            }
-                        }
-                        // add any other created private pages
-                        cond = EntityCondition.makeCondition(UtilMisc.toList(
-                                EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId),
-                                EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, null),
-                                EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)),
-                                EntityOperator.AND);
-                        portalPages.addAll(delegator.findList("PortalPage", cond, null, null, null, false));
-                    }
-                    portalPages = EntityUtil.orderBy(portalPages, UtilMisc.toList("sequenceNum"));
-                } catch (GenericEntityException e) {
-                    Debug.logError("Could not retrieve portalpages in the menu:" + e.getMessage(), module);
-                }
-                for (GenericValue portalPage : portalPages) {
-                    if (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
-                        ModelMenuItem localItem = new ModelMenuItem(item.getModelMenu());
-                        localItem.name =  portalPage.getString("portalPageId");
-                        localItem.setTitle(portalPage.getString("portalPageName"));
-                        localItem.link = new Link(item);
-                        localItem.link.setTarget("showPortalPage?portalPageId=" + portalPage.getString("portalPageId") + "&parentPortalPageId=" + parentPortalPageId);
-                        localItem.link.setText(portalPage.getString("portalPageName"));
-                        localItem.renderMenuItemString(writer, context, menuStringRenderer);
-                    }
-                }
-            } else {
                 item.renderMenuItemString(writer, context, menuStringRenderer);
-            }
         }
         // render formatting wrapper close
         menuStringRenderer.renderFormatSimpleWrapperClose(writer, context, this);

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=785077&r1=785076&r2=785077&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java Tue Jun 16 04:37:42 2009
@@ -31,9 +31,16 @@
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.StringUtil;
 import org.ofbiz.base.util.UtilFormatOut;
+import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.string.FlexibleStringExpander;
+import org.ofbiz.entity.GenericDelegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.condition.EntityCondition;
+import org.ofbiz.entity.condition.EntityOperator;
+import org.ofbiz.entity.util.EntityUtil;
 import org.ofbiz.entityext.permission.EntityPermissionChecker;
 import org.ofbiz.widget.WidgetWorker;
 import org.w3c.dom.Element;
@@ -200,6 +207,9 @@
         }
     }
 
+    public List<ModelMenuItem> getMenuItemList() {
+        return menuItemList;
+    }
 
     public void setHideIfSelected(String val) {
         if (UtilValidate.isNotEmpty(val))
@@ -248,7 +258,7 @@
 
     public void renderMenuItemString(Appendable writer, Map<String, Object> context, MenuStringRenderer menuStringRenderer) throws IOException {
 
-          boolean passed = true;
+        boolean passed = true;
         if (this.condition != null) {
             if (!this.condition.eval(context)) {
                 passed = false;
@@ -257,7 +267,23 @@
            //Debug.logInfo("in ModelMenu, name:" + this.getName(), module);
         if (passed) {
             ModelMenuAction.runSubActions(this.actions, context);
-            menuStringRenderer.renderMenuItem(writer, context, this);
+            String parentPortalPageId = this.getParentPortalPageId(context);
+            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
+                List<GenericValue> portalPages = this.getPortalPages(context);
+                for (GenericValue portalPage : portalPages) {
+                    if (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
+                        ModelMenuItem localItem = new ModelMenuItem(this.getModelMenu());
+                        localItem.name =  portalPage.getString("portalPageId");
+                        localItem.setTitle(portalPage.getString("portalPageName"));
+                        localItem.link = new Link(this);
+                        localItem.link.setTarget("showPortalPage?portalPageId=" + portalPage.getString("portalPageId") + "&parentPortalPageId=" + parentPortalPageId);
+                        localItem.link.setText(portalPage.getString("portalPageName"));
+                        menuStringRenderer.renderMenuItem(writer, context, localItem);
+                    }
+                }
+            } else {
+                menuStringRenderer.renderMenuItem(writer, context, this);
+            }
         }
     }
 
@@ -354,6 +380,51 @@
         return this.parentPortalPageId.expandString(context);
     }
 
+    public List<GenericValue> getPortalPages(Map<String, Object> context) {
+        List<GenericValue> portalPages = null;
+        String parentPortalPageId = this.getParentPortalPageId(context);
+        if (UtilValidate.isNotEmpty(parentPortalPageId)) {
+            GenericDelegator delegator = modelMenu.getDelegator();
+            try {
+                // first get public pages
+                EntityCondition cond =
+                    EntityCondition.makeCondition(UtilMisc.toList(
+                        EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, "_NA_"),
+                        EntityCondition.makeCondition(UtilMisc.toList(
+                                EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS, parentPortalPageId),
+                                EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)),
+                                EntityOperator.OR)),
+                        EntityOperator.AND);
+                portalPages = delegator.findList("PortalPage", cond, null, null, null, false);
+                if (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a user is logged in
+                    String userLoginId = ((GenericValue)context.get("userLogin")).getString("userLoginId");
+                    // replace with private pages
+                    for (GenericValue portalPage : portalPages) {
+                        cond = EntityCondition.makeCondition(UtilMisc.toList(
+                                EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId),
+                                EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, portalPage.getString("portalPageId"))),
+                                EntityOperator.AND);
+                        List <GenericValue> privatePortalPages = delegator.findList("PortalPage", cond, null, null, null, false);
+                        if (UtilValidate.isNotEmpty(privatePortalPages)) {
+                            portalPages.remove(portalPage);
+                            portalPages.add(privatePortalPages.get(0));
+                        }
+                    }
+                    // add any other created private pages
+                    cond = EntityCondition.makeCondition(UtilMisc.toList(
+                            EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId),
+                            EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, null),
+                            EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)),
+                            EntityOperator.AND);
+                    portalPages.addAll(delegator.findList("PortalPage", cond, null, null, null, false));
+                }
+                portalPages = EntityUtil.orderBy(portalPages, UtilMisc.toList("sequenceNum"));
+            } catch (GenericEntityException e) {
+                Debug.logError("Could not retrieve portalpages in the menu:" + e.getMessage(), module);
+            }
+        }
+        return portalPages;
+    }
     public String getWidgetStyle() {
         if (UtilValidate.isNotEmpty(this.widgetStyle)) {
             return this.widgetStyle;



Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java

Posted by Scott Gray <sc...@hotwaxmedia.com>.
Thanks David, its still not entirely there though, we'll need to get some javascript code in there at some point to make the nested menus usable.  Also there was no support in the xsd for applying attributes (class, id, etc) to the nested ul element.

Regards
Scott

HotWax Media
http://www.hotwaxmedia.com
801.657.2909

----- Original Message -----
From: "David E Jones" <de...@me.com>
To: dev@ofbiz.apache.org
Cc: commits@ofbiz.apache.org
Sent: Tuesday, June 16, 2009 6:04:12 PM (GMT+1000) Auto-Detected
Subject: Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java


Very cool Scott! I guess it's about time that this part of the  
original design was supported by the implementation... ;)

-David


On Jun 15, 2009, at 10:37 PM, lektran@apache.org wrote:

> Author: lektran
> Date: Tue Jun 16 04:37:42 2009
> New Revision: 785077
>
> URL: http://svn.apache.org/viewvc?rev=785077&view=rev
> Log:
> Complete the partial support for nested menu items, e.g.
> <menu-item name="a" title="A">
>    <link target="aLink"></link>
>    <menu-item name="b" title="B">
>        <link target="bLink"/>
>    </menu-item>
> </menu-item>
> basically renders:
> <li>
>  <a href="aLink">A</a>
>  <ul>
>    <li>
>      <a href="bLink">B</a>
>    </li>
>  </ul>
> </li>
>
> Modified:
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java?rev=785077&r1=785076&r2=785077&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java Tue Jun 16 04:37:42 2009
> @@ -183,6 +183,24 @@
>         //if (Debug.infoOn()) Debug.logInfo("in  
> HtmlMenuRendererImage, link(0):" + link,"");
>         if (link != null) {
>             renderLink(writer, context, link);
> +        } else {
> +            String txt = menuItem.getTitle(context);
> +            StringUtil.SimpleEncoder simpleEncoder =  
> (StringUtil.SimpleEncoder) context.get("simpleEncoder");
> +            if (simpleEncoder != null) {
> +                txt = simpleEncoder.encode(txt);
> +            }
> +            writer.append(txt);
> +
> +        }
> +        if (!menuItem.getMenuItemList().isEmpty()) {
> +            appendWhitespace(writer);
> +            writer.append("    <ul>");
> +            appendWhitespace(writer);
> +            for (ModelMenuItem childMenuItem :  
> menuItem.getMenuItemList()) {
> +                childMenuItem.renderMenuItemString(writer, context,  
> this);
> +            }
> +            writer.append("    </ul>");
> +            appendWhitespace(writer);
>         }
>
>         writer.append("</li>");
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java?rev=785077&r1=785076&r2=785077&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java Tue Jun 16 04:37:42 2009
> @@ -345,60 +345,7 @@
>         // include portal pages if specified
>         //menuStringRenderer.renderFormatSimpleWrapperRows(writer,  
> context, this);
>         for (ModelMenuItem item : this.menuItemList) {
> -            String parentPortalPageId =  
> item.getParentPortalPageId(context);
> -            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> -                List <GenericValue> portalPages = null;
> -                try {
> -                    // first get public pages
> -                    EntityCondition cond =
> -                         
> EntityCondition.makeCondition(UtilMisc.toList(
> -                             
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, "_NA_"),
> -                             
> EntityCondition.makeCondition(UtilMisc.toList(
> -                                     
> EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS,  
> parentPortalPageId),
> -                                     
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> -                                    EntityOperator.OR)),
> -                            EntityOperator.AND);
> -                    portalPages = delegator.findList("PortalPage",  
> cond, null, null, null, false);
> -                    if  
> (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a  
> user is logged in
> -                        String userLoginId =  
> ((GenericValue)context.get("userLogin")).getString("userLoginId");
> -                        // replace with private pages
> -                        for (GenericValue portalPage : portalPages) {
> -                            cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> -                                     
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> -                                     
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, portalPage.getString("portalPageId"))),
> -                                    EntityOperator.AND);
> -                            List <GenericValue> privatePortalPages  
> = delegator.findList("PortalPage", cond, null, null, null, false);
> -                            if  
> (UtilValidate.isNotEmpty(privatePortalPages)) {
> -                                portalPages.remove(portalPage);
> -                                 
> portalPages.add(privatePortalPages.get(0));
> -                            }
> -                        }
> -                        // add any other created private pages
> -                        cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> -                                 
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> -                                 
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, null),
> -                                 
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> -                                EntityOperator.AND);
> -                         
> portalPages.addAll(delegator.findList("PortalPage", cond, null,  
> null, null, false));
> -                    }
> -                    portalPages = EntityUtil.orderBy(portalPages,  
> UtilMisc.toList("sequenceNum"));
> -                } catch (GenericEntityException e) {
> -                    Debug.logError("Could not retrieve portalpages  
> in the menu:" + e.getMessage(), module);
> -                }
> -                for (GenericValue portalPage : portalPages) {
> -                    if  
> (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
> -                        ModelMenuItem localItem = new  
> ModelMenuItem(item.getModelMenu());
> -                        localItem.name =   
> portalPage.getString("portalPageId");
> -                         
> localItem.setTitle(portalPage.getString("portalPageName"));
> -                        localItem.link = new Link(item);
> -                        localItem.link.setTarget("showPortalPage? 
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> -                         
> localItem.link.setText(portalPage.getString("portalPageName"));
> -                        localItem.renderMenuItemString(writer,  
> context, menuStringRenderer);
> -                    }
> -                }
> -            } else {
>                 item.renderMenuItemString(writer, context,  
> menuStringRenderer);
> -            }
>         }
>         // render formatting wrapper close
>         menuStringRenderer.renderFormatSimpleWrapperClose(writer,  
> context, this);
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=785077&r1=785076&r2=785077&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java Tue Jun 16 04:37:42 2009
> @@ -31,9 +31,16 @@
> import org.ofbiz.base.util.Debug;
> import org.ofbiz.base.util.StringUtil;
> import org.ofbiz.base.util.UtilFormatOut;
> +import org.ofbiz.base.util.UtilMisc;
> import org.ofbiz.base.util.UtilValidate;
> import org.ofbiz.base.util.UtilXml;
> import org.ofbiz.base.util.string.FlexibleStringExpander;
> +import org.ofbiz.entity.GenericDelegator;
> +import org.ofbiz.entity.GenericEntityException;
> +import org.ofbiz.entity.GenericValue;
> +import org.ofbiz.entity.condition.EntityCondition;
> +import org.ofbiz.entity.condition.EntityOperator;
> +import org.ofbiz.entity.util.EntityUtil;
> import org.ofbiz.entityext.permission.EntityPermissionChecker;
> import org.ofbiz.widget.WidgetWorker;
> import org.w3c.dom.Element;
> @@ -200,6 +207,9 @@
>         }
>     }
>
> +    public List<ModelMenuItem> getMenuItemList() {
> +        return menuItemList;
> +    }
>
>     public void setHideIfSelected(String val) {
>         if (UtilValidate.isNotEmpty(val))
> @@ -248,7 +258,7 @@
>
>     public void renderMenuItemString(Appendable writer, Map<String,  
> Object> context, MenuStringRenderer menuStringRenderer) throws  
> IOException {
>
> -          boolean passed = true;
> +        boolean passed = true;
>         if (this.condition != null) {
>             if (!this.condition.eval(context)) {
>                 passed = false;
> @@ -257,7 +267,23 @@
>            //Debug.logInfo("in ModelMenu, name:" + this.getName(),  
> module);
>         if (passed) {
>             ModelMenuAction.runSubActions(this.actions, context);
> -            menuStringRenderer.renderMenuItem(writer, context, this);
> +            String parentPortalPageId =  
> this.getParentPortalPageId(context);
> +            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> +                List<GenericValue> portalPages =  
> this.getPortalPages(context);
> +                for (GenericValue portalPage : portalPages) {
> +                    if  
> (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
> +                        ModelMenuItem localItem = new  
> ModelMenuItem(this.getModelMenu());
> +                        localItem.name =   
> portalPage.getString("portalPageId");
> +                         
> localItem.setTitle(portalPage.getString("portalPageName"));
> +                        localItem.link = new Link(this);
> +                        localItem.link.setTarget("showPortalPage? 
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> +                         
> localItem.link.setText(portalPage.getString("portalPageName"));
> +                        menuStringRenderer.renderMenuItem(writer,  
> context, localItem);
> +                    }
> +                }
> +            } else {
> +                menuStringRenderer.renderMenuItem(writer, context,  
> this);
> +            }
>         }
>     }
>
> @@ -354,6 +380,51 @@
>         return this.parentPortalPageId.expandString(context);
>     }
>
> +    public List<GenericValue> getPortalPages(Map<String, Object>  
> context) {
> +        List<GenericValue> portalPages = null;
> +        String parentPortalPageId =  
> this.getParentPortalPageId(context);
> +        if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> +            GenericDelegator delegator = modelMenu.getDelegator();
> +            try {
> +                // first get public pages
> +                EntityCondition cond =
> +                    EntityCondition.makeCondition(UtilMisc.toList(
> +                         
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, "_NA_"),
> +                         
> EntityCondition.makeCondition(UtilMisc.toList(
> +                                 
> EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS,  
> parentPortalPageId),
> +                                 
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> +                                EntityOperator.OR)),
> +                        EntityOperator.AND);
> +                portalPages = delegator.findList("PortalPage",  
> cond, null, null, null, false);
> +                if  
> (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a  
> user is logged in
> +                    String userLoginId =  
> ((GenericValue)context.get("userLogin")).getString("userLoginId");
> +                    // replace with private pages
> +                    for (GenericValue portalPage : portalPages) {
> +                        cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> +                                 
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> +                                 
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, portalPage.getString("portalPageId"))),
> +                                EntityOperator.AND);
> +                        List <GenericValue> privatePortalPages =  
> delegator.findList("PortalPage", cond, null, null, null, false);
> +                        if  
> (UtilValidate.isNotEmpty(privatePortalPages)) {
> +                            portalPages.remove(portalPage);
> +                             
> portalPages.add(privatePortalPages.get(0));
> +                        }
> +                    }
> +                    // add any other created private pages
> +                    cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> +                             
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> +                             
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, null),
> +                             
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> +                            EntityOperator.AND);
> +                     
> portalPages.addAll(delegator.findList("PortalPage", cond, null,  
> null, null, false));
> +                }
> +                portalPages = EntityUtil.orderBy(portalPages,  
> UtilMisc.toList("sequenceNum"));
> +            } catch (GenericEntityException e) {
> +                Debug.logError("Could not retrieve portalpages in  
> the menu:" + e.getMessage(), module);
> +            }
> +        }
> +        return portalPages;
> +    }
>     public String getWidgetStyle() {
>         if (UtilValidate.isNotEmpty(this.widgetStyle)) {
>             return this.widgetStyle;
>
>


Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java

Posted by David E Jones <de...@me.com>.
Very cool Scott! I guess it's about time that this part of the  
original design was supported by the implementation... ;)

-David


On Jun 15, 2009, at 10:37 PM, lektran@apache.org wrote:

> Author: lektran
> Date: Tue Jun 16 04:37:42 2009
> New Revision: 785077
>
> URL: http://svn.apache.org/viewvc?rev=785077&view=rev
> Log:
> Complete the partial support for nested menu items, e.g.
> <menu-item name="a" title="A">
>    <link target="aLink"></link>
>    <menu-item name="b" title="B">
>        <link target="bLink"/>
>    </menu-item>
> </menu-item>
> basically renders:
> <li>
>  <a href="aLink">A</a>
>  <ul>
>    <li>
>      <a href="bLink">B</a>
>    </li>
>  </ul>
> </li>
>
> Modified:
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java?rev=785077&r1=785076&r2=785077&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlMenuRenderer.java Tue Jun 16 04:37:42 2009
> @@ -183,6 +183,24 @@
>         //if (Debug.infoOn()) Debug.logInfo("in  
> HtmlMenuRendererImage, link(0):" + link,"");
>         if (link != null) {
>             renderLink(writer, context, link);
> +        } else {
> +            String txt = menuItem.getTitle(context);
> +            StringUtil.SimpleEncoder simpleEncoder =  
> (StringUtil.SimpleEncoder) context.get("simpleEncoder");
> +            if (simpleEncoder != null) {
> +                txt = simpleEncoder.encode(txt);
> +            }
> +            writer.append(txt);
> +
> +        }
> +        if (!menuItem.getMenuItemList().isEmpty()) {
> +            appendWhitespace(writer);
> +            writer.append("    <ul>");
> +            appendWhitespace(writer);
> +            for (ModelMenuItem childMenuItem :  
> menuItem.getMenuItemList()) {
> +                childMenuItem.renderMenuItemString(writer, context,  
> this);
> +            }
> +            writer.append("    </ul>");
> +            appendWhitespace(writer);
>         }
>
>         writer.append("</li>");
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java?rev=785077&r1=785076&r2=785077&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenu.java Tue Jun 16 04:37:42 2009
> @@ -345,60 +345,7 @@
>         // include portal pages if specified
>         //menuStringRenderer.renderFormatSimpleWrapperRows(writer,  
> context, this);
>         for (ModelMenuItem item : this.menuItemList) {
> -            String parentPortalPageId =  
> item.getParentPortalPageId(context);
> -            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> -                List <GenericValue> portalPages = null;
> -                try {
> -                    // first get public pages
> -                    EntityCondition cond =
> -                         
> EntityCondition.makeCondition(UtilMisc.toList(
> -                             
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, "_NA_"),
> -                             
> EntityCondition.makeCondition(UtilMisc.toList(
> -                                     
> EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS,  
> parentPortalPageId),
> -                                     
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> -                                    EntityOperator.OR)),
> -                            EntityOperator.AND);
> -                    portalPages = delegator.findList("PortalPage",  
> cond, null, null, null, false);
> -                    if  
> (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a  
> user is logged in
> -                        String userLoginId =  
> ((GenericValue)context.get("userLogin")).getString("userLoginId");
> -                        // replace with private pages
> -                        for (GenericValue portalPage : portalPages) {
> -                            cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> -                                     
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> -                                     
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, portalPage.getString("portalPageId"))),
> -                                    EntityOperator.AND);
> -                            List <GenericValue> privatePortalPages  
> = delegator.findList("PortalPage", cond, null, null, null, false);
> -                            if  
> (UtilValidate.isNotEmpty(privatePortalPages)) {
> -                                portalPages.remove(portalPage);
> -                                 
> portalPages.add(privatePortalPages.get(0));
> -                            }
> -                        }
> -                        // add any other created private pages
> -                        cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> -                                 
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> -                                 
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, null),
> -                                 
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> -                                EntityOperator.AND);
> -                         
> portalPages.addAll(delegator.findList("PortalPage", cond, null,  
> null, null, false));
> -                    }
> -                    portalPages = EntityUtil.orderBy(portalPages,  
> UtilMisc.toList("sequenceNum"));
> -                } catch (GenericEntityException e) {
> -                    Debug.logError("Could not retrieve portalpages  
> in the menu:" + e.getMessage(), module);
> -                }
> -                for (GenericValue portalPage : portalPages) {
> -                    if  
> (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
> -                        ModelMenuItem localItem = new  
> ModelMenuItem(item.getModelMenu());
> -                        localItem.name =   
> portalPage.getString("portalPageId");
> -                         
> localItem.setTitle(portalPage.getString("portalPageName"));
> -                        localItem.link = new Link(item);
> -                        localItem.link.setTarget("showPortalPage? 
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> -                         
> localItem.link.setText(portalPage.getString("portalPageName"));
> -                        localItem.renderMenuItemString(writer,  
> context, menuStringRenderer);
> -                    }
> -                }
> -            } else {
>                 item.renderMenuItemString(writer, context,  
> menuStringRenderer);
> -            }
>         }
>         // render formatting wrapper close
>         menuStringRenderer.renderFormatSimpleWrapperClose(writer,  
> context, this);
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=785077&r1=785076&r2=785077&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ 
> ModelMenuItem.java Tue Jun 16 04:37:42 2009
> @@ -31,9 +31,16 @@
> import org.ofbiz.base.util.Debug;
> import org.ofbiz.base.util.StringUtil;
> import org.ofbiz.base.util.UtilFormatOut;
> +import org.ofbiz.base.util.UtilMisc;
> import org.ofbiz.base.util.UtilValidate;
> import org.ofbiz.base.util.UtilXml;
> import org.ofbiz.base.util.string.FlexibleStringExpander;
> +import org.ofbiz.entity.GenericDelegator;
> +import org.ofbiz.entity.GenericEntityException;
> +import org.ofbiz.entity.GenericValue;
> +import org.ofbiz.entity.condition.EntityCondition;
> +import org.ofbiz.entity.condition.EntityOperator;
> +import org.ofbiz.entity.util.EntityUtil;
> import org.ofbiz.entityext.permission.EntityPermissionChecker;
> import org.ofbiz.widget.WidgetWorker;
> import org.w3c.dom.Element;
> @@ -200,6 +207,9 @@
>         }
>     }
>
> +    public List<ModelMenuItem> getMenuItemList() {
> +        return menuItemList;
> +    }
>
>     public void setHideIfSelected(String val) {
>         if (UtilValidate.isNotEmpty(val))
> @@ -248,7 +258,7 @@
>
>     public void renderMenuItemString(Appendable writer, Map<String,  
> Object> context, MenuStringRenderer menuStringRenderer) throws  
> IOException {
>
> -          boolean passed = true;
> +        boolean passed = true;
>         if (this.condition != null) {
>             if (!this.condition.eval(context)) {
>                 passed = false;
> @@ -257,7 +267,23 @@
>            //Debug.logInfo("in ModelMenu, name:" + this.getName(),  
> module);
>         if (passed) {
>             ModelMenuAction.runSubActions(this.actions, context);
> -            menuStringRenderer.renderMenuItem(writer, context, this);
> +            String parentPortalPageId =  
> this.getParentPortalPageId(context);
> +            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> +                List<GenericValue> portalPages =  
> this.getPortalPages(context);
> +                for (GenericValue portalPage : portalPages) {
> +                    if  
> (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
> +                        ModelMenuItem localItem = new  
> ModelMenuItem(this.getModelMenu());
> +                        localItem.name =   
> portalPage.getString("portalPageId");
> +                         
> localItem.setTitle(portalPage.getString("portalPageName"));
> +                        localItem.link = new Link(this);
> +                        localItem.link.setTarget("showPortalPage? 
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> +                         
> localItem.link.setText(portalPage.getString("portalPageName"));
> +                        menuStringRenderer.renderMenuItem(writer,  
> context, localItem);
> +                    }
> +                }
> +            } else {
> +                menuStringRenderer.renderMenuItem(writer, context,  
> this);
> +            }
>         }
>     }
>
> @@ -354,6 +380,51 @@
>         return this.parentPortalPageId.expandString(context);
>     }
>
> +    public List<GenericValue> getPortalPages(Map<String, Object>  
> context) {
> +        List<GenericValue> portalPages = null;
> +        String parentPortalPageId =  
> this.getParentPortalPageId(context);
> +        if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> +            GenericDelegator delegator = modelMenu.getDelegator();
> +            try {
> +                // first get public pages
> +                EntityCondition cond =
> +                    EntityCondition.makeCondition(UtilMisc.toList(
> +                         
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, "_NA_"),
> +                         
> EntityCondition.makeCondition(UtilMisc.toList(
> +                                 
> EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS,  
> parentPortalPageId),
> +                                 
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> +                                EntityOperator.OR)),
> +                        EntityOperator.AND);
> +                portalPages = delegator.findList("PortalPage",  
> cond, null, null, null, false);
> +                if  
> (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a  
> user is logged in
> +                    String userLoginId =  
> ((GenericValue)context.get("userLogin")).getString("userLoginId");
> +                    // replace with private pages
> +                    for (GenericValue portalPage : portalPages) {
> +                        cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> +                                 
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> +                                 
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, portalPage.getString("portalPageId"))),
> +                                EntityOperator.AND);
> +                        List <GenericValue> privatePortalPages =  
> delegator.findList("PortalPage", cond, null, null, null, false);
> +                        if  
> (UtilValidate.isNotEmpty(privatePortalPages)) {
> +                            portalPages.remove(portalPage);
> +                             
> portalPages.add(privatePortalPages.get(0));
> +                        }
> +                    }
> +                    // add any other created private pages
> +                    cond =  
> EntityCondition.makeCondition(UtilMisc.toList(
> +                             
> EntityCondition.makeCondition("ownerUserLoginId",  
> EntityOperator.EQUALS, userLoginId),
> +                             
> EntityCondition.makeCondition("originalPortalPageId",  
> EntityOperator.EQUALS, null),
> +                             
> EntityCondition.makeCondition("parentPortalPageId",  
> EntityOperator.EQUALS, parentPortalPageId)),
> +                            EntityOperator.AND);
> +                     
> portalPages.addAll(delegator.findList("PortalPage", cond, null,  
> null, null, false));
> +                }
> +                portalPages = EntityUtil.orderBy(portalPages,  
> UtilMisc.toList("sequenceNum"));
> +            } catch (GenericEntityException e) {
> +                Debug.logError("Could not retrieve portalpages in  
> the menu:" + e.getMessage(), module);
> +            }
> +        }
> +        return portalPages;
> +    }
>     public String getWidgetStyle() {
>         if (UtilValidate.isNotEmpty(this.widgetStyle)) {
>             return this.widgetStyle;
>
>