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