diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index 323ce9b7c9..79aa40b487 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -111,7 +111,7 @@ - + - + @@ -58,7 +58,7 @@ - + diff --git a/config/alfresco/messages/invitation-service.properties b/config/alfresco/messages/invitation-service.properties index 4aa88900f0..5c16d9dc91 100644 --- a/config/alfresco/messages/invitation-service.properties +++ b/config/alfresco/messages/invitation-service.properties @@ -8,4 +8,5 @@ invitation.error.invalid_inviteId_format "Invitation Id not valid format, valid invitation.invite.already_member "The user , {0} is already a member of {1} and cannot be invited again" invitation.cancel.not_site_manager "Current user, {0}, cannot cancel invitation: {1} because they are not a Site Manager for site: {2} invitation.invite.not_site_manager "Current user, {0}, is not a Site Manager for site: {1} -invitation.invite.unable_generate_id "Unable to generate a user name for invitee, which doesn't already belong to someone else firstName:{0} lastName:{1} email:{2}" \ No newline at end of file +invitation.invite.unable_generate_id "Unable to generate a user name for invitee, which doesn't already belong to someone else firstName:{0} lastName:{1} email:{2}" +invitation.invite.already_finished "Invitation, {0} has already been accepted, cancelled or rejected" \ No newline at end of file diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties index 4e2f41a4bd..d1c130fb4a 100644 --- a/config/alfresco/repository.properties +++ b/config/alfresco/repository.properties @@ -338,6 +338,10 @@ repo.rmi.service.port=50505 action.rmi.service.port=50506 deployment.rmi.service.port=50507 +# Should the Mbean server bind to an existing server. Set to true for most application servers. +# false for WebSphere clusters. +mbean.server.locateExistingServerIfPossible=true + # External executable locations ooo.exe=soffice ooo.user=${dir.root}/oouser diff --git a/config/alfresco/workflow/wcm-workflow-messages.properties b/config/alfresco/workflow/wcm-workflow-messages.properties index b41bbdcea6..c8d9a9a292 100644 --- a/config/alfresco/workflow/wcm-workflow-messages.properties +++ b/config/alfresco/workflow/wcm-workflow-messages.properties @@ -6,8 +6,8 @@ wcmwf_submit.workflow.title=Web Site Submission wcmwf_submit.workflow.description=Submit changes for approval -wcmwf_submit.node.verifybrokenlinks.transition.abort.title=Abort Submisson -wcmwf_submit.node.verifybrokenlinks.transition.abort.description=Abort Submisson +wcmwf_submit.node.verifybrokenlinks.transition.abort.title=Abort Submission +wcmwf_submit.node.verifybrokenlinks.transition.abort.description=Abort Submission wcmwf_submit.node.verifybrokenlinks.transition.continue.title=Continue Submission wcmwf_submit.node.verifybrokenlinks.transition.continue.description=Continue Submisson wcmwf_submit.node.serialreview.transition.reject.title=Reject diff --git a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java index 02e8e1cf18..c1ef5b128e 100644 --- a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java +++ b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java @@ -332,12 +332,37 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli * Nominated invitation complete the wf:invitePendingTask along the * 'accept' transition because the invitation has been accepted */ - InviteHelper - .completeInviteTask( - invitationId, - WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING, - WorkflowModelNominatedInvitation.WF_TRANSITION_ACCEPT, - this.workflowService); + + // create workflow task query + WorkflowTaskQuery wfTaskQuery = new WorkflowTaskQuery(); + + // set the given invite ID as the workflow process ID in the workflow query + wfTaskQuery.setProcessId(invitationId); + + // find incomplete invite workflow tasks with given task name + wfTaskQuery.setActive(Boolean.TRUE); + wfTaskQuery.setTaskState(WorkflowTaskState.IN_PROGRESS); + wfTaskQuery.setTaskName(WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING); + + // set process name to "wf:invite" so that only + // invite workflow instances are considered by this query + wfTaskQuery.setProcessName(WorkflowModelNominatedInvitation.WF_PROCESS_INVITE); + + // query for invite workflow tasks with the constructed query + List wf_invite_tasks = workflowService + .queryTasks(wfTaskQuery); + + if(wf_invite_tasks.size() == 0) + { + Object objs[] = { invitationId }; + throw new InvitationExceptionUserError("invitation.invite.already_finished", objs); + } + + // end all tasks found with this name + for (WorkflowTask workflowTask : wf_invite_tasks) + { + workflowService.endTask(workflowTask.id, WorkflowModelNominatedInvitation.WF_TRANSITION_ACCEPT); + } return invitation; } @@ -406,12 +431,36 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli * Nominated invitation complete the wf:invitePendingTask along the * 'reject' transition because the invitation has been rejected */ - InviteHelper - .completeInviteTask( - invitationId, - WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING, - WorkflowModelNominatedInvitation.WF_TRANSITION_REJECT, - this.workflowService); + // create workflow task query + WorkflowTaskQuery wfTaskQuery = new WorkflowTaskQuery(); + + // set the given invite ID as the workflow process ID in the workflow query + wfTaskQuery.setProcessId(invitationId); + + // find incomplete invite workflow tasks with given task name + wfTaskQuery.setActive(Boolean.TRUE); + wfTaskQuery.setTaskState(WorkflowTaskState.IN_PROGRESS); + wfTaskQuery.setTaskName(WorkflowModelNominatedInvitation.WF_INVITE_TASK_INVITE_PENDING); + + // set process name to "wf:invite" so that only + // invite workflow instances are considered by this query + wfTaskQuery.setProcessName(WorkflowModelNominatedInvitation.WF_PROCESS_INVITE); + + // query for invite workflow tasks with the constructed query + List wf_invite_tasks = workflowService + .queryTasks(wfTaskQuery); + + if(wf_invite_tasks.size() == 0) + { + Object objs[] = { invitationId }; + throw new InvitationExceptionUserError("invitation.invite.already_finished", objs); + } + + // end all tasks found with this name + for (WorkflowTask workflowTask : wf_invite_tasks) + { + workflowService.endTask(workflowTask.id, WorkflowModelNominatedInvitation.WF_TRANSITION_REJECT); + } return invitation; } diff --git a/source/java/org/alfresco/repo/invitation/site/InviteHelper.java b/source/java/org/alfresco/repo/invitation/site/InviteHelper.java index 227a78ab8c..06a3f82490 100644 --- a/source/java/org/alfresco/repo/invitation/site/InviteHelper.java +++ b/source/java/org/alfresco/repo/invitation/site/InviteHelper.java @@ -260,6 +260,7 @@ public class InviteHelper List wf_invite_tasks = workflowService .queryTasks(wfTaskQuery); + // end all tasks found with this name for (WorkflowTask workflowTask : wf_invite_tasks) { diff --git a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java index 4eec436bde..d6d723b890 100644 --- a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java @@ -2313,6 +2313,12 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl { Long childNodeId = oldChildNodePair.getFirst(); NodeRef childNodeRef = oldChildNodePair.getSecond(); + if (nodeDaoService.getNodeRefStatus(childNodeRef).isDeleted()) + { + //Node has been already deleted. + continue; + } + QName childNodeTypeQName = nodeDaoService.getNodeType(childNodeId); Set childNodeAspectQNames = nodeDaoService.getNodeAspects(childNodeId); Pair oldParentAssocPair = nodeDaoService.getPrimaryParentAssoc(childNodeId);