public File[] listFiles(File file) {
    String owner = this.buildNewOwnerId("listFiles");
    AbstractProxy proxy = (AbstractProxy) this.getAvailableProxy(owner);
    FictiveFile[] files = null;
    File[] returned = null;
    try {
      files = proxy.listFiles(this.translateToRemote(file));
      returned = new File[files.length];
      for (int i = 0; i < files.length; i++) {
        returned[i] =
            new FictiveFile(
                translateToLocal(files[i].getRemotePath()),
                files[i].getRemotePath(),
                files[i].length(),
                files[i].isDirectory(),
                files[i].exists(),
                files[i].lastModified());
      }
    } catch (RemoteConnectionException e) {
      Logger.defaultLogger().error(e);
      throw new UnexpectedConnectionException(e);
    } finally {
      this.releaseProxy(proxy, owner);
    }

    return returned;
  }