/**
   * Select files by fileSearch or name or nameList, exclusively.
   *
   * @param fileSearch
   * @param name
   * @param nameList
   * @return SelectFilesResponse
   */
  public com.actuate.schemas.SelectFilesResponse selectFiles(
      com.actuate.schemas.FileSearch fileSearch, String name, ArrayOfString nameList) {
    if (null == authenticationId) login();

    com.actuate.schemas.ArrayOfString resultDef =
        newArrayOfString(
            new String[] {
              "Description",
              "FileType",
              "Id",
              "Name",
              "Owner",
              "PageCount",
              "Size",
              "TimeStamp",
              "UserPermissions",
              "Version",
              "VersionName"
            });

    com.actuate.schemas.SelectFiles selectFiles = new com.actuate.schemas.SelectFiles();
    selectFiles.setResultDef(resultDef);

    if (fileSearch != null) selectFiles.setSearch(fileSearch);
    else if (name != null) selectFiles.setName(name);
    else if (nameList != null) selectFiles.setNameList(nameList);

    com.actuate.schemas.SelectFilesResponse selectFilesResponse = null;
    try {
      selectFilesResponse = proxy.selectFiles(selectFiles);

      com.actuate.schemas.ArrayOfFile itemList = selectFilesResponse.getItemList();
      com.actuate.schemas.File[] files = itemList.getFile();
      if (files != null) {
        for (int i = 0; i < files.length; i++) {
          printFile(System.out, files[i]);
        }
      }
    } catch (RemoteException e) {
      System.out.println("error !!!");
      e.printStackTrace();
    }
    return selectFilesResponse;
  }