    //@include lib_Class.js

    importPackage(Packages.de.elo.ix.client);

    /**
     * Tool to download complete branches to disk.
     *
     * @author MW, ELO Digital Office GmbH
     * @version 1.0
     *
     * @elojc
     */
    sol.define("sol.dev.jc.DownloadBranches", {
      singleton: true,

      execute: function () {
        var me = this,
            baseDstDirPath, downloadElements, downloadElement, view;
        view = workspace.activeView;
        if (!(view instanceof ArchiveViewAdapter)) {
          return;
        }
        baseDstDirPath = workspace.directories.tempDir + File.separator + "RepoTree_" + java.lang.System.nanoTime();
        workspace.setWaitCursor();
        downloadElements = view.allSelected;
        while (downloadElements.hasMoreElements()) {
          downloadElement = downloadElements.nextElement();
          try {
            me.downloadDocuments(downloadElement.id, baseDstDirPath);
          } catch (ex) {
            // ignore
          }
        }
        workspace.setNormalCursor();
        sol.common.ExecUtils.open(baseDstDirPath);
      },

      /**
       * @private
       * Download documents
       * @param {String} objId Start object ID
       * @param {String} baseDstDirPath Base destination directory path
       */
      downloadDocuments: function (objId, baseDstDirPath) {
        var sords, i, j, sord, pathParts, dstDirPath, filePath;

        sords = sol.common.RepoUtils.findChildren(objId, { recursive: true, level: 10, includeDocuments: true, includeFolders: false, includeReferences: true });

        for (i = 0; i < sords.length; i++) {
          sord = sords[i];
          pathParts = [baseDstDirPath];
          for (j = 0; j < sord.refPaths[0].path.length; j++) {
            pathParts.push(sol.common.FileUtils.sanitizeFilename(sord.refPaths[0].path[j].name));
          }
          dstDirPath = pathParts.join(File.separator);
          filePath = sol.common.RepoUtils.downloadToFile(sord.id, { dstDirPath: dstDirPath, createDirs: true, createUniqueFileName: true });
          workspace.setStatusMessage("Download " + filePath);
        }
      },

      /**
       * @private
       * @param {String} key
       * @return {String}
       */
      getText: function (key) {
        return utils.getText("sol.dev.client", key);
      }
    });