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) {
- %> <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) {
+ %> <a
href="<%=jData.gui().html().drawLockEngineLauncher(lockKey)%>"><jahia:displayIcon
src="locked" align="absmiddle" alt="A page child object is already
edited"/></a><%
}
// #endif
%>