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.
*