REQ-3540: 打开克隆到自己

This commit is contained in:
yanglin 2025-03-27 16:42:45 +08:00
parent ebef16b5c2
commit f08f754f71

View File

@ -176,7 +176,7 @@ public class IndexManager {
IndexNode srcNode = getOrThrow(srcCode);
BizAssertions.assertTrue(indexNodeDao.validSubtreeFileCount(srcNode) <= docProps.getIndexNodeMaxCopyFileSize(),
"拷贝文件数超过限制: {}", docProps.getIndexNodeMaxCopyFileSize());
IndexNode destParentNode = determineDestParentNode(srcNode, destParentCode, "克隆");
IndexNode destParentNode = determineDestParentNode(srcNode, destParentCode, Op.COPY);
return async(() -> {
// don't inline in transaction
CopyFileVisitor copyNodeVisitor = new CopyFileVisitor(copySubtreeOssFiles(srcNode));
@ -193,7 +193,7 @@ public class IndexManager {
*/
public Future<IndexNode> asyncMove(String srcCode, @Nullable String destParentCode) {
IndexNode srcNode = getOrThrow(srcCode);
IndexNode destParentNode = determineDestParentNode(srcNode, destParentCode, "移动");
IndexNode destParentNode = determineDestParentNode(srcNode, destParentCode, Op.MOVE);
return async(() -> transaction.execute(unused -> {
docLogDao.log("indexNode:asyncMove", srcCode, "srcCode", srcCode, "destParentCode", destParentCode);
if (docProps.isLockSubtreeWhenMove())
@ -204,12 +204,13 @@ public class IndexManager {
}));
}
private IndexNode determineDestParentNode(IndexNode srcNode, String destParentCode, String op) {
private IndexNode determineDestParentNode(IndexNode srcNode, String destParentCode, Op op) {
IndexNode parent = StringUtils.isBlank(destParentCode) ? null : getOrThrow(destParentCode);
if (parent == null)
return null;
BizAssertions.assertFalse(srcNode.isDirectory() && parent.isFile(), "不能{}文件夹到文件下", op);
BizAssertions.assertFalse(srcNode.isSameNodeWith(parent), "不能{}到同一节点下", op);
if (op == Op.MOVE)
BizAssertions.assertFalse(srcNode.isSameNodeWith(parent), "不能{}到同一节点下", op);
BizAssertions.assertFalse(srcNode.isParentOf(parent), "不能{}到子节点下", op);
List<IndexNode> subtreeNodes = indexSupport.collectValidSubtreeAsValueRoot(srcNode);
int subtreeMaxDepth = IndexNodeTreeUtils.build(subtreeNodes).getChildren().stream() //
@ -276,4 +277,14 @@ public class IndexManager {
});
}
@RequiredArgsConstructor
private enum Op {
MOVE("移动"), COPY("克隆");
private final String name;
@Override
public String toString() {
return name;
}
}
}