code: @Override
      public void move(final Path source, final Path target, final CopyOption... options) throws IOException {
  
          // Precondition checks
          if (source == null) {
              throw new IllegalArgumentException("source must be specified");
          }
          if (target == null) {
              throw new IllegalArgumentException("target must be specified");
          }
  
          // Source exists?
          if (!Files.exists(source, new LinkOption[] {})) {
              throw new IllegalArgumentException("Source file doesn't exist: " + source.toString());
          }
  
          // If equal, NOOP
          if (source == target) {
              return;
          }
  
          final Archive<?> archive = this.getArchive(target);
          final Node node = archive.get(target.toString());
          // Copying to something already present?
          if (node != null) {
              final Asset asset = node.getAsset();
              // Directory
              if (asset == null) {
                  // Not empty
                  if (node.getChildren().size() > 0) {
                      throw new DirectoryNotEmptyException("Cannot move to non-empty directory: " + target.toString());
                  }
              }
          }
  
          // Move
          archive.move(source.toString(), target.toString());
      }
docs: {@inheritDoc}
  
  @see java.nio.file.spi.FileSystemProvider#move(java.nio.file.Path, java.nio.file.Path,
  java.nio.file.CopyOption[])