Compare commits

...

5 Commits

Author SHA1 Message Date
kshah
4c406c1301 Merge branch 'master' into APPS-2000_Data_dictionary_Issue 2023-07-24 19:21:26 +05:30
pksingh
32bdf67969 Fixing failure issues 2023-07-24 17:53:19 +05:30
pksingh
b5076c6fdd Fixing failure issues 2023-07-19 21:55:11 +05:30
pksingh
78359d396f Fixing failure issue 2023-07-19 16:56:59 +05:30
pksingh
bcba412d73 [APPS-2000] Data Dictionary folder deletion behaviour should be consistent 2023-07-19 14:25:45 +05:30

View File

@@ -101,7 +101,9 @@ import org.alfresco.util.PropertyMap;
import org.alfresco.util.transaction.TransactionListenerAdapter; import org.alfresco.util.transaction.TransactionListenerAdapter;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.dao.ConcurrencyFailureException;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
import org.springframework.transaction.annotation.Transactional;
/** /**
* Node service using database persistence layer to fulfill functionality * Node service using database persistence layer to fulfill functionality
@@ -1068,11 +1070,13 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
* @param allowArchival <tt>true</tt> if normal archival may occur or * @param allowArchival <tt>true</tt> if normal archival may occur or
* <tt>false</tt> if the node must be forcibly deleted * <tt>false</tt> if the node must be forcibly deleted
*/ */
@Transactional
private void deleteNode(NodeRef nodeRef, boolean allowArchival) private void deleteNode(NodeRef nodeRef, boolean allowArchival)
{ {
// The node(s) involved may not be pending deletion // The node(s) involved may not be pending deletion
checkPendingDelete(nodeRef); checkPendingDelete(nodeRef);
// Pair contains NodeId, NodeRef // Pair contains NodeId, NodeRef
Pair<Long, NodeRef> nodePair = getNodePairNotNull(nodeRef); Pair<Long, NodeRef> nodePair = getNodePairNotNull(nodeRef);
Long nodeId = nodePair.getFirst(); Long nodeId = nodePair.getFirst();
@@ -1100,7 +1104,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
// Gather information about the hierarchy // Gather information about the hierarchy
NodeHierarchyWalker walker = new NodeHierarchyWalker(nodeDAO); NodeHierarchyWalker walker = new NodeHierarchyWalker(nodeDAO);
walker.walkHierarchy(nodePair, childAssocPair); walker.walkHierarchy(nodePair, childAssocPair);
// Protect the nodes from being link/unlinked for the remainder of the process // Protect the nodes from being link/unlinked for the remainder of the process
Set<NodeRef> nodesPendingDelete = new HashSet<NodeRef>(walker.getNodes(false).size()); Set<NodeRef> nodesPendingDelete = new HashSet<NodeRef>(walker.getNodes(false).size());
for (VisitedNode visitedNode : walker.getNodes(true)) for (VisitedNode visitedNode : walker.getNodes(true))
@@ -1109,7 +1113,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
} }
Set<NodeRef> nodesPendingDeleteTxn = TransactionalResourceHelper.getSet(KEY_PENDING_DELETE_NODES); Set<NodeRef> nodesPendingDeleteTxn = TransactionalResourceHelper.getSet(KEY_PENDING_DELETE_NODES);
nodesPendingDeleteTxn.addAll(nodesPendingDelete); // We need to remove these later, again nodesPendingDeleteTxn.addAll(nodesPendingDelete); // We need to remove these later, again
// Work out whether we need to archive or delete the node. // Work out whether we need to archive or delete the node.
if (!allowArchival) if (!allowArchival)
{ {
@@ -1150,7 +1154,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
} }
} }
} }
// Propagate timestamps // Propagate timestamps
propagateTimeStamps(childAssocRef); propagateTimeStamps(childAssocRef);
@@ -1199,7 +1203,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
} }
invokeBeforeDeleteChildAssociation(secondaryParentAssocPair.getSecond()); invokeBeforeDeleteChildAssociation(secondaryParentAssocPair.getSecond());
} }
// Primary child associations // Primary child associations
if (archive) if (archive)
{ {
@@ -1207,7 +1211,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
} }
invokeBeforeDeleteNode(nodeToDelete.nodeRef); invokeBeforeDeleteNode(nodeToDelete.nodeRef);
} }
// Archive, if necessary // Archive, if necessary
if (archive) if (archive)
{ {
@@ -1263,8 +1267,18 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens
QName childNodeTypeQName = nodeDAO.getNodeType(nodeToDelete.id); QName childNodeTypeQName = nodeDAO.getNodeType(nodeToDelete.id);
Set<QName> childAspectQnames = nodeDAO.getNodeAspects(nodeToDelete.id); Set<QName> childAspectQnames = nodeDAO.getNodeAspects(nodeToDelete.id);
// Delete the node // Delete the node
nodeDAO.deleteChildAssoc(nodeToDelete.primaryParentAssocPair.getFirst()); nodeDAO.deleteChildAssoc(nodeToDelete.primaryParentAssocPair.getFirst());
nodeDAO.deleteNode(nodeToDelete.id); for (VisitedNode assocRefRemoved : nodesToDelete)
{
if (!nodeDAO.exists(assocRefRemoved.id))
{
throw new ConcurrencyFailureException("Child association not found : " + assocRefRemoved.id);
}
nodeDAO.deleteChildAssoc(assocRefRemoved.id);
invokeOnDeleteNode(assocRefRemoved.primaryParentAssocPair.getSecond(),
childNodeTypeQName, childAspectQnames, archive);
}
invokeOnDeleteNode( invokeOnDeleteNode(
nodeToDelete.primaryParentAssocPair.getSecond(), nodeToDelete.primaryParentAssocPair.getSecond(),
childNodeTypeQName, childAspectQnames, archive); childNodeTypeQName, childAspectQnames, archive);