Author: rfelden
Date: Thu Dec 20 14:23:58 2007
New Revision: 19398

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19398&repname=
=3Djahia
Log:
new navmenu tag usage (final)
-> modified cache storage (was HTML & property, is now only properties)
TODO : gwt drop down menu

Modified:
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCacheEntry.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/html/=
menus/NavMenuTag.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/webapp/WEB-INF/etc/taglibs/j=
ahia-components.tld

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/service=
s/cache/ContainerHTMLCacheEntry.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/services/cache/ContainerHTMLCacheEntry=
.java&rev=3D19398&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCacheEntry.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCacheEntry.java Thu Dec 20 14:23:58 2007
@@ -14,7 +14,7 @@
 =

     private String bodyContent ;
 =

-    private HashMap<String, Object> properties ;
+    private HashMap<String, Object> properties =3D null ;
 =

     public ContainerHTMLCacheEntry(String bodyContent) {
         this.bodyContent =3D bodyContent ;
@@ -25,6 +25,11 @@
         properties =3D new HashMap<String, Object>(map) ;
     }
 =

+    public ContainerHTMLCacheEntry(Map<String, Object> map) {
+        this.bodyContent =3D "" ;
+        properties =3D new HashMap<String, Object>(map) ;
+    }
+
     public Object getProperty(String key) {
         if (properties =3D=3D null) return null ;
         else return properties.get(key) ;

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs=
/html/menus/NavMenuTag.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/taglibs/html/menus/NavMenuTag.java&rev=
=3D19398&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/html/=
menus/NavMenuTag.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/html/=
menus/NavMenuTag.java Thu Dec 20 14:23:58 2007
@@ -35,7 +35,6 @@
 import org.jahia.registries.ServicesRegistry;
 import org.jahia.content.ContentObjectKey;
 import org.jahia.content.ContentContainerKey;
-import org.jahia.bin.Jahia;
 =

 import javax.servlet.ServletRequest;
 import javax.servlet.jsp.JspException;
@@ -48,6 +47,7 @@
     private static final Logger logger =3D Logger.getLogger(NavMenuTag.cla=
ss);
 =

     private JahiaData jData =3D null;
+    private String kind =3D null ;
     private String containerListName =3D null;
     private String pageFieldName =3D null;
     private int startLevel =3D -1;
@@ -64,7 +64,11 @@
     private int[] pagePath ;
     private boolean cache =3D true ;
     private boolean debug =3D false ;
+    private boolean useGwt =3D false ;
 =

+    public void setKind(String kind) {
+        this.kind =3D kind ;
+    }
 =

     public void setContainerListName(String containerListName) {
         this.containerListName =3D containerListName;
@@ -129,14 +133,17 @@
         try {
             JspWriter out =3D pageContext.getOut();
             createContainerList() ;
-            defaultSettings(jData.gui());
-            setCurrentPagePath(jData) ;
+            settings(jData);
             if (cssClassName =3D=3D null) {
                 out.print("<div class=3D\"navMenu\">\n");
             } else {
                 out.print(new StringBuffer().append("<div class=3D\"").app=
end(cssClassName).append("\">\n").toString());
             }
-            getPageSubTree(jData, jData.gui().getLevelID(startLevel), star=
tLevel);
+            if (useGwt) {
+                getGwtMenu() ;
+            } else {
+                getPageSubTree(jData, jData.gui().getLevelID(startLevel), =
startLevel);
+            }
             out.print("</div>\n") ;
         } catch (JahiaException e) {
             logger.error("JahiaException rendering the menu", e);
@@ -146,6 +153,10 @@
         return SKIP_BODY;
     }
 =

+    /**
+     * Create the container list and the field if they don't exist
+     * @throws JahiaException if only the list or the field is specified
+     */
     private void createContainerList() throws JahiaException {
         if (containerListName =3D=3D null && pageFieldName =3D=3D null) {
             // use default names
@@ -169,13 +180,47 @@
         }
     }
 =

-    private void defaultSettings(GuiBean gui) throws JahiaException {
+    /**
+     * Prepare tag environment depending on some tag attributes.
+     * @param jData JahiaData
+     * @throws JahiaException if start level was not specified and contain=
er list retrieval failed
+     */
+    private void settings(JahiaData jData) throws JahiaException {
+        // set the current page path
+        pagePath =3D ServicesRegistry.getInstance().getJahiaPageService().=
getCurrentPagePathAsPIDs(jData.getProcessingContext()) ;
+
+        // set various parameters according to the menu kind
+        if (kind !=3D null) {
+
+            // top tabs configuration
+            if ("topTabs".equals(kind)) {
+                if (cssClassName =3D=3D null) {
+                    cssClassName =3D "topTabs" ; // default name
+                }
+                onlyTop =3D true ;
+                if (startLevel =3D=3D -1) {
+                    startLevel =3D 1 ; // default start level
+                }
+            } else if ("sideMenu".equals(kind)) {
+                if (cssClassName =3D=3D null) {
+                    cssClassName =3D "sideMenu" ;
+                }
+            } else if ("dropDownMenu".equals(kind)) {
+                if (cssClassName =3D=3D null) {
+                    cssClassName =3D "dropDownMenu" ;
+                }
+                useGwt =3D true ;
+            }
+        }
+
+        GuiBean gui =3D jData.gui() ;
 =

         // set the level of the page where the request is coming from
         reqLevel =3D gui.getLevel();
         logger.debug("reqLevel =3D " + reqLevel);
         // if the startLevel parameter is not specified, try to find a sim=
ilar
         // containerList in the parent page
+        // SHOULD BE AVOIDED TO IMPROVE PERFORMANCE -> user manual + specs
         if (startLevel =3D=3D -1) {
             if (reqLevel =3D=3D 1) {
                 startLevel =3D reqLevel;
@@ -188,14 +233,23 @@
                 }
             }
         }
-
-
     }
 =

-    private void setCurrentPagePath(JahiaData jData) throws JahiaException=
 {
-        pagePath =3D ServicesRegistry.getInstance().getJahiaPageService().=
getCurrentPagePathAsPIDs(jData.getProcessingContext()) ;
+    /**
+     * This is the GWT menu if needed.
+     */
+    private void getGwtMenu() {
+        // TODO GWT drop down menu
     }
 =

+    /**
+     * Recursive method to go through pages hierarchy using a specific con=
tainer list (attribute containerListName).
+     * @param jData JahiaData
+     * @param pageId the page id where to get the container list
+     * @param level the current depth level
+     * @throws JahiaException exception retrieving cache or containers
+     * @throws IOException JSP writer exception
+     */
     private void getPageSubTree(JahiaData jData, int pageId, int level) th=
rows JahiaException, IOException {
         if (pageId < 1) {
             logger.error("Incorrect page ID: " + pageId);
@@ -213,24 +267,21 @@
         // don't display the links if they are supposed to be hidden (live=
 mode)
         boolean hide =3D (dispNumber !=3D -1 && level !=3D startLevel && l=
evel !=3D reqLevel && level + dispNumber < reqLevel && !editMode);
 =

-        //
         if (maxDepth =3D=3D -1 || level <=3D startLevel + maxDepth) {
+            int itemCount =3D 0 ;
             while (linkContainerEnum.hasMoreElements()) {
+                itemCount++ ;
                 logger.debug("level =3D " + level);
                 JahiaContainer linkContainer =3D (JahiaContainer) linkCont=
ainerEnum.nextElement();
 =

                 ContainerHTMLCacheEntry cacheEntry =3D ServicesRegistry.ge=
tInstance().getCacheService().getContainerHTMLCacheInstance()
                         .getFromContainerCache(linkContainer, jData, Strin=
g.valueOf(linkContainer.getID()), false, 0, null, null) ;
 =

-                =

-
                 // page is not cached yet or cache disabled
                 if (cacheEntry =3D=3D null || !cache) {
 =

                     JahiaPage link =3D (JahiaPage) linkContainer.getFieldO=
bject(pageFieldName);
 =

-                    // TODO store in cache
-
                     if (link !=3D null) {
                         int linkID =3D link.getID() ;
 =

@@ -239,49 +290,56 @@
                         if (!hide) {
                             if (begin) {
                                 if (cssClassName =3D=3D null) {
-                                    out.print("<ul>");
+                                    out.print(new StringBuffer().append("<=
ul class=3D\"level_").append(level).append("\">").toString());
                                 } else {
-                                    out.print(new StringBuffer().append("<=
ul class=3D\"").append(cssClassName).append("\">").toString());
+                                    out.print(new StringBuffer().append("<=
ul class=3D\"level_").append(level).append(" ").append(cssClassName).append=
("\">").toString());
                                 }
                                 begin =3D false;
                             }
-                            String cssClass =3D " class=3D\"item standard\=
"";
+                            StringBuffer itemCssClass =3D new StringBuffer=
(" class=3D\"item_").append(itemCount) ;
                             if (isInPath) {
                                 if (level =3D=3D reqLevel - 1) {
-                                    cssClass =3D " class=3D\"item selected=
\"";
+                                    itemCssClass.append(" selected\"");
                                 } else {
-                                    cssClass =3D " class=3D\"item inpath\"=
";
+                                    itemCssClass.append(" inpath\"");
                                 }
+                            } else {
+                                itemCssClass.append(" standard\"");
                             }
                             StringBuffer sbf =3D new StringBuffer() ;
-                            sbf.append("<li").append(cssClass).append("><d=
iv").append(cssClass).append("><div").append(cssClass).append(">\n") ;
+                            sbf.append("<li").append(itemCssClass).append(=
"><div").append(itemCssClass).append("><div").append(itemCssClass).append("=
>\n") ;
+
+                            // data to cache
+                            String href =3D link.getURL(jParams) ;
+                            String title =3D link.getTitle() ;
+                            String disp =3D link.getHighLightDiffTitle(jPa=
rams) ;
 =

-                            // HTML to cache
-                            StringBuffer cacheSbf =3D new StringBuffer() ;
                             if (cache) {
-                                cacheSbf.append("<a href=3D\"").append(lin=
k.getURL(jParams)).append("\"");
+                                sbf.append("<a href=3D\"").append(href).ap=
pend("\"");
                             }
                             else { // cache deactivated -> append /contain=
ercache/off to URLs
-                                cacheSbf.append("<a href=3D\"").append(lin=
k.getURL(jParams)).append("/containercache/off").append("\"");
+                                sbf.append("<a href=3D\"").append(href).ap=
pend("/containercache/off").append("\"");
                             }
-                            cacheSbf.append(" title=3D\"").append(link.get=
Title()).append("\">");
-                            cacheSbf.append(link.getHighLightDiffTitle(jPa=
rams)).append("</a>");
+                            sbf.append(" title=3D\"").append(title).append=
("\">");
+                            sbf.append(disp).append("</a>");
 =

                             // cache storage
                             if (cache) {
                                 // Properties Map to cache
                                 Map<String, Object> map =3D new HashMap<St=
ring, Object>() ;
                                 map.put("pageID", Integer.valueOf(linkID))=
 ;
+                                map.put("href", href) ;
+                                map.put("title", title) ;
+                                map.put("disp", disp) ;
 =

                                 // storage into cache
-                                ContainerHTMLCacheEntry entryCache =3D new=
 ContainerHTMLCacheEntry(cacheSbf.toString(), map) ;
+                                ContainerHTMLCacheEntry entryCache =3D new=
 ContainerHTMLCacheEntry(map) ;
                                 Set<ContentObjectKey> dependencies =3D new=
 HashSet<ContentObjectKey>() ;
                                 dependencies.add(new ContentContainerKey(l=
inkContainer.getID())) ;
                                 ServicesRegistry.getInstance().getCacheSer=
vice().getContainerHTMLCacheInstance()
                                     .writeToContainerCache(linkContainer, =
jData, entryCache, String.valueOf(linkContainer.getID()), dependencies);
                             }
 =

-                            sbf.append(cacheSbf) ;
                             out.println(sbf.toString());
                             if (editMode) {
                                 jData.gui().html().drawBeginActionMenu(new=
 ContainerBean(linkContainer, jParams),
@@ -300,7 +358,11 @@
                         // no navlink
                         if (editMode) {
                             if (begin) {
-                                out.println("<ul>");
+                                if (cssClassName =3D=3D null) {
+                                    out.print(new StringBuffer().append("<=
ul class=3D\"level_").append(level).append("\">").toString());
+                                } else {
+                                    out.print(new StringBuffer().append("<=
ul class=3D\"level_").append(level).append(" ").append(cssClassName).append=
("\">").toString());
+                                }
                                 begin =3D false;
                             }
                             out.println("<li>");
@@ -321,27 +383,43 @@
                     if (!hide) {
                         if (begin) {
                             if (cssClassName =3D=3D null) {
-                                out.print("<ul>");
+                                out.print(new StringBuffer().append("<ul c=
lass=3D\"level_").append(level).append("\">").toString());
                             } else {
-                                out.print(new StringBuffer().append("<ul c=
lass=3D\"").append(cssClassName).append("\">").toString());
+                                out.print(new StringBuffer().append("<ul c=
lass=3D\"level_").append(level).append(" ").append(cssClassName).append("\"=
>").toString());
                             }
                             begin =3D false;
                         }
-                        String cssClass =3D " class=3D\"item standard\"";
+                        StringBuffer itemCssClass =3D new StringBuffer(" c=
lass=3D\"item_").append(itemCount) ;
                         if (isInPath) {
                             if (level =3D=3D reqLevel - 1) {
-                                cssClass =3D " class=3D\"item selected\"";
+                                itemCssClass.append(" selected\"");
                             } else {
-                                cssClass =3D " class=3D\"item inpath\"";
+                                itemCssClass.append(" inpath\"");
                             }
+                        } else {
+                            itemCssClass.append(" standard\"");
                         }
+
+                        // cached data
+                        String href =3D (String) cacheEntry.getProperty("h=
ref") ;
+                        String title =3D (String) cacheEntry.getProperty("=
title") ;
+                        String disp =3D (String) cacheEntry.getProperty("d=
isp") ;
+
                         StringBuffer sbf =3D new StringBuffer();
-                        sbf.append("<li").append(cssClass).append("><div")=
.append(cssClass).append("><div").append(cssClass).append(">\n") ;
-                        sbf.append(cacheEntry.getBodyContent()) ;
-                        out.println(sbf.toString());
-                        if (debug) {
-                            out.println("<span>[c]</span>") ;
+                        sbf.append("<li").append(itemCssClass).append("><d=
iv").append(itemCssClass).append("><div").append(itemCssClass).append(">\n"=
) ;
+                        if (!debug) {
+                            sbf.append("<a href=3D\"").append(href).append=
("\"");
+                        }
+                        else { // debug activated -> append /containercach=
e/debug to URLs
+                            sbf.append("<a href=3D\"").append(href).append=
("/containercache/debug").append("\"");
                         }
+                        sbf.append(" title=3D\"").append(title).append("\"=
>");
+                        sbf.append(disp).append("</a>");
+
+                        if (debug) { // show cached entries
+                            sbf.append("<span>[c]</span>") ;
+                        }
+                        out.println(sbf.toString());
                         if (editMode) {
                             jData.gui().html().drawBeginActionMenu(new Con=
tainerBean(linkContainer, jParams),
                                     null, null, false, "", bundleKey, null=
, out);
@@ -362,13 +440,13 @@
         if (editMode && (level >=3D reqLevel-1 || onlyTop)) { // new page =
can only be created as a sibling or a child
             if (begin) {                                   // to the curre=
nt or the top page (visual coherence limitation)
                 if (cssClassName =3D=3D null) {
-                    out.print("<ul>");
+                    out.print(new StringBuffer().append("<ul class=3D\"lev=
el_").append(level).append("\">").toString());
                 } else {
-                    out.print(new StringBuffer().append("<ul class=3D\"").=
append(cssClassName).append("\">").toString());
+                    out.print(new StringBuffer().append("<ul class=3D\"lev=
el_").append(level).append(" ").append(cssClassName).append("\">").toString=
());
                 }
-                begin =3D false ;
+                begin =3D false;
             }
-            out.print("<li><div><div>");
+            out.print("<li class=3D\"item_action standard\"><div class=3D\=
"item_action standard\"><div class=3D\"item_action standard\">");
             jData.gui().html().drawBeginActionMenu(new ContainerListBean(l=
inkContainerList, jParams),
                     null, null, false, containerListNamePostFix, bundleKey=
, containerListLabel, out);
             out.println("</div></div></li>");
@@ -378,13 +456,13 @@
             out.println("</ul>");
         }
 =

-
     }
 =

 =

     public int doEndTag() throws JspException {
         // let's reinitialize the tag variables to allow tag object reuse =
in
         // pooling.
+        kind =3D null ;
         expandOnlyPageInPath =3D true;
         onlyTop =3D false;
         reqLevel =3D -1;

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/webapp/WEB-INF/etc/tag=
libs/jahia-components.tld
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/webapp/WEB-INF/etc/taglibs/jahia-components.tld&rev=
=3D19398&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/webapp/WEB-INF/etc/taglibs/j=
ahia-components.tld (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/webapp/WEB-INF/etc/taglibs/j=
ahia-components.tld Thu Dec 20 14:23:58 2007
@@ -52,6 +52,11 @@
         <tagclass>org.jahia.taglibs.html.menus.NavMenuTag</tagclass>
         <info>display a navigation menu</info>
         <attribute>
+               <name>kind</name>
+            <required>false</required>
+            <rtexprvalue>true</rtexprvalue>
+        </attribute>
+        <attribute>
             <name>containerListName</name>
             <required>false</required>
             <rtexprvalue>true</rtexprvalue>

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to