Author: mcardle
Date: Mon Aug 14 08:28:12 2006
New Revision: 14891

URL: https://svndev.jahia.net/websvn/listing.php?sc=1&rev=14891&repname=jahia
Log:
* (Continued) support for aclGroup template sharing and other things 

Modified:
    trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java
    
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
    trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java
    trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java
    trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton
    trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld
    
trunk/core/src/webapp/WEB-INF/var/shared_templates/corporate_portal_templates_v2.jar

Modified: 
trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java 
(original)
+++ trunk/core/src/java/org/jahia/services/esi/EsiTemplateCachingServlet.java 
Mon Aug 14 08:28:12 2006
@@ -55,38 +55,50 @@
             if (session == null) {
                 //throw new JahiaSessionExpirationException();
                 errorDetected = true;
-                logger.error("JahiaSessionExpirationException for request : " 
+ request.getRequestURL().toString());
+                logger.info("no user session for request : " + 
request.getRequestURL().toString());
+                response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+                return;
             }
+
+            String userName=null;
+            String aclGroupKeyForUser = null;
+
             JahiaUser jahiaUser = (JahiaUser) 
session.getAttribute(ParamBean.SESSION_USER);
             if (jahiaUser == null ) {
                 logger.error("User is not logged in for request : " + 
request.getRequestURL().toString());
                 errorDetected = true;
             }
+            else {
 
-            //TODO: make sure its a UTF RESPONSE
-            //TODO: make sure its all URLEncoded
-
-            String userName=null;
-            String aclGroupKeyForUser = null;
-            if ( !jahiaUser.getUsername().equals("guest") ) {
-                try {
-                    aclGroupKeyForUser = URLEncoder.encode( 
getAclGroupKeyForUser(jahiaUser),"UTF-8");
-                    userName = URLEncoder.encode(jahiaUser.getUsername()+":"+ 
jahiaUser.getSiteID(),"UTF-8");
-                } catch (UnsupportedEncodingException ex)  {
-                    logger.error("[esi]:  bad encoding scheme");
+                if ( !jahiaUser.getUsername().equals("guest") ) {
+                    try {
+                        aclGroupKeyForUser = getAclGroupKeyForUser(jahiaUser);
+                        userName = 
URLEncoder.encode(jahiaUser.getUsername()+":"+ jahiaUser.getSiteID(),"UTF-8");
+                    } catch (UnsupportedEncodingException ex)  {
+                        logger.error("[esi]:  bad encoding scheme");
+                        errorDetected = true;
+                    }
                 }
             }
 
-            response.setContentType("text/plain");
-            response.addHeader("Expires" , "Mon, 26 Jul 1997 05:00:00 GMT" );
-            response.addHeader("Cache-Control" , "no-store, no-cache, 
must-revalidate" );
-            response.addHeader("Pragma" , "no-cache" );
-
-            PrintWriter out = response.getWriter();
-            String responseStr = 
userName+JesiConst.ACLGROUP_TEMPLATE_REPONSE_SEPARATOR+aclGroupKeyForUser;
-            out.println(responseStr);
-            if (logger.isDebugEnabled())
-                logger.debug("Response : "+responseStr);
+            if (errorDetected)
+                
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            else {
+
+                response.setStatus(HttpServletResponse.SC_OK);
+
+                response.setContentType("text/plain");
+                response.addHeader("Expires" , "Mon, 26 Jul 1997 05:00:00 GMT" 
);
+                response.addHeader("Cache-Control" , "no-store, no-cache, 
must-revalidate" );
+                response.addHeader("Pragma" , "no-cache" );
+
+                PrintWriter out = response.getWriter();
+                String responseStr = 
userName+JesiConst.ACLGROUP_TEMPLATE_REPONSE_SEPARATOR+aclGroupKeyForUser;
+                out.println(responseStr);
+
+                if (logger.isDebugEnabled())
+                    logger.debug("Response : "+responseStr);
+            }
         }
         else
             logger.error("You need to activate esiEnableTemplateCaching in 
jahia.properties.");
@@ -95,7 +107,7 @@
 
     public String getAclGroupKeyForUser(JahiaUser jahiaUser) {
 
-        EsiService esiService = ServicesRegistry.getInstance().getEsiService();
+        //EsiService esiService = 
ServicesRegistry.getInstance().getEsiService();
 
         StringBuffer aclGroupParamVal = new StringBuffer();
 

Modified: 
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java&rev=14891&repname=jahia
==============================================================================
--- 
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
 (original)
+++ 
trunk/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
 Mon Aug 14 08:28:12 2006
@@ -90,7 +90,7 @@
  */
 public class CMSSlideContentListener extends JahiaEventListener implements
     ContentListener, MacroListener,
-    WebdavListener {
+    WebdavListener {     
 
     private static org.apache.log4j.Logger logger =
         org.apache.log4j.Logger.getLogger(CMSSlideContentListener.class);

Modified: trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java (original)
+++ trunk/core/src/java/org/jahia/taglibs/esi/JesiFragmentTag.java Mon Aug 14 
08:28:12 2006
@@ -17,33 +17,32 @@
  */package org.jahia.taglibs.esi;
 
 
-import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
-import org.apache.commons.lang.RandomStringUtils;
-import org.jahia.bin.Jahia;
-import org.jahia.params.ParamBean;
-import org.jahia.params.SessionState;
-import org.jahia.registries.ServicesRegistry;
-import org.jahia.resourcebundle.JahiaResourceBundle;
-import org.jahia.services.acl.JahiaACLManagerService;
-import org.jahia.services.esi.EsiInvalidationWriterService;
-import org.jahia.services.esi.EsiService;
-import org.jahia.services.esi.tagstack.Fragment;
-import org.jahia.services.usermanager.JahiaGroupManagerService;
-import org.jahia.services.usermanager.JahiaUser;
-
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.JspTagException;
 import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.Tag;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
-import java.net.URL;
+import org.jahia.registries.ServicesRegistry;
+import org.jahia.bin.Jahia;
 import java.text.DateFormat;
 import java.util.Date;
-import java.util.Enumeration;
 import java.util.Vector;
+import java.util.Enumeration;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import org.jahia.resourcebundle.JahiaResourceBundle;
+import org.jahia.services.esi.EsiService;
+import org.jahia.services.esi.EsiInvalidationWriterService;
+import org.jahia.services.esi.tagstack.Fragment;
+import org.jahia.services.usermanager.*;
+import org.jahia.services.acl.JahiaACLManagerService;
+import org.jahia.params.ParamBean;
+import org.jahia.params.SessionState;
+import org.apache.commons.lang.RandomStringUtils;
+import EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
 
 public class JesiFragmentTag extends JesiBodyTag {
 
@@ -402,7 +401,8 @@
             //if the parent template is aclGrouped, then we must use put a 
special marker in the fragment link,
             // and not the unique user=JahiaUsername identifier so that we can 
share the same identical template with
             //users with same acl group memberships
-            if (!JesiConst.UNSET.equals(parentTemplate.aclGroup)) {
+            if (Jahia.getSettings().isEsiEnableTemplateCaching()
+                &&!JesiConst.UNSET.equals(parentTemplate.aclGroup)) {
                 userPart = 
"&"+JesiConst.USER+"="+JesiConst.ACLGROUP_TEMPLATE_USER_MARKER;
             }
             //otherwise, just revert back to default behaviour for 
non-aclGrouped Templates, which

Modified: trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java (original)
+++ trunk/core/src/java/org/jahia/taglibs/esi/JesiTemplateTag.java Mon Aug 14 
08:28:12 2006
@@ -36,7 +36,7 @@
 import org.jahia.services.esi.EsiService;
 import org.jahia.params.ParamBean;
 import org.jahia.params.ProcessingContext;
-
+import org.jboss.cache.CacheException;
 
 public class JesiTemplateTag extends JesiBodyTag
 {
@@ -48,9 +48,17 @@
     String requestedFragmentBody;
     boolean controlSet;
     String URL;
+    boolean requestFromSurrogate_10;
+    boolean firstExecute;
+    Template tpl;
+    boolean aclGroupedTemplate = false;
 
     public JesiTemplateTag()
     {
+        aclGroupedTemplate = false;
+        tpl = null;
+        firstExecute= false;
+        requestFromSurrogate_10 = false;
         fragmentCount = 0;
         requestedFragment = JesiConst.NO_FRAGMENTS;
         requestedFragmentBody = null;
@@ -100,12 +108,13 @@
         //we want to do this even when ESI isn't supported for this request, 
so that all compiled
         //pages register their templates with the ESI cache, since future 
requests with ESI-support
         //will need this information.
-        Template tpl = 
ServicesRegistry.getInstance().getEsiService().addTemplate 
(Jahia.getThreadParamBean().getSiteID(),
+        this.tpl = ServicesRegistry.getInstance().getEsiService().addTemplate 
(Jahia.getThreadParamBean().getSiteID(),
                     Jahia.getThreadParamBean().getPageID(), this.URL);
         if (logger.isDebugEnabled())
                     logger.debug("[esi]:  Inside Template on 
page:"+Jahia.getThreadParamBean().getPageID() +" for request url:" + URL);
 
         //System.err.println("wwww  Template.URL : "+this.URL);
+        requestFromSurrogate_10 = JesiTag.requestFromSurrogate_10(req);
 
         //If no support for ESI, then skip this tag and just return its body
         if(!JesiTag.requestFromSurrogate_10(req))
@@ -118,25 +127,26 @@
         try
         {
             //Yes
-            requestedFragment = 
Integer.parseInt(req.getParameter(JesiConst.FRAGMENT_URL_MARKER));
+            this.requestedFragment = 
Integer.parseInt(req.getParameter(JesiConst.FRAGMENT_URL_MARKER));
             //save request debug info
             
req.setAttribute(JesiConst.ESI_REQUEST_TYPE_INFO,"Fragment#"+requestedFragment);
         }
         catch(NumberFormatException ex)
         {
             //No
-            requestedFragment = JesiConst.NO_FRAGMENTS;//-1
+            this.requestedFragment = JesiConst.NO_FRAGMENTS;//-1
             //save request debug info
             req.setAttribute(JesiConst.ESI_REQUEST_TYPE_INFO,"Skeleton");
 
             //tag this response with the appropriate Template header
             httpResponse.setHeader(JesiConst.ESI_TEMPLATE_HEADER, "yes");
 
-            if (!JesiConst.UNSET.equals(this.aclGroup)) {
+            if (Jahia.getSettings().isEsiEnableTemplateCaching()
+                    && !JesiConst.UNSET.equals(this.aclGroup)) {
                 if (logger.isDebugEnabled()) {
                     logger.debug("aclGrouped Template detected");
                 }
-                
httpResponse.setHeader(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER, "yes");
+                aclGroupedTemplate= true;
                 if (!"true".equals(this.aclGroup)) {
                     logger.warn("aclGroup='true' is only supported argument, 
not current aclGroup="+this.aclGroup);
                 }
@@ -145,6 +155,47 @@
             
ServicesRegistry.getInstance().getEsiService().emptyCurrentTemplateIfInEditMode 
(
                     Jahia.getThreadParamBean().getSiteID(),
                     Jahia.getThreadParamBean().getPageID());
+
+
+            //this should really be in doEndTag() but response is committed by 
then, so have to do it here.
+            //(the disavantage is that we cannot cache first run of this 
template)
+            if(this.requestFromSurrogate_10 && aclGroupedTemplate) {
+                //if this is an aclGroup-shared template, then set the 
appropriate userACL header
+                //which shows if there are any specific user acls on this page.
+                try {
+                    this.firstExecute = 
this.tpl.isFirstExecute(pc.getOperationMode());
+                } catch(CacheException e) {
+                    logger.error("Could not get firstExecute ",e);
+                }
+
+                if (Jahia.getSettings().isEsiEnableTemplateCaching()
+                        && !this.firstExecute) { //if this is the first time 
we execute this template, we don't know the user ACLs yet, so just don't set 
the header just yet
+
+                    String headerVal=null;
+                    //are there any User ACLs specifically assigned to this 
page?
+                    Map aclUsernames = tpl.getAclUserNames();
+                    if (aclUsernames!=null && !aclUsernames.isEmpty()) {
+                        StringBuffer sb = new StringBuffer();
+                        Iterator usersIt = aclUsernames.keySet().iterator();
+                        while (usersIt.hasNext()) {
+                            String userName = (String) usersIt.next();
+                            
sb.append(userName).append(JesiConst.ACLGROUP_TEMPLATE_USERACLS_SEPARATOR);
+                        }
+                        headerVal = sb.toString();
+                    }
+                    else
+                        headerVal = 
JesiConst.ACLGROUP_TEMPLATE_NO_USERACLS_DETECTED;
+
+                    
httpResponse.setHeader(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER,headerVal);
+
+                    if (httpResponse.isCommitted())
+                        logger.warn("Could not add 
"+JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER+" because request was committed 
already.");
+
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("Set " + 
JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER+" header : "+headerVal);
+                    }
+                }
+            }
         }
         //If it's not requesting a fragment and Control tag isn't present, 
then set HTTP ESI headers
         if(requestedFragment == JesiConst.NO_FRAGMENTS
@@ -171,6 +222,8 @@
             return javax.servlet.jsp.tagext.Tag.EVAL_PAGE;//6;
         }
 
+        ProcessingContext pc = Jahia.getThreadParamBean();
+
         //Check that the total number of Fragments on this Template reflects 
same the total number
         //of Fragments stored in the "Fragments" HashMap, if not delete any 
excess Fragment entries
         ServicesRegistry.getInstance().getEsiService().deleteOldFragments (
@@ -182,7 +235,7 @@
 
         HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
         //If ESI supported and it's requesting a fragment, then output the 
Fragment body
-        if(JesiTag.requestFromSurrogate_10(req) && requestedFragment != 
JesiConst.NO_FRAGMENTS)
+        if(requestFromSurrogate_10 && requestedFragment != 
JesiConst.NO_FRAGMENTS) {
             try
             {
                 
getBodyContent().getEnclosingWriter().print(requestedFragmentBody);
@@ -192,13 +245,14 @@
             {
                 throw new JspTagException(ioexception.toString());
             }
-        if(JesiTag.requestFromSurrogate_10(req) && requestedFragment == 
JesiConst.NO_FRAGMENTS) {
+        }
+
+        if(requestFromSurrogate_10 && requestedFragment == 
JesiConst.NO_FRAGMENTS) {
 
             if (Jahia.getSettings().getEsiDisplayFragmentDelimiters()) {
                 //For debug purposes only
                 String ctIDs = "";
                 if (Jahia.getSettings().getEsiDisplayContentIDs()) {
-                    Template tpl = 
ServicesRegistry.getInstance().getEsiService().getTemplate();
                     StringBuffer contentIDs = new StringBuffer();
                     contentIDs.append("<p>Referenced Content : ");
                     contentIDs.append("<br>ctnListID0s: 
");contentIDs.append(EsiService.printDetailedContents(tpl.getContainerListID0s()));
@@ -229,46 +283,21 @@
                     //logger.error("[esi]:  [esi]:  IO exception while trying 
to display ESI Template tag  " + ioe);
                 }
             }
+            //reset first execute
+            if (this.firstExecute)
+                try {
+                    this.tpl.setFirstExecute(false , pc.getOperationMode());
+                } catch(CacheException e) {
+                    logger.error("Could not set firstExecute ",e);
+                }
         }
 
         //We are now outside the scope of this enclosing JesiTemplateTag
         //so we are removing it from the current tagStack
         //From now on, any content access (i.e. getContainer() ) will add 
itself
         //to the previous tag in the tagStack.
-        JesiObject jesiObj = 
ServicesRegistry.getInstance().getEsiService().getTackStack().pop("Template", 
Jahia.getThreadParamBean().getPageID());
-
-        if (Jahia.getSettings().isEsiEnableTemplateCaching()) {
-            if (requestedFragment == JesiConst.NO_FRAGMENTS) {
-                if (jesiObj instanceof Template) {
-
-                    HttpServletResponse httpResponse = ((HttpServletResponse) 
pageContext.getResponse());
-                    String headerVal=null;
-                    Map aclUsernames = jesiObj.getAclUserNames();
-                    if (aclUsernames!=null && !aclUsernames.isEmpty()) {
-                        StringBuffer sb = new StringBuffer();
-                        Iterator usersIt = aclUsernames.keySet().iterator();
-                        while (usersIt.hasNext()) {
-                            String userName = (String) usersIt.next();
-                            
sb.append(userName).append(JesiConst.ACLGROUP_TEMPLATE_USERACLS_SEPARATOR);
-                        }
-                        headerVal = sb.toString();
-                    }
-                    else
-                        headerVal = 
JesiConst.ACLGROUP_TEMPLATE_NO_USERACLS_DETECTED;
-
-                    if (logger.isDebugEnabled()) {
-                        
logger.debug(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER+" header : 
"+headerVal);
-                    }
-
-                    
httpResponse.setHeader(JesiConst.ACLGROUP_TEMPLATE_USERACLS_HEADER,headerVal);
-                }
-                else {
-                    logger.warn("Could not add user acls in response header 
because tagstack head is not a Template : "+jesiObj);
-                }
-            }
-        }
-
 
+        JesiObject jesiObj = 
ServicesRegistry.getInstance().getEsiService().getTackStack().pop("Template", 
pc.getPageID());
 
         if 
(!ServicesRegistry.getInstance().getEsiService().getTackStack().isEmpty()) {
             logger.info("tagStack isn't empty when it should. Clearing 
manually. "+ServicesRegistry.getInstance().getEsiService().getTackStack());
@@ -284,6 +313,9 @@
 
     public void release()
     {
+        aclGroupedTemplate = false;
+        firstExecute= false;
+        requestFromSurrogate_10 = false;
         fragmentCount = 0;
         requestedFragment = JesiConst.NO_FRAGMENTS;//-1
         controlSet = false;

Modified: trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton (original)
+++ trunk/core/src/webapp/WEB-INF/etc/config/jahia.skeleton Mon Aug 14 08:28:12 
2006
@@ -293,10 +293,10 @@
 # that invalidation messages will be queued up and sent all together with the 
next request
 # to Jahia (meaning the cached pages won't be updated until a direct request 
to Jahia
 # -not the ESI server- is made).
-# esiEachTimePublishingEventCausesSOAPInvalidation         = false
+esiEachTimePublishingEventCausesSOAPInvalidation         = true
 
 # Enable template caching of aclGrouped template
-# esiEnableTemplateCaching                                 =   true
+esiEnableTemplateCaching                                 =   false
 
 ######################################################################
 ### JMS Cache Settings ###############################################

Modified: trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld&rev=14891&repname=jahia
==============================================================================
--- trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld (original)
+++ trunk/core/src/webapp/WEB-INF/tld/jesi-tags.tld Mon Aug 14 08:28:12 2006
@@ -94,6 +94,10 @@
       <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
+    <name>aclGroup</name>
+      <rtexprvalue>true</rtexprvalue>
+    </attribute>
+    <attribute>
       <name>user</name>
       <rtexprvalue>true</rtexprvalue>
     </attribute>

Modified: 
trunk/core/src/webapp/WEB-INF/var/shared_templates/corporate_portal_templates_v2.jar
URL: 
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/WEB-INF/var/shared_templates/corporate_portal_templates_v2.jar&rev=14891&repname=jahia
==============================================================================
Binary files - no diff available.

Reply via email to