Uploaded image for project: 'Commons VFS'
  1. Commons VFS
  2. VFS-354

RamFileProvider: moving dir with children fails to move children...

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.0
    • None
    • None
    • N/A

    Description

      Below is a simple program which creates a vfs using a RamFileProvider. Note i have not verified if this works on other providers which are backed by a real filesystem. Im guessing moving on those will work because it would be a disaster for the hose os and it makes no sense that vfs does the moving of individual files.

      Note refreshing the FileObject by fetching them again with resolveFile makes no difference, the "moved" directory remains empty but the file/dir are avaiable by using their absolute paths.

      /**

      • @param args
        */
        public static void main(String[] args) throws Exception {

      DefaultFileSystemManager manager = new DefaultFileSystemManager();
      manager.addProvider("ram", new RamFileProvider());
      manager.init();

      final FileObject from = manager.resolveFile("ram://from");
      from.createFolder();

      final FileObject move = manager.resolveFile("ram://from/move");
      move.createFolder();

      final FileObject fromMoveFile = manager.resolveFile("ram://from/move/file");
      fromMoveFile.createFile();

      final FileObject fromMoveSub = manager.resolveFile("ram://from/move/sub");
      fromMoveSub.createFolder();

      final FileObject to = manager.resolveFile("ram://to");
      to.createFolder();

      final FileObject moveAfter = manager.resolveFile("ram://to/move");
      System.out.println("target of move " + moveAfter + " exists + " + moveAfter.exists());

      move.moveTo(moveAfter);
      System.out.println("move from " + move);
      System.out.println("\texists " + move.exists());
      try

      { System.out.println("\tchildren " + Arrays.toString(move.getChildren())); }

      catch (final Exception expected)

      { // ignore expected because folder was moved... }

      System.out.println("move to " + moveAfter);
      System.out.println("\texists " + moveAfter.exists());
      System.out.println("\tchildren " + Arrays.toString(moveAfter.getChildren()));

      // these tests should print false because they were moved but it prints true...
      System.out.println("original file " + fromMoveFile + " exists " + fromMoveFile.exists());
      System.out.println("original sub dir " + fromMoveSub + " exists " + fromMoveSub.exists());

      // repeating tests with "refreshed" FileObjects problem remains.
      final FileObject fromMoveFileX = manager.resolveFile("ram://from/move/file");
      System.out.println("refreshed " + fromMoveFileX + " " + fromMoveFile.exists());

      final FileObject fromMoveSubX = manager.resolveFile("ram://from/move/sub");
      System.out.println("refreshed " + fromMoveSubX + " " + fromMoveSubX.exists());

      // file and dir should have moved but havent.
      final FileObject toMoveFile = manager.resolveFile("ram://to/move/file");
      System.out.println("target " + toMoveFile + " " + toMoveFile.exists());

      final FileObject toMoveSub = manager.resolveFile("ram://to/move/sub");
      System.out.println("target " + toMoveSub + " " + toMoveSub.exists());
      }

      prints...

      target of move ram:///to/move exists + false
      move from ram:///from/move
      exists false
      move to ram:///to/move
      exists true
      children []
      original file ram:///from/move/file exists true
      original sub dir ram:///from/move/sub exists true
      refreshed ram:///from/move/file true
      refreshed ram:///from/move/sub true
      target ram:///to/move/file false
      target ram:///to/move/sub false

      Attachments

        Activity

          People

            Unassigned Unassigned
            mp1 Miroslav Pokorny
            Votes:
            2 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: