Author: mcardle
Date: Tue Jan 10 16:35:00 2006
New Revision: 12742

URL: https://jahia.mine.nu/websvn/listing.php?sc=1&rev=12742&repname=jahia
Log:
* support for invalidation of Staging-only pages

Modified:
    trunk/core/src/java/org/jahia/services/esi/EsiInvalidation.java

Modified: trunk/core/src/java/org/jahia/services/esi/EsiInvalidation.java
URL: 
https://jahia.mine.nu/websvn/diff.php?path=/trunk/core/src/java/org/jahia/services/esi/EsiInvalidation.java&rev=12742&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/services/esi/EsiInvalidation.java (original)
+++ trunk/core/src/java/org/jahia/services/esi/EsiInvalidation.java Tue Jan 10 
16:35:00 2006
@@ -5,8 +5,12 @@
 import org.jahia.params.ParamBean;
 import org.jahia.settings.SettingsBean;
 import org.jahia.bin.Jahia;
+import org.jahia.services.pages.ContentPage;
+import org.jahia.services.version.EntryLoadRequest;
+import org.jahia.exceptions.JahiaException;
 
 import java.util.HashMap;
+import java.util.Map;
 import java.util.regex.PatternSyntaxException;
 
 /**
@@ -150,8 +154,9 @@
 
         //are we dealing with a /pid/xx url format or does the page have a 
UrlKey?
         //if so, make sure we invalidate it via its UrlKey
-        String pageURLKeyPart = 
paramBean.getPageURLKeyPart(Integer.parseInt(pid));
-        String pageURLPart = paramBean.getPageURLPart(Integer.parseInt(pid));
+        int curPageID = Integer.parseInt(pid);
+        String pageURLKeyPart = paramBean.getPageURLKeyPart(curPageID);
+        String pageURLPart = paramBean.getPageURLPart(curPageID);
         String pageMarker = pid;
         String pagePrefix = "/pid/";
         if (!"".equals(pageURLKeyPart) && "".equals(pageURLPart) ) {
@@ -170,6 +175,7 @@
             //make sure this is a fragment i.e. it contains "__esi_fragment"
             str.append( " 
URIEXP=\"").append(pagePrefix).append(pageMarker).append("\\?__esi_fragment=").append(fragID).append("\"
 > \n");
             //str.append("<OTHER NAME=\"URI\" TYPE=\"REGEX\" VALUE=\"/pid/" + 
pid + "[^0-9]\"/> ");
+            str.append(getStagingInvalidationString(curPageID));
             str.append("</ADVANCEDSELECTOR> \n");
             str.append("<ACTION REMOVALTTL=\"").append(removalTTL).append("\" 
/> \n");
             str.append("<INFO 
VALUE=\"remove-Fragment-on-PID-").append(pageMarker).append("-FID-").append(fragID).append("\"/>
 \n");
@@ -243,8 +249,9 @@
 
         //are we dealing with a /pid/xx url format or does the page have a 
UrlKey?
         //if so, make sure we invalidate it via its UrlKey
-        String pageURLKeyPart = 
paramBean.getPageURLKeyPart(Integer.parseInt(pid));
-        String pageURLPart = paramBean.getPageURLPart(Integer.parseInt(pid));
+        int curPageID = Integer.parseInt(pid);
+        String pageURLKeyPart = paramBean.getPageURLKeyPart(curPageID);
+        String pageURLPart = paramBean.getPageURLPart(curPageID);
         String pageMarker = pid;
         String pagePrefix = "/pid/";
         if (!"".equals(pageURLKeyPart) && "".equals(pageURLPart) ) {
@@ -256,9 +263,13 @@
         //and create an invalidation entry for each combo:
         for (int  i = 0; i < hosts.length; i++) {
 
+            String stagingInvalidationString = 
getStagingInvalidationString(curPageID);
+
+
             str.append("<OBJECT> \n");
             str.append("<ADVANCEDSELECTOR 
URIPREFIX=\"").append(uriPrefix).append("/\" 
HOST=\"").append(hosts[i]).append(":").append(ports[i]).append("\" > \n");
             str.append("<OTHER NAME=\"URI\" TYPE=\"REGEX\" 
VALUE=\"").append(pagePrefix).append(pageMarker).append("$\"/> \n");
+            str.append(stagingInvalidationString);
             str.append("</ADVANCEDSELECTOR> \n");
             str.append("<ACTION REMOVALTTL=\"").append(removalTTL).append("\" 
/> \n");
             str.append("<INFO 
VALUE=\"remove-Template-on-PID-").append(pageMarker).append("-InvType_1of3\"/> 
\n");
@@ -267,6 +278,7 @@
             str.append("<OBJECT> \n");
             str.append("<ADVANCEDSELECTOR 
URIPREFIX=\"").append(uriPrefix).append("/\" 
HOST=\"").append(hosts[i]).append(":").append(ports[i]+"\" > \n");
             str.append("<OTHER NAME=\"URI\" TYPE=\"REGEX\" 
VALUE=\"").append(pagePrefix).append(pageMarker).append("/$\"/> \n");
+            str.append(stagingInvalidationString);
             str.append("</ADVANCEDSELECTOR> \n");
             str.append("<ACTION REMOVALTTL=\"").append(removalTTL).append("\" 
/> \n");
             str.append("<INFO 
VALUE=\"remove-Template-on-PID-").append(pageMarker).append("-InvType_2of3\"/> 
\n");
@@ -275,6 +287,7 @@
             str.append("<OBJECT> \n");
             str.append("<ADVANCEDSELECTOR 
URIPREFIX=\"").append(uriPrefix).append("/\" HOST=\"").append(hosts[i] 
).append(":").append(ports[i]).append("\" > \n");
             str.append("<OTHER NAME=\"URI\" TYPE=\"REGEX\" 
VALUE=\"").append(pagePrefix).append(pageMarker).append("\\?[^_]\"/> \n");
+            str.append(stagingInvalidationString);
             str.append("</ADVANCEDSELECTOR> \n");
             str.append("<ACTION REMOVALTTL=\"").append(removalTTL).append("\" 
/> \n");
             str.append("<INFO 
VALUE=\"remove-Template-on-PID-").append(pageMarker).append("-InvType_3of3\"/> 
\n");
@@ -314,6 +327,46 @@
     }
 
     /**
+     * adds a clause to only invalidate templates/fragments in 
preview/compare/edit modes if the
+     * current page has is in staging. Otherwise nothing is returned and 
therefore pages in every mode,
+     * including live, are invalidated.
+     *
+     * @param pageID
+     * @return
+     */
+    public static String getStagingInvalidationString ( int pageID ) {
+
+        StringBuffer invStagingModeOnly = new StringBuffer("");
+
+        try {
+            ContentPage contentPage = ContentPage.getPage(pageID);
+
+            final Map languagesStatesAll = 
contentPage.getLanguagesStates(true);
+            final Iterator iTer = languagesStatesAll.values().iterator();
+            boolean isAllActive = true;
+            while (iTer.hasNext()) {
+                final Integer state = (Integer) iTer.next();
+                if (state == null
+                        || state.intValue() != 
EntryLoadRequest.ACTIVE_WORKFLOW_STATE
+                        ) {
+                    isAllActive=false;
+                    break;
+                }
+            }
+
+            if (!isAllActive) {
+                invStagingModeOnly.append("<OTHER NAME=\"URI\" TYPE=\"REGEX\" 
VALUE=\"")
+                        .append("(/op/compare|/op/preview|/op/edit)")
+                        .append("\"/> \n");
+            }
+        } catch (JahiaException ex) {
+            logger.error("Could not load ContentPage object for page with 
ID["+pageID+"] : "+ ex);
+            //in this case, it will invalidate live mode also so no biggie 
really.
+        }
+        return invStagingModeOnly.toString();
+    }
+
+    /**
      * Retrieves all template/fragments which are currently marked to be 
invalidated, from
      * which an ESI invalidation message is constructed.
      *

Reply via email to