shuber 2004/10/04 20:04:43 CEST
Modified files:
core/src/java/org/jahia/services/lock LockPrerequisites.java
core/src/java/org/jahia/views/engines/versioning/pages/actions
PagesVersioningAction.java
Log:
Added new locks :
- page properties will no longer allow a workflow on the page if it is opne
- during an undo staging, restore archived or restore deleted operation, the subsite
is locked for modifications.
Revision Changes Path
1.3 +3 -0
jahia/core/src/java/org/jahia/services/lock/LockPrerequisites.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/lock/LockPrerequisites.java.diff?r1=1.2&r2=1.3&f=h
1.3 +80 -0
jahia/core/src/java/org/jahia/views/engines/versioning/pages/actions/PagesVersioningAction.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/views/engines/versioning/pages/actions/PagesVersioningAction.java.diff?r1=1.2&r2=1.3&f=h
Index: LockPrerequisites.java
===================================================================
RCS file: /cvs/jahia/core/src/java/org/jahia/services/lock/LockPrerequisites.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LockPrerequisites.java 29 Jul 2004 17:11:50 -0000 1.2
+++ LockPrerequisites.java 4 Oct 2004 18:04:42 -0000 1.3
@@ -86,6 +86,9 @@
// Lock for workflow engine.
if (LockKey.WORKFLOW_TYPE.equals(lockKey.getType())) {
+ // first let's check if the page properties are being edited.
+ verifyLockForParentPage(lockKey, owner, lockKey.getPageID(),
justTesting, results);
+ // now let's check to see if the page objects are being edited.
verifyLockForPageChilds(lockKey, owner, justTesting, results);
lockPrerequisitesResultMap.put(lockKey, results);
}
Index: PagesVersioningAction.java
===================================================================
RCS file:
/cvs/jahia/core/src/java/org/jahia/views/engines/versioning/pages/actions/PagesVersioningAction.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PagesVersioningAction.java 17 Aug 2004 13:56:50 -0000 1.2
+++ PagesVersioningAction.java 4 Oct 2004 18:04:43 -0000 1.3
@@ -65,6 +65,12 @@
import org.jahia.views.engines.datepicker.actions.DatePickerAction;
import org.jahia.views.engines.versioning.pages.PagesVersioningViewHelper;
import
org.jahia.views.engines.versioning.revisionsdetail.actions.RevisionEntrySetDetailAction;
+import org.jahia.services.cache.HtmlCache;
+import org.jahia.services.cache.CacheFactory;
+import org.jahia.services.sitemap.JahiaSiteMapService;
+import org.jahia.data.viewhelper.sitemap.SiteMapViewHelper;
+import org.jahia.services.lock.LockService;
+import org.jahia.services.lock.LockKey;
/**
@@ -533,6 +539,7 @@
pagesToRestore.put(pageID,langs);
}
+ ArrayList acquiredPageLocks =
acquireAllLocks(engineCommonData.getParamBean());
switch( pagesVersViewHelper.getOperationType() ){
case PagesVersioningViewHelper.UNDO_STAGING_OPERATION :
{
@@ -563,6 +570,7 @@
break;
}
+ releaseAllLocks(engineCommonData.getParamBean(), acquiredPageLocks);
// reload revisions
if ( pagesVersViewHelper.getContentTreeRevisionsVisitor() != null ){
@@ -1705,4 +1713,76 @@
return additionalPages;
}
+ // #ifdef LOCK
+ private ArrayList acquireAllLocks (ParamBean jParams)
+ throws JahiaException {
+ ArrayList acquiredPageLocks = new ArrayList();
+ if (jParams.settings ().areLocksActivated ()) {
+ JahiaUser user = jParams.getUser ();
+ HtmlCache htmlCache = CacheFactory.getHtmlCache();
+ ContentPage contentPage = ServicesRegistry.getInstance ().
+ getJahiaPageService ().lookupContentPage (jParams.getPageID (),
false);
+ JahiaSiteMapService siteMapService = ServicesRegistry.getInstance ().
+ getJahiaSiteMapService ();
+ // let's make sure the whole tree is expanded before we start
+ // liberating page locks.
+ int pageInfosFlag = ContentPage.ACTIVE_PAGE_INFOS |
ContentPage.STAGING_PAGE_INFOS;
+ siteMapService.invokeTreeSiteMapViewHelperMethod (jParams.getUser (),
+ contentPage, jParams.getSessionID (), pageInfosFlag,
+ null, "expandall|0");
+
+ // here below we set the page level to maximum because we want
+ // to free all the sub pages locks.
+ SiteMapViewHelper treeSiteMapViewHelper = siteMapService.
+ getTreeSiteMapViewHelper (jParams.getUser (), contentPage,
+ jParams.getSessionID (), ContentPage.ACTIVE_PAGE_INFOS |
+ ContentPage.STAGING_PAGE_INFOS,
+ null, Integer.MAX_VALUE);
+
+ // Lock all page site if possible.
+ LockService lockRegistry = ServicesRegistry.getInstance
().getLockService ();
+ for (int i = 0; i < treeSiteMapViewHelper.size (); i++) {
+ ContentPage siteMapContentPage =
treeSiteMapViewHelper.getContentPage (i);
+ if (siteMapContentPage != null) {
+ LockKey lockKey = LockKey.composeLockKey
(LockKey.UPDATE_PAGE_TYPE,
+ siteMapContentPage.getID (), siteMapContentPage.getID
());
+ if (lockRegistry.acquire (lockKey, user, jParams.getSessionID
(),
+ jParams.getSession ().getMaxInactiveInterval ())) {
+
htmlCache.invalidatePageEntries(Integer.toString(siteMapContentPage.getID()));
+ logger.debug (
+ "Lock acquired for page " +
+ siteMapContentPage.getTitles (true));
+ acquiredPageLocks.add(new
Integer(siteMapContentPage.getID()));
+ } else {
+ logger.debug (
+ "Cannot acquire lock for page " +
+ siteMapContentPage.getTitles (true));
+ }
+ }
+ }
+ }
+ return acquiredPageLocks;
+ }
+
+ private void releaseAllLocks (ParamBean jParams, ArrayList acquiredPageLocks)
+ throws JahiaException {
+ if (jParams.settings ().areLocksActivated ()) {
+ HtmlCache htmlCache = CacheFactory.getHtmlCache();
+ ContentPage contentPage = ServicesRegistry.getInstance ().
+ getJahiaPageService ().lookupContentPage (jParams.getPageID (),
false);
+
+ // Lock all page site if possible.
+ LockService lockRegistry = ServicesRegistry.getInstance
().getLockService ();
+ Iterator acquiredPageIter = acquiredPageLocks.iterator();
+ while (acquiredPageIter.hasNext()) {
+ int curPageID = ((Integer) acquiredPageIter.next()).intValue();
+ LockKey lockKey = LockKey.composeLockKey (LockKey.UPDATE_PAGE_TYPE,
+ curPageID, curPageID);
+ lockRegistry.release (lockKey, jParams.getUser (),
jParams.getSessionID ());
+ htmlCache.invalidatePageEntries(Integer.toString(curPageID));
+ }
+ }
+ }
+ // #endif
+
}