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