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
  +
   }
  

Reply via email to