protected void preDeleteNode(Node node, Context context, Lock lock) throws RepositoryException { // Due to deprecated #preDeleteNode(Node,Context) method, lock object can be null. if (lock != null) { lock.refresh(); } VersionConfig versionConfig = Components.getComponent(VersionConfig.class); if (versionConfig.isActive()) { version(node, context); } markAsDeleted(node); purgeContent(node); storeDeletionInfo(node, context); // save changes before progressing on sub node - means we can't roll back, but session doesn't grow out of limits node.getSession().save(); Rule rule = new Rule(StringUtils.split(getItemTypes() + "," + NodeTypes.MetaData.NAME + "," + NodeTypes.Resource.NAME, ", ")); rule.reverse(); for (Iterator<Node> iter = new FilteringNodeIterator(node.getNodes(), new RuleBasedNodePredicate(rule)); iter.hasNext(); ) { preDeleteNode(iter.next(), context, lock); } }
@Test public void testPreDeleteNodeDoesNotVersionIfVersioningIsNotAvailable() throws Exception { // GIVEN when(ctx.get(MarkNodeAsDeletedCommand.DELETED_NODE_PROP_NAME)).thenReturn("rootFolder"); // build a contact tree Node rootFolderNode = MgnlContext.getJCRSession("website").getRootNode().addNode("rootFolder", NodeTypes.Content.NAME); Node subFolderNode = rootFolderNode.addNode("subFolder", NodeTypes.Content.NAME); Node contactInSubFolderNode = subFolderNode.addNode("contactInSubFolder", NodeTypes.Content.NAME); Node contactInRootFolderNode = rootFolderNode.addNode("contactInRootFolder", NodeTypes.Content.NAME); VersionManager versionManager = Components.getComponent(VersionManager.class); VersionConfig versionConfig = mock(VersionConfig.class); when(versionConfig.isActive()).thenReturn(false); ComponentsTestUtil.setInstance(VersionConfig.class, versionConfig); // save the tree rootFolderNode.getSession().save(); // WHEN (call preDeleteNode WhenMarkNodeAsDelete) cmd.execute(ctx); // THEN assertNull(versionManager.getVersionedNode(rootFolderNode)); assertNull(versionManager.getVersionedNode(contactInRootFolderNode)); assertEquals(MarkNodeAsDeletedCommand.DELETED_NODE_TEMPLATE,rootFolderNode.getProperty(NodeTypes.Renderable.TEMPLATE).getString()); assertEquals(MarkNodeAsDeletedCommand.DELETED_NODE_TEMPLATE,contactInRootFolderNode.getProperty(NodeTypes.Renderable.TEMPLATE).getString()); }