mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Fix for failing testcase DiscussionServiceTest.testDeleteTopLevelPost
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28695 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -38,12 +38,10 @@ public interface CommentService
|
|||||||
* {@link ForumModel#ASPECT_DISCUSSABLE fm:discussable} aspect.
|
* {@link ForumModel#ASPECT_DISCUSSABLE fm:discussable} aspect.
|
||||||
*
|
*
|
||||||
* @param descendantNodeRef The nodeRef which descends from the f:discussable node.
|
* @param descendantNodeRef The nodeRef which descends from the f:discussable node.
|
||||||
* @param expectedNodeType if not <tt>null</tt>, this is an assertion by calling code that the descendantNodeRef
|
|
||||||
* is of the specified type.
|
|
||||||
* @return the fm:discussable ancestor if there is one, else <tt>null</tt>
|
* @return the fm:discussable ancestor if there is one, else <tt>null</tt>
|
||||||
* @throws AlfrescoRuntimeException if the specified expectedNodeType is not correct.
|
* @throws AlfrescoRuntimeException if the specified expectedNodeType is not correct.
|
||||||
*/
|
*/
|
||||||
NodeRef getDiscussableAncestor(NodeRef descendantNodeRef, QName expectedNodeType);
|
NodeRef getDiscussableAncestor(NodeRef descendantNodeRef);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method retrieves the {@link ForumModel#TYPE_TOPIC fm:topic} NodeRef which holds the Share comments for
|
* This method retrieves the {@link ForumModel#TYPE_TOPIC fm:topic} NodeRef which holds the Share comments for
|
||||||
|
@@ -49,27 +49,38 @@ public class CommentServiceImpl implements CommentService
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NodeRef getDiscussableAncestor(NodeRef descendantNodeRef, QName expectedNodeType)
|
public NodeRef getDiscussableAncestor(NodeRef descendantNodeRef)
|
||||||
{
|
{
|
||||||
final QName actualNodeType = nodeService.getType(descendantNodeRef);
|
// For "Share comments" i.e. fm:post nodes created via the Share commenting UI, the containment structure is as follows:
|
||||||
if (expectedNodeType != null && !actualNodeType.equals(expectedNodeType))
|
// fm:discussable
|
||||||
{
|
// - fm:forum
|
||||||
StringBuilder msg = new StringBuilder();
|
// - fm:topic
|
||||||
msg.append("Node ").append(descendantNodeRef)
|
// - fm:post
|
||||||
.append(" is of type ").append(actualNodeType)
|
// For other fm:post nodes the ancestor structure may be slightly different. (cf. Share discussions, which don't have 'forum')
|
||||||
.append(", not ").append(expectedNodeType);
|
//
|
||||||
throw new AlfrescoRuntimeException(msg.toString());
|
// In order to ensure that we only return the discussable ancestor relevant to Share comments, we'll climb the
|
||||||
}
|
// containment tree in a controlled manner.
|
||||||
|
// We could navigate up looking for the first fm:discussable ancestor, but that might not find the correct node - it could,
|
||||||
|
// for example, find a parent folder which was discussable.
|
||||||
|
|
||||||
NodeRef result = null;
|
NodeRef result = null;
|
||||||
for (ChildAssociationRef parentAssoc = nodeService.getPrimaryParent(descendantNodeRef);
|
if (nodeService.getType(descendantNodeRef).equals(ForumModel.TYPE_POST))
|
||||||
parentAssoc != null && parentAssoc.getParentRef() != null;
|
|
||||||
parentAssoc = nodeService.getPrimaryParent(parentAssoc.getParentRef()))
|
|
||||||
{
|
{
|
||||||
if (nodeService.hasAspect(parentAssoc.getParentRef(), ForumModel.ASPECT_DISCUSSABLE))
|
NodeRef topicNode = nodeService.getPrimaryParent(descendantNodeRef).getParentRef();
|
||||||
|
|
||||||
|
if (nodeService.getType(topicNode).equals(ForumModel.TYPE_TOPIC))
|
||||||
{
|
{
|
||||||
result = parentAssoc.getParentRef();
|
NodeRef forumNode = nodeService.getPrimaryParent(topicNode).getParentRef();
|
||||||
break;
|
|
||||||
|
if (nodeService.getType(forumNode).equals(ForumModel.TYPE_FORUM))
|
||||||
|
{
|
||||||
|
NodeRef discussableNode = nodeService.getPrimaryParent(forumNode).getParentRef();
|
||||||
|
|
||||||
|
if (nodeService.hasAspect(discussableNode, ForumModel.ASPECT_DISCUSSABLE))
|
||||||
|
{
|
||||||
|
result = discussableNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -196,7 +196,7 @@ public class ForumPostBehaviours implements NodeServicePolicies.OnCreateNodePoli
|
|||||||
{
|
{
|
||||||
// We have a new or a deleted comment under a discussable node.
|
// We have a new or a deleted comment under a discussable node.
|
||||||
// We need to find the fm:commentsCount ancestor to this comment node and adjust its commentCount
|
// We need to find the fm:commentsCount ancestor to this comment node and adjust its commentCount
|
||||||
NodeRef discussableAncestor = commentService.getDiscussableAncestor(fmPostNode, ForumModel.TYPE_POST);
|
NodeRef discussableAncestor = commentService.getDiscussableAncestor(fmPostNode);
|
||||||
|
|
||||||
if (discussableAncestor != null)
|
if (discussableAncestor != null)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user