Beispiel #1
0
  /** 移动. */
  public String move(String userId, Long id, Long parentId) {
    DiskInfo diskInfo = diskInfoManager.get(id);
    String parentPath = diskInfo.getParentPath();

    if (id == parentId) {
      logger.info("{} is equals {}", id, parentId);

      return diskInfo.getParentPath();
    }

    if (parentId != 0) {
      DiskInfo parent = diskInfoManager.get(parentId);

      if (!"dir".equals(parent.getType())) {
        logger.info(
            "{}({}) is not directory", parent.getParentPath() + "/" + parent.getName(), parentId);

        return diskInfo.getParentPath();
      }

      String currentPath = diskInfo.getParentPath() + "/" + diskInfo.getName() + "/";
      String checkedParentPath = parent.getParentPath() + "/";

      if ("dir".equals(diskInfo.getType()) && checkedParentPath.startsWith(currentPath)) {
        logger.info(
            "{}({}) is sub directory of {}({})",
            parent.getParentPath() + "/" + parent.getName(),
            parentId,
            diskInfo.getParentPath() + "/" + diskInfo.getName(),
            id);

        return diskInfo.getParentPath();
      }

      diskInfo.setParentPath(parent.getParentPath() + "/" + parent.getName());
    } else {
      diskInfo.setParentPath("");
    }

    String name = diskInfo.getName();
    String hql = "select name from DiskInfo where creator=? and parentPath=? and id!=?";
    List<String> currentNames = diskInfoManager.find(hql, userId, parentPath, id);
    String targetName = FileUtils.calculateName(name, currentNames);
    diskInfo.setName(targetName);

    diskInfoManager.save(diskInfo);

    return parentPath;
  }