cmailleux    2005/12/12 16:13:54 CET

  Modified files:
    core/src/java/org/jahia/engines/workflow 
                                             AdvancedWorkflowEngine.java 
                                             ManageWorkflow.java 
    core/src/java/org/jahia/services/lock LockKey.java 
                                          LockPrerequisites.java 
                                          LockRegistry.java 
    core/src/webapp/jsp/jahia/engines/lock lock_messages.inc 
    core/src/webapp/jsp/jahia/engines/workflow adv_workflow.jsp 
  Log:
  Use all types of content for workflow lock instead of locking only pages
  
  Revision  Changes    Path
  1.28      +36 -12    
jahia/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java.diff?r1=1.27&r2=1.28&f=h
  1.11      +22 -1     
jahia/core/src/java/org/jahia/engines/workflow/ManageWorkflow.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/workflow/ManageWorkflow.java.diff?r1=1.10&r2=1.11&f=h
  1.5       +6 -10     jahia/core/src/java/org/jahia/services/lock/LockKey.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/lock/LockKey.java.diff?r1=1.4&r2=1.5&f=h
  1.12      +23 -25    
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.11&r2=1.12&f=h
  1.9       +1 -1      
jahia/core/src/java/org/jahia/services/lock/LockRegistry.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/lock/LockRegistry.java.diff?r1=1.8&r2=1.9&f=h
  1.3       +1 -1      
jahia/core/src/webapp/jsp/jahia/engines/lock/lock_messages.inc
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/webapp/jsp/jahia/engines/lock/lock_messages.inc.diff?r1=1.2&r2=1.3&f=h
  1.17      +5 -5      
jahia/core/src/webapp/jsp/jahia/engines/workflow/adv_workflow.jsp
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/webapp/jsp/jahia/engines/workflow/adv_workflow.jsp.diff?r1=1.16&r2=1.17&f=h
  
  
  
  Index: AdvancedWorkflowEngine.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/workflow/AdvancedWorkflowEngine.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- AdvancedWorkflowEngine.java       12 Dec 2005 11:18:39 -0000      1.27
  +++ AdvancedWorkflowEngine.java       12 Dec 2005 15:13:52 -0000      1.28
  @@ -4,6 +4,7 @@
   import org.jahia.content.JahiaObject;
   import org.jahia.content.ObjectKey;
   import org.jahia.data.JahiaData;
  +import org.jahia.data.fields.FieldTypes;
   import org.jahia.data.viewhelper.sitemap.SiteMapViewHelper;
   import org.jahia.data.viewhelper.sitemap.WorkflowSiteMapViewHelper;
   import org.jahia.engines.EngineToolBox;
  @@ -31,6 +32,9 @@
   import org.jahia.services.workflow.ActivationJob;
   import org.jahia.services.workflow.ExternalWorkflow;
   import org.jahia.services.workflow.WorkflowService;
  +import org.jahia.services.containers.ContentContainer;
  +import org.jahia.services.containers.ContentContainerList;
  +import org.jahia.services.fields.ContentField;
   import org.quartz.JobDataMap;
   import org.quartz.JobDetail;
   import org.springframework.transaction.PlatformTransactionManager;
  @@ -190,17 +194,16 @@
                           final ContentObject siteMapContentPage = 
treeSiteMapViewHelper.getContentObject(i);
                           if (siteMapContentPage != null) {
                               // can put WORKFLOW_TYPE locks only on pages
  -//                            if (siteMapContentPage instanceof ContentPage) 
{
  -                                final LockKey lockKey = 
LockKey.composeLockKey(LockKey.WORKFLOW_TYPE,
  -                                                                             
  siteMapContentPage.getID(), siteMapContentPage.getID());
  -                                if (lockRegistry.acquire(lockKey, user, 
user.getUserKey(),
  -                                                         
jParams.getSessionState().getMaxInactiveInterval())) {
  -                                    logger.info("Lock acquired for page " + 
siteMapContentPage.getTitles(true) + "by " + user.getUsername());
  -                                    
lockInformationsMap.put(lockKey,Boolean.TRUE);
  -                                } else {
  -                                    logger.info("Cannot acquire lock for 
page " + siteMapContentPage.getTitles(true) + "by " + user.getUsername());
  -                                    
lockInformationsMap.put(lockKey,Boolean.FALSE);
  -                                }
  +
  +                            final LockKey lockKey = 
getLockKey(siteMapContentPage);
  +                            if (lockRegistry.acquire(lockKey, user, 
user.getUserKey(),
  +                                                     
jParams.getSessionState().getMaxInactiveInterval())) {
  +                                logger.info("Lock acquired for page " + 
siteMapContentPage.getTitles(true) + "by " + user.getUsername());
  +                                
lockInformationsMap.put(lockKey,Boolean.TRUE);
  +                            } else {
  +                                logger.info("Cannot acquire lock for page " 
+ siteMapContentPage.getTitles(true) + "by " + user.getUsername());
  +                                
lockInformationsMap.put(lockKey,Boolean.FALSE);
  +                            }
   //                            }
                           }
                       }
  @@ -276,6 +279,27 @@
           return null;
       }
   
  +    private LockKey getLockKey(ContentObject siteMapContentPage) {
  +        int fieldId = siteMapContentPage.getID();
  +        int pageID = 0;
  +        if (siteMapContentPage instanceof ContentPage) {
  +            pageID = siteMapContentPage.getID();
  +        } else if(siteMapContentPage instanceof ContentContainer) {
  +            pageID = ((ContentContainer) siteMapContentPage).getPageID();
  +        } else if(siteMapContentPage instanceof ContentContainerList) {
  +            pageID = ((ContentContainerList) siteMapContentPage).getPageID();
  +        } else if(siteMapContentPage instanceof ContentField) {
  +            ContentField contentField = (ContentField) siteMapContentPage;
  +                if (contentField.getType() != FieldTypes.PAGE) {
  +                    pageID = contentField.getPageID();
  +                }
  +        }
  +        final LockKey lockKey = 
LockKey.composeLockKey(LockKey.WORKFLOW_ACTION+"_"+
  +                                                       
siteMapContentPage.getObjectKey().getType(),
  +                                                       fieldId, pageID);
  +        return lockKey;
  +    }
  +
       private WorkflowHelper getWorkflowHelper(final ProcessingContext jParams,
                                                final WorkflowSiteMapViewHelper 
treeSiteMapViewHelper) throws JahiaException{
           final WorkflowHelper workflowHelper = new WorkflowHelper(jParams);
  @@ -520,7 +544,7 @@
                               // Ensure that the lock is always our's.
                               int pageID = 
Integer.parseInt(objectKey.getIDInType());
                               LockService lockRegistry = 
ServicesRegistry.getInstance().getLockService();
  -                            LockKey lockKey = 
LockKey.composeLockKey(LockKey.WORKFLOW_TYPE, pageID, pageID);
  +                            LockKey lockKey = 
getLockKey(ContentObject.getContentObjectInstance(objectKey));
                               if 
(!lockRegistry.isAlreadyAcquiredInContext(lockKey, jParams.getUser(),
                                                                            
jParams.getUser().getUserKey())) {
                                   continue;
  
  
  
  Index: ManageWorkflow.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/workflow/ManageWorkflow.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ManageWorkflow.java       12 Dec 2005 14:22:36 -0000      1.10
  +++ ManageWorkflow.java       12 Dec 2005 15:13:52 -0000      1.11
  @@ -15,6 +15,11 @@
   import org.jahia.services.workflow.WorkflowService;
   import org.jahia.services.lock.LockKey;
   import org.jahia.services.version.EntryLoadRequest;
  +import org.jahia.services.pages.ContentPage;
  +import org.jahia.services.containers.ContentContainer;
  +import org.jahia.services.containers.ContentContainerList;
  +import org.jahia.services.fields.ContentField;
  +import org.jahia.data.fields.FieldTypes;
   import org.springframework.transaction.PlatformTransactionManager;
   import org.springframework.transaction.TransactionStatus;
   import 
org.springframework.transaction.support.TransactionCallbackWithoutResult;
  @@ -175,7 +180,23 @@
           boolean acquireable = true;
           for (int i = 0; i < childs.size(); i++) {
               ContentObject contentObject = (ContentObject) childs.get(i);
  -            acquireable = 
ServicesRegistry.getInstance().getLockService().isAcquireable(LockKey.composeLockKey(LockKey.WORKFLOW_TYPE,
 contentObject.getID(), contentObject.getID()), user, user.getUserKey());
  +            int fieldId = contentObject.getID();
  +            int pageID = 0;
  +            if (contentObject instanceof ContentPage) {
  +                pageID = contentObject.getID();
  +            } else if (contentObject instanceof ContentContainer) {
  +                pageID = ((ContentContainer) contentObject).getPageID();
  +            } else if (contentObject instanceof ContentContainerList) {
  +                pageID = ((ContentContainerList) contentObject).getPageID();
  +            } else if (contentObject instanceof ContentField) {
  +                ContentField contentField = (ContentField) contentObject;
  +                if (contentField.getType() != FieldTypes.PAGE) {
  +                    pageID = contentField.getPageID();
  +                }
  +            }
  +            LockKey lockKey = 
LockKey.composeLockKey(LockKey.WORKFLOW_ACTION+"_"+
  +                                                     
contentObject.getObjectKey().getType(), fieldId, pageID);
  +            acquireable = 
ServicesRegistry.getInstance().getLockService().isAcquireable(lockKey, user, 
user.getUserKey());
               if(acquireable) {
                   ArrayList childrens = contentObject.getChilds(user, 
entryLoadRequest, "");
                   acquireable = checkLocks(childrens, user, entryLoadRequest);
  
  
  
  Index: LockKey.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/lock/LockKey.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- LockKey.java      10 Oct 2005 15:36:33 -0000      1.4
  +++ LockKey.java      12 Dec 2005 15:13:53 -0000      1.5
  @@ -12,15 +12,11 @@
   
   package org.jahia.services.lock;
   
  -import java.util.StringTokenizer;
  +import org.jahia.content.*;
   
  -import org.jahia.content.ContentContainerKey;
  -import org.jahia.content.ContentContainerListKey;
  -import org.jahia.content.ContentFieldKey;
  -import org.jahia.content.ContentPageKey;
  -import org.jahia.content.ObjectKey;
  -import java.io.Serializable;
   import java.io.IOException;
  +import java.io.Serializable;
  +import java.util.StringTokenizer;
   
   /**
    * <p>Title: Jahia locking system implementation.</p>
  @@ -30,8 +26,8 @@
    *  - A name : which is the lock name given by the engine names or something 
else.
    *  - An identifier : Given by a content object, a site, ...
    * </p>
  - * <p>Copyright: MAP (Jahia Solutions Sàrl 2003)</p>
  - * <p>Company: Jahia Solutions Sàrl</p>
  + * <p>Copyright: MAP (Jahia Solutions S�rl 2003)</p>
  + * <p>Company: Jahia Solutions S�rl</p>
    * @author unascribed
    * @version 1.0
    */
  @@ -43,7 +39,7 @@
       private static final String RESTORE_ACTION = "Restore";
       private static final String MODIFY_ACTION = "Modify";
       private static final String EXTRACT_ACTION = "Extract";
  -    private static final String WORKFLOW_ACTION = "Workflow";
  +    public static final String WORKFLOW_ACTION = "Workflow";
   
       private static final String VIRTUALSITE_LOCKNAME = "VirtualSite";
       private static final String DATABASE_LOCKNAME = "DataBase";
  
  
  
  Index: LockPrerequisites.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/lock/LockPrerequisites.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- LockPrerequisites.java    12 Dec 2005 14:22:36 -0000      1.11
  +++ LockPrerequisites.java    12 Dec 2005 15:13:53 -0000      1.12
  @@ -90,7 +90,7 @@
           // Lock for workflow engine.
           String type = lockKey.getType();
           stopWatch.start("verifyLock for type "+type);
  -        if (LockKey.WORKFLOW_TYPE.equals(type)) {
  +        if (type.startsWith(LockKey.WORKFLOW_ACTION)) {
               verifyLockForWorkflowGroup(lockKey, owner, justTesting, results);
   //            // first let's check if the page properties are being edited.
   //            verifyLockForParentPage(lockKey, owner, lockKey.getPageID(), 
justTesting, results);
  @@ -274,33 +274,31 @@
           final ServicesRegistry instance = ServicesRegistry.getInstance();
           try {
               ContentObject contentObject = 
ContentObject.getContentObjectInstance(contentPageLockKey.getObjectKey());
  -            if(contentObject != null) {
               List linked = 
instance.getWorkflowService().getLinkedContentObjects(contentObject, false);
  -                for (int pageChildIndex = 0; pageChildIndex < linked.size(); 
pageChildIndex++) {
  -                    Object linkedObject = linked.get(pageChildIndex);
  -                    if (linkedObject instanceof ContentField) {
  -                        ContentField contentField = (ContentField) 
linkedObject;
  -                        if (contentField.getType() != FieldTypes.PAGE) {
  -                            LockKey lockKey = 
LockKey.composeLockKey(LockKey.UPDATE_FIELD_TYPE, contentField.getID(), 
contentField.getPageID());
  -                            putLockIfNotSameContext(lockKey, owner, 
justTesting, results);
  -                        }
  -                    } else if (linkedObject instanceof ContentContainerList) 
{
  -                        ContentContainerList containerList = 
(ContentContainerList) linkedObject;
  -                        LockKey lockKey = 
LockKey.composeLockKey(LockKey.UPDATE_CONTAINERLIST_TYPE, 
containerList.getID(), containerList.getPageID());
  -                        putLockIfNotSameContext(lockKey, owner, justTesting, 
results);
  -                        lockKey = 
LockKey.composeLockKey(LockKey.ADD_CONTAINER_TYPE, containerList.getID(), 
containerList.getPageID());
  -                        putLockIfNotSameContext(lockKey, owner, justTesting, 
results);
  -                    } else if (linkedObject instanceof ContentPage) {
  -                        ContentPage contentPage = (ContentPage) linkedObject;
  -                        LockKey lockKey = 
LockKey.composeLockKey(LockKey.UPDATE_PAGE_TYPE, contentPage.getID(), 
contentPage.getID());
  +            for (int pageChildIndex = 0; pageChildIndex < linked.size(); 
pageChildIndex++) {
  +                Object linkedObject = linked.get(pageChildIndex);
  +                if (linkedObject instanceof ContentField) {
  +                    ContentField contentField = (ContentField) linkedObject;
  +                    if (contentField.getType() != FieldTypes.PAGE) {
  +                        LockKey lockKey = 
LockKey.composeLockKey(LockKey.UPDATE_FIELD_TYPE, contentField.getID(), 
contentField.getPageID());
                           putLockIfNotSameContext(lockKey, owner, justTesting, 
results);
  -                    } else if (linkedObject instanceof ContentContainer) {
  -                        ContentContainer contentContainer = 
(ContentContainer) linkedObject;
  -                        LockKey deleteContainerLockKey = 
LockKey.composeLockKey(LockKey.DELETE_CONTAINER_TYPE, contentContainer.getID(), 
contentContainer.getPageID());
  -                        putLockIfNotSameContext(deleteContainerLockKey, 
owner, justTesting, results);
  -                        LockKey updateContainerLockKey = 
LockKey.composeLockKey(LockKey.UPDATE_CONTAINER_TYPE, contentContainer.getID(), 
contentContainer.getPageID());
  -                        putLockIfNotSameContext(updateContainerLockKey, 
owner, justTesting, results);
                       }
  +                } else if (linkedObject instanceof ContentContainerList) {
  +                    ContentContainerList containerList = 
(ContentContainerList) linkedObject;
  +                    LockKey lockKey = 
LockKey.composeLockKey(LockKey.UPDATE_CONTAINERLIST_TYPE, 
containerList.getID(), containerList.getPageID());
  +                    putLockIfNotSameContext(lockKey, owner, justTesting, 
results);
  +                    lockKey = 
LockKey.composeLockKey(LockKey.ADD_CONTAINER_TYPE, containerList.getID(), 
containerList.getPageID());
  +                    putLockIfNotSameContext(lockKey, owner, justTesting, 
results);
  +                } else if (linkedObject instanceof ContentPage) {
  +                    ContentPage contentPage = (ContentPage) linkedObject;
  +                    LockKey lockKey = 
LockKey.composeLockKey(LockKey.UPDATE_PAGE_TYPE, contentPage.getID(), 
contentPage.getID());
  +                    putLockIfNotSameContext(lockKey, owner, justTesting, 
results);
  +                } else if (linkedObject instanceof ContentContainer) {
  +                    ContentContainer contentContainer = (ContentContainer) 
linkedObject;
  +                    LockKey deleteContainerLockKey = 
LockKey.composeLockKey(LockKey.DELETE_CONTAINER_TYPE, contentContainer.getID(), 
contentContainer.getPageID());
  +                    putLockIfNotSameContext(deleteContainerLockKey, owner, 
justTesting, results);
  +                    LockKey updateContainerLockKey = 
LockKey.composeLockKey(LockKey.UPDATE_CONTAINER_TYPE, contentContainer.getID(), 
contentContainer.getPageID());
  +                    putLockIfNotSameContext(updateContainerLockKey, owner, 
justTesting, results);
                   }
               }
           } catch (JahiaException je) {
  
  
  
  Index: LockRegistry.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/services/lock/LockRegistry.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- LockRegistry.java 12 Dec 2005 11:48:18 -0000      1.8
  +++ LockRegistry.java 12 Dec 2005 15:13:53 -0000      1.9
  @@ -352,7 +352,7 @@
                                                   JahiaUser owner) {
           ObjectKey objectKey = lockKey.getObjectKey();
           // Try to get the content object from lock key if exists...
  -        if (objectKey != null && 
!LockKey.WORKFLOW_TYPE.equals(lockKey.getType())) {
  +        if (objectKey != null && 
!lockKey.getType().startsWith(LockKey.WORKFLOW_ACTION)) {
               try {
                   ContentObject contentObject = (ContentObject) JahiaObject.
                                                 getInstance(objectKey);
  
  
  
  Index: lock_messages.inc
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/webapp/jsp/jahia/engines/lock/lock_messages.inc,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- lock_messages.inc 29 Sep 2005 15:02:05 -0000      1.2
  +++ lock_messages.inc 12 Dec 2005 15:13:53 -0000      1.3
  @@ -1,6 +1,6 @@
   <%@ page import="org.jahia.services.lock.LockKey" %>
   <%
  -    if (LockKey.WORKFLOW_TYPE.equals(blockingLockKey.getType())) {
  +    if (blockingLockKey.getType().startsWith(LockKey.WORKFLOW_ACTION)) {
   %><jahia:engineResourceBundle 
resourceName="org.jahia.engines.lock.theObject.label"/> 
<%=blockingLockKey.getName()%> [ID
   : <b><%=blockingLockKey.getId()%></b>]
   <jahia:engineResourceBundle 
resourceName="org.jahia.engines.lock.lockedByWorkflow.label"/><%
  
  
  
  Index: adv_workflow.jsp
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/webapp/jsp/jahia/engines/workflow/adv_workflow.jsp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- adv_workflow.jsp  12 Dec 2005 11:48:19 -0000      1.16
  +++ adv_workflow.jsp  12 Dec 2005 15:13:53 -0000      1.17
  @@ -459,13 +459,13 @@
       // end write page title ----------------------------------------
       // Display lock if any page object is edited -------------------
       // #ifdef LOCK%>
  -    <%                LockKey lockKey = 
LockKey.composeLockKey(LockKey.WORKFLOW_TYPE, contentObject.getID(), 
contentObject.getID());
  +    <%
  +        LockKey lockKey = 
LockKey.composeLockKey(LockKey.WORKFLOW_ACTION+"_"+contentObject.getObjectKey().getType(),
 contentObject.getID(), contentObject.getID());
   //                LockPrerequisites lockPrerequisites = 
LockPrerequisites.getInstance();
   //                LockPrerequisitesResult lockPrerequisitesResult = 
lockPrerequisites.getLockPrerequisitesResult(lockKey);
  -                boolean isLocked = lockInformation != null && 
((Boolean)lockInformation.get(lockKey)).booleanValue()==false;
  -                if (isLocked) {
  -                    %>&nbsp;&nbsp;<a 
href="<%=jData.gui().html().drawLockEngineLauncher(lockKey)%>"
  -            ><jahia:displayIcon src="locked" align="absmiddle" alt="A page 
child object is already edited"/></a><%
  +        boolean isLocked = lockInformation != null && 
((Boolean)lockInformation.get(lockKey)).booleanValue()==false;
  +        if (isLocked) {
  +     %>&nbsp;&nbsp;<a 
href="<%=jData.gui().html().drawLockEngineLauncher(lockKey)%>"><jahia:displayIcon
 src="locked" align="absmiddle" alt="A page child object is already 
edited"/></a><%
       }
       // #endif
       %>
  

Reply via email to