Author: rfelden
Date: Tue Dec 18 15:42:13 2007
New Revision: 19379

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19379&repname=
=3Djahia
Log:
modification of HTML Container Cache
------------------------------------
modification of the cached object : wrapper (ContainerHTMLCacheEntry) inclu=
ding HTML string + properties map (<String,Object>)
methods available into ContainerHTMLCache
page path pids retrieval method in JahiaPageService (TODO : enhance this us=
ing appropriate hibernate request)
modifed container tags (due to new cache object wrapper)
-> navigation menu (top or left) use the html container cache

Added:
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCacheEntry.java
Modified:
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCache.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/page=
s/JahiaPageBaseService.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/page=
s/JahiaPageService.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/conta=
iner/ContainerCacheTag.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/conta=
iner/ContainerTag.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/html/=
menus/NavMenuTag.java
    branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/util/=
Utils.java

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/service=
s/cache/ContainerHTMLCache.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/services/cache/ContainerHTMLCache.java=
&rev=3D19379&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/ContainerHTMLCache.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCache.java Tue Dec 18 15:42:13 2007
@@ -3,10 +3,13 @@
 import org.jahia.services.usermanager.JahiaUser;
 import org.jahia.services.usermanager.JahiaGroup;
 import org.jahia.data.containers.JahiaContainer;
+import org.jahia.data.JahiaData;
 import org.jahia.registries.ServicesRegistry;
 import org.jahia.content.ContentObjectKey;
 import org.jahia.content.ContentContainerKey;
 import org.jahia.params.ProcessingContext;
+import org.jahia.exceptions.JahiaInitializationException;
+import org.jahia.utils.LanguageCodeConverters;
 =

 import java.util.*;
 =

@@ -204,4 +207,92 @@
         invalidateContainerEntries(containerID, ProcessingContext.COMPARE,=
languageCode);
         invalidateContainerEntries(containerID, ProcessingContext.PREVIEW,=
 languageCode);
     }
+
+    /**
+     * Add an entry into the HTML container cache as an HTMLCacheEntry, wh=
ich contains an HTML string and a Map of user-defined properties.
+     *
+     * @param jahiaContainer the container
+     * @param jahiaData JahiaData
+     * @param entry the HTML cache entry to cache
+     * @param cacheKey the key to access this entry
+     * @param dependencies the containers this entry depends on
+     * @throws org.jahia.exceptions.JahiaInitializationException
+     */
+    public void writeToContainerCache(JahiaContainer jahiaContainer, Jahia=
Data jahiaData, ContainerHTMLCacheEntry entry, String cacheKey, Set depende=
ncies) throws JahiaInitializationException {
+        ContainerHTMLCache containerHTMLCache =3D ServicesRegistry.getInst=
ance().getCacheService().getContainerHTMLCacheInstance();
+        ProcessingContext processingContext =3D jahiaData.getProcessingCon=
text();
+        String mode =3D jahiaData.getProcessingContext().getOperationMode(=
);
+        // Get the language code
+        String curLanguageCode =3D LanguageCodeConverters.localeToLanguage=
Tag(processingContext.getLocale());
+        GroupCacheKey containerKey =3D containerHTMLCache.computeEntryKeyW=
ithGroups(jahiaContainer, cacheKey, processingContext.getUser(), curLanguag=
eCode, mode, processingContext.getScheme(), dependencies);
+        containerHTMLCache.put(containerKey, entry);
+    }
+
+    /**
+     * Add an entry into the HTML container cache as an HTML string.
+     *
+     * @param jahiaContainer the container
+     * @param jahiaData JahiaData
+     * @param bodyContent the HTML content to cache
+     * @param cacheKey the key to access this entry
+     * @param dependencies the containers this entry depends on
+     * @throws org.jahia.exceptions.JahiaInitializationException
+     */
+    public void writeToContainerCache(JahiaContainer jahiaContainer, Jahia=
Data jahiaData, String bodyContent, String cacheKey, Set dependencies) thro=
ws JahiaInitializationException {
+        ContainerHTMLCache containerHTMLCache =3D ServicesRegistry.getInst=
ance().getCacheService().getContainerHTMLCacheInstance();
+        ProcessingContext processingContext =3D jahiaData.getProcessingCon=
text();
+        String mode =3D jahiaData.getProcessingContext().getOperationMode(=
);
+        // Get the language code
+        String curLanguageCode =3D LanguageCodeConverters.localeToLanguage=
Tag(processingContext.getLocale());
+        GroupCacheKey containerKey =3D containerHTMLCache.computeEntryKeyW=
ithGroups(jahiaContainer, cacheKey, processingContext.getUser(), curLanguag=
eCode, mode, processingContext.getScheme(), dependencies);
+        containerHTMLCache.put(containerKey, new ContainerHTMLCacheEntry(b=
odyContent));
+    }
+
+    /**
+     * Retrieve an entry from the HTML container cache.
+     *
+     * @param jahiaContainer
+     * @param jahiaData
+     * @param cacheKey
+     * @param esi
+     * @param requestedFragment
+     * @param currentURL
+     * @param aclGroupFinalKey
+     * @return
+     * @throws JahiaInitializationException
+     */
+    public ContainerHTMLCacheEntry getFromContainerCache(JahiaContainer ja=
hiaContainer, JahiaData jahiaData, String cacheKey, boolean esi, int reques=
tedFragment, String currentURL, String aclGroupFinalKey) throws JahiaInitia=
lizationException {
+        ContainerHTMLCache containerHTMLCache =3D ServicesRegistry.getInst=
ance().getCacheService().getContainerHTMLCacheInstance();
+        ProcessingContext processingContext =3D jahiaData.getProcessingCon=
text();
+        String mode =3D jahiaData.getProcessingContext().getOperationMode(=
);
+        // Get the language code
+        String curLanguageCode =3D LanguageCodeConverters.localeToLanguage=
Tag(
+            processingContext.getLocale());
+        GroupCacheKey containerKey =3D containerHTMLCache.computeEntryKey(
+                jahiaContainer, cacheKey, processingContext.getUser(),
+                curLanguageCode,
+                mode,
+                processingContext.getScheme());
+        /*if (esi) { TODO esi part ?
+            aclGroupFinalKey =3D ServicesRegistry.getInstance()
+                    .getEsiURLGeneratorService()
+                    .encodeString(containerHTMLCache.getUserCacheKey(proce=
ssingContext.getUser(),
+                                                                     proce=
ssingContext.getSiteID()));
+            currentURL =3D getUrl(container.getID() + 1000)+(cacheKey!=3Dn=
ull?"&cachekey=3D"+cacheKey:"");
+            if (requestedFragment =3D=3D JesiConst.NO_FRAGMENTS) {
+                String esiTag;
+                esiTag =3D new StringBuffer().append("<esi:include src=3D\=
"")
+                        .append(this.currentURL)
+                        .append("&")
+                        .append(JesiConst.ACL_GROUP)
+                        .append("=3D")
+                        .append(aclGroupFinalKey)
+                        .append("\"> esi:include group tag here </esi:incl=
ude>")
+                        .toString();
+                return esiTag;
+            }
+//            else if (requestedFragment !=3D container.getID() + 1000) re=
turn null;
+        }*/
+        return (ContainerHTMLCacheEntry) containerHTMLCache.get(containerK=
ey);
+    }
 }

Added: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/c=
ache/ContainerHTMLCacheEntry.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/branches/JAHIA=
-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cache/ContainerHTMLCac=
heEntry.java&rev=3D19379&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 (added)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/cach=
e/ContainerHTMLCacheEntry.java Tue Dec 18 15:42:13 2007
@@ -0,0 +1,36 @@
+package org.jahia.services.cache;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.io.Serializable;
+
+/**
+ * This is the HTML Container Cache entry wrapper. It contains the body co=
ntent as a String and a Map of properties.
+ *
+ * @author rfelden
+ * @version 17 d=C3=A9c. 2007
+ */
+public class ContainerHTMLCacheEntry implements Serializable {
+
+    private String bodyContent ;
+
+    private HashMap<String, Object> properties ;
+
+    public ContainerHTMLCacheEntry(String bodyContent) {
+        this.bodyContent =3D bodyContent ;
+    }
+
+    public ContainerHTMLCacheEntry(String bodyContent, Map<String, Object>=
 map) {
+        this.bodyContent =3D bodyContent ;
+        properties =3D new HashMap<String, Object>(map) ;
+    }
+
+    public Object getProperty(String key) {
+        if (properties =3D=3D null) return null ;
+        else return properties.get(key) ;
+    }
+
+    public String getBodyContent() {
+        return bodyContent ;
+    }
+}

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/service=
s/pages/JahiaPageBaseService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/services/pages/JahiaPageBaseService.ja=
va&rev=3D19379&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/page=
s/JahiaPageBaseService.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/page=
s/JahiaPageBaseService.java Tue Dec 18 15:42:13 2007
@@ -1307,6 +1307,23 @@
         =

         return path;
     }
+
+
+    /**
+     * Retrieve the pids composing the path from the home page to the curr=
ent page.
+     *
+     * @param jParams processing context
+     * @return an ordered array of PIDs
+     * @throws JahiaException retrieval failed
+     */
+    public int[] getCurrentPagePathAsPIDs(ProcessingContext jParams) throw=
s JahiaException {
+        Vector<ContentPage> pages =3D getContentPagePath(jParams.getPageID=
(), jParams) ;
+        int[] path =3D new int[pages.size()] ;
+        for (int i=3D0; i<pages.size(); i++) {
+            path[i] =3D Integer.valueOf(pages.get(i).getPageID()) ;
+        }
+        return path ;
+    }
     =

     public Vector modifyContentPagePath(Vector path, int command,
             EntryLoadRequest loadRequest, String opMode, JahiaUser user) {

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/service=
s/pages/JahiaPageService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/services/pages/JahiaPageService.java&r=
ev=3D19379&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/page=
s/JahiaPageService.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/services/page=
s/JahiaPageService.java Tue Dec 18 15:42:13 2007
@@ -487,7 +487,15 @@
      */
     public abstract Vector getContentPagePath(int pageID, EntryLoadRequest=
 loadRequest,
                                      String opMode, JahiaUser user, int co=
mmand)
-            throws JahiaException;    =

+            throws JahiaException;
+
+    /**
+     * Retrieve the pids composing the path from the home page to the spec=
ified page.
+     * @param jParams processing context
+     * @return an ordered array of PIDs
+     * @throws JahiaException retrieval failed
+     */
+    public abstract int[] getCurrentPagePathAsPIDs(ProcessingContext jPara=
ms) throws JahiaException ;
 =

     //--------------------------------------------------------------------=
-----
     /**

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs=
/container/ContainerCacheTag.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/taglibs/container/ContainerCacheTag.ja=
va&rev=3D19379&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/conta=
iner/ContainerCacheTag.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/conta=
iner/ContainerCacheTag.java Tue Dec 18 15:42:13 2007
@@ -14,6 +14,7 @@
 import org.jahia.registries.ServicesRegistry;
 import org.jahia.services.cache.ContainerHTMLCache;
 import org.jahia.services.cache.GroupCacheKey;
+import org.jahia.services.cache.ContainerHTMLCacheEntry;
 import org.jahia.services.esi.EsiService;
 import org.jahia.services.esi.tagstack.Fragment;
 import org.jahia.taglibs.esi.JesiConst;
@@ -312,7 +313,7 @@
                 curLanguageCode,
                 mode,  =

                 processingContext.getScheme(), dependencies);
-        containerHTMLCache.put(containerKey, bodyContent);
+        containerHTMLCache.put(containerKey, new ContainerHTMLCacheEntry(b=
odyContent));
     }
 =

     private String getFromContainerCache(JahiaContainer jahiaContainer,Jah=
iaData jahiaData,boolean b) throws JahiaInitializationException {
@@ -347,7 +348,11 @@
             }
 //            else if (requestedFragment !=3D container.getID() + 1000) re=
turn null;
         }
-        return (String) containerHTMLCache.get(containerKey);
+        ContainerHTMLCacheEntry entry =3D (ContainerHTMLCacheEntry) contai=
nerHTMLCache.get(containerKey) ;
+        if (entry =3D=3D null)
+            return null ;
+        else
+            return entry.getBodyContent();
     }
 =

     private boolean putEsiHeader() throws JspTagException, JahiaInitializa=
tionException {

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs=
/container/ContainerTag.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/taglibs/container/ContainerTag.java&re=
v=3D19379&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/conta=
iner/ContainerTag.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/conta=
iner/ContainerTag.java Tue Dec 18 15:42:13 2007
@@ -30,6 +30,7 @@
 import org.jahia.registries.ServicesRegistry;
 import org.jahia.services.cache.ContainerHTMLCache;
 import org.jahia.services.cache.GroupCacheKey;
+import org.jahia.services.cache.ContainerHTMLCacheEntry;
 import org.jahia.services.esi.EsiService;
 import org.jahia.services.esi.tagstack.Fragment;
 import org.jahia.taglibs.esi.JesiConst;
@@ -492,7 +493,7 @@
                                                              mode,
                                                              processingCon=
text.getScheme(),
                                                              dependencies);
-        containerHTMLCache.put(containerKey, bodyContent);
+        containerHTMLCache.put(containerKey, new ContainerHTMLCacheEntry(b=
odyContent));
     }
 =

     private String getFromContainerCache(JahiaContainer jahiaContainer,
@@ -533,7 +534,11 @@
             }
 //            else if (requestedFragment !=3D container.getID() + 1000) re=
turn null;
         }
-        return (String) containerHTMLCache.get(containerKey);
+        ContainerHTMLCacheEntry entry =3D (ContainerHTMLCacheEntry) contai=
nerHTMLCache.get(containerKey) ;
+        if (entry =3D=3D null)
+            return null ;
+        else
+            return entry.getBodyContent();
     }
 =

 }

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=
=3D19379&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 Tue Dec 18 15:42:13 2007
@@ -29,14 +29,19 @@
 import org.jahia.gui.GuiBean;
 import org.jahia.params.ProcessingContext;
 import org.jahia.services.pages.JahiaPage;
+import org.jahia.services.cache.ContainerHTMLCacheEntry;
 import org.jahia.taglibs.AbstractJahiaTag;
+import org.jahia.taglibs.util.Utils;
+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;
 import javax.servlet.jsp.JspWriter;
 import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
+import java.util.*;
 =

 public class NavMenuTag extends AbstractJahiaTag {
 =

@@ -56,7 +61,9 @@
     private String containerListLabel =3D null;
     private int reqLevel =3D -1;
     private boolean editMode;
-
+    private int[] pagePath ;
+    private boolean cache =3D true ;
+    private boolean debug =3D false ;
 =

 =

     public void setContainerListName(String containerListName) {
@@ -107,10 +114,22 @@
         final RequestBean requestBean =3D (RequestBean) pageContext.findAt=
tribute("currentRequest");
         ServletRequest request =3D pageContext.getRequest();
         jData =3D (JahiaData) request.getAttribute("org.jahia.data.JahiaDa=
ta");
+
+        // set various useful parameters
         editMode =3D requestBean.isEditMode();
+        String cacheParam =3D jData.getProcessingContext().getParameter(Pr=
ocessingContext.CONTAINERCACHE_MODE_PARAMETER) ;
+        if (cacheParam !=3D  null) {
+            if ("debug".equals(cacheParam)) {
+                debug =3D true ;
+            } else if ("off".equals(cacheParam)) {
+                cache =3D false ;
+            }
+        }
+
         try {
             createContainerList() ;
             defaultSettings(jData.gui());
+            setCurrentPagePath(jData) ;
             getPageSubTree(jData, jData.gui().getLevelID(startLevel), star=
tLevel);
         } catch (JahiaException e) {
             logger.error("JahiaException rendering the menu", e);
@@ -162,6 +181,12 @@
                 }
             }
         }
+
+
+    }
+
+    private void setCurrentPagePath(JahiaData jData) throws JahiaException=
 {
+        pagePath =3D ServicesRegistry.getInstance().getJahiaPageService().=
getCurrentPagePathAsPIDs(jData.getProcessingContext()) ;
     }
 =

     private void getPageSubTree(JahiaData jData, int pageId, int level) th=
rows JahiaException, IOException {
@@ -186,10 +211,106 @@
             while (linkContainerEnum.hasMoreElements()) {
                 logger.debug("level =3D " + level);
                 JahiaContainer linkContainer =3D (JahiaContainer) linkCont=
ainerEnum.nextElement();
-                JahiaPage link =3D (JahiaPage) linkContainer.getFieldObjec=
t(pageFieldName);
 =

+                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() ;
+
+                        boolean isInPath =3D Utils.isContainedInArray(page=
Path, linkID) ;
+
+                        if (!hide) {
+                            if (begin) {
+                                if (cssClassName =3D=3D null) {
+                                    out.print("<ul>");
+                                } else {
+                                    out.print(new StringBuffer().append("<=
ul class=3D\"").append(cssClassName).append("\">").toString());
+                                }
+                                begin =3D false;
+                            }
+                            String cssClass =3D " class=3D\"item standard\=
"";
+                            if (isInPath) {
+                                if (level =3D=3D reqLevel - 1) {
+                                    cssClass =3D " class=3D\"item selected=
\"";
+                                } else {
+                                    cssClass =3D " class=3D\"item inpath\"=
";
+                                }
+                            }
+                            StringBuffer sbf =3D new StringBuffer();
+                            sbf.append("<li").append(cssClass).append("><d=
iv><div>\n") ;
+
+                            // HTML to cache
+                            StringBuffer cacheSbf =3D new StringBuffer() ;
+                            if (cache) {
+                                cacheSbf.append("<a href=3D\"").append(lin=
k.getURL(jParams)).append("\"");
+                            }
+                            else { // cache deactivated -> append /contain=
ercache/off to URLs
+                                cacheSbf.append("<a href=3D\"").append(lin=
k.getURL(jParams)).append("/containercache/off").append("\"");
+                            }
+                            cacheSbf.append(" title=3D\"").append(link.get=
Title()).append("\">");
+                            cacheSbf.append(link.getHighLightDiffTitle(jPa=
rams)).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))=
 ;
+
+                                // storage into cache
+                                ContainerHTMLCacheEntry entryCache =3D new=
 ContainerHTMLCacheEntry(cacheSbf.toString(), 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),
+                                        null, null, false, "", bundleKey, =
null, out);
+                            }
+                            out.println("</div></div>") ;
+                        }
+
+                        // displays sub links
+                        if (!onlyTop && (!expandOnlyPageInPath || isInPath=
)) {
+                            getPageSubTree(jData, linkID, level + 1);
+                        }
+                        if (!hide) out.println("</li>");
+
+                    } else {
+                        // no navlink
+                        if (editMode) {
+                            if (begin) {
+                                out.println("<ul>");
+                                begin =3D false;
+                            }
+                            out.println("<li>");
+                            out.print("<a>n.d.</a>");
+                            jData.gui().html().drawBeginActionMenu(new Con=
tainerBean(linkContainer, jParams),
+                                    null, null, false, containerNamePostFi=
x, bundleKey, "add.navigationLinks", out);
+                            out.println("</li>");
+                        }
+                    }
+                }
+                // entry is cached
+                else {
+                    // get cache properties
+                    int linkID =3D (Integer) cacheEntry.getProperty("pageI=
D") ;
+
+                    boolean isInPath =3D Utils.isContainedInArray(pagePath=
, linkID) ;
 =

-                if (link !=3D null) {
                     if (!hide) {
                         if (begin) {
                             if (cssClassName =3D=3D null) {
@@ -200,18 +321,21 @@
                             begin =3D false;
                         }
                         String cssClass =3D " class=3D\"item standard\"";
-                        if (jData.gui().isPageInPath(link.getID()))
+
+                        if (isInPath) {
                             if (level =3D=3D reqLevel - 1) {
                                 cssClass =3D " class=3D\"item selected\"";
                             } else {
                                 cssClass =3D " class=3D\"item inpath\"";
                             }
+                        }
                         StringBuffer sbf =3D new StringBuffer();
                         sbf.append("<li").append(cssClass).append("><div><=
div>\n") ;
-                        sbf.append("<a href=3D\"").append(link.getURL(jPar=
ams)).append("\"");
-                        sbf.append(" title=3D\"").append(link.getTitle()).=
append("\">");
-                        sbf.append(link.getHighLightDiffTitle(jParams)).ap=
pend("</a>");
+                        sbf.append(cacheEntry.getBodyContent()) ;
                         out.println(sbf.toString());
+                        if (debug) {
+                            out.println("<span>[c]</span>") ;
+                        }
                         if (editMode) {
                             jData.gui().html().drawBeginActionMenu(new Con=
tainerBean(linkContainer, jParams),
                                     null, null, false, "", bundleKey, null=
, out);
@@ -220,24 +344,11 @@
                     }
 =

                     // displays sub links
-                    if (!onlyTop && (!expandOnlyPageInPath || jData.gui().=
isPageInPath(link.getID()))) {
-                        getPageSubTree(jData, link.getID(), level + 1);
+                    if (!onlyTop && (!expandOnlyPageInPath || isInPath)) {
+                        getPageSubTree(jData, linkID, level + 1);
                     }
                     if (!hide) out.println("</li>");
 =

-                } else {
-                    // no navlink
-                    if (editMode) {
-                        if (begin) {
-                            out.println("<ul>");
-                            begin =3D false;
-                        }
-                        out.println("<li>");
-                        out.print("<a>n.d.</a>");
-                        jData.gui().html().drawBeginActionMenu(new Contain=
erBean(linkContainer, jParams),
-                                null, null, false, containerNamePostFix, b=
undleKey, "add.navigationLinks", out);
-                        out.println("</li>");
-                    }
                 }
             }
         }
@@ -264,6 +375,7 @@
 =

     }
 =

+
     public int doEndTag() throws JspException {
         // let's reinitialize the tag variables to allow tag object reuse =
in
         // pooling.
@@ -279,6 +391,9 @@
         bundleKey =3D null;
         containerListNamePostFix =3D null;
         containerNamePostFix =3D null;
+        cache =3D true ;
+        debug =3D false ;
+        pagePath =3D null ;
         return EVAL_PAGE;
     }
 }
\ No newline at end of file

Modified: branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs=
/util/Utils.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-INCLUD=
E-TAG-BRANCH/core/src/java/org/jahia/taglibs/util/Utils.java&rev=3D19379&re=
pname=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/util/=
Utils.java (original)
+++ branches/JAHIA-INCLUDE-TAG-BRANCH/core/src/java/org/jahia/taglibs/util/=
Utils.java Tue Dec 18 15:42:13 2007
@@ -204,4 +204,20 @@
         return false;
     }
 =

+    /**
+     * Check if an int value is contained in an int array.
+     * =

+     * @param array an Integer array
+     * @param value an int value
+     * @return true if contained, false otherwise
+     */
+    public static boolean isContainedInArray(int[] array, int value) {
+        for (int n:array) {
+            if (n =3D=3D value) {
+                return true ;
+            }
+        }
+        return false ;
+    }
+
 }

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

Reply via email to