docs: @Override
      protected boolean performDialogOperation() throws CmsException {
  
          // check if the current resource is a folder for single operation
          boolean isFolder = isOperationOnFolder();
  
          // on folder copy display "please wait" screen, not for simple file copy
          if ((isMultiOperation() || isFolder) && !DIALOG_WAIT.equals(getParamAction())) {
              // return false, this will trigger the "please wait" screen
              return false;
          }
  
          // get the copy mode from request parameter value
          CmsResourceCopyMode copyMode = CmsResource.COPY_PRESERVE_SIBLING;
          try {
              copyMode = CmsResourceCopyMode.valueOf(Integer.parseInt(getParamCopymode()));
          } catch (Exception e) {
              // can usually be ignored
              if (LOG.isInfoEnabled()) {
                  LOG.info(e.getLocalizedMessage());
              }
          }
  
          // check the overwrite options
          boolean overwrite = Boolean.valueOf(getParamOverwrite()).booleanValue();
          overwrite = ((isMultiOperation() && overwrite) || DIALOG_CONFIRMED.equals(getParamAction()));
  
          // calculate the target name
          String target = getParamTarget();
          if (target == null) {
              target = "";
          }
  
          String storedSiteRoot = null;
          try {
              // check if a site root was added to the target name
              String sitePrefix = "";
              if (OpenCms.getSiteManager().getSiteRoot(target) != null) {
                  String siteRootFolder = getCms().getRequestContext().getSiteRoot();
                  if (siteRootFolder.endsWith("/")) {
                      siteRootFolder = siteRootFolder.substring(0, siteRootFolder.length() - 1);
                  }
                  sitePrefix = siteRootFolder;
                  storedSiteRoot = getCms().getRequestContext().getSiteRoot();
                  getCms().getRequestContext().setSiteRoot("/");
              }
  
              Iterator<String> i = getResourceList().iterator();
              // iterate the resources to copy
              while (i.hasNext()) {
                  String resName = i.next();
                  try {
                      performSingleCopyOperation(resName, target, sitePrefix, copyMode, overwrite);
                  } catch (CmsException e) {
                      if (isMultiOperation()) {
                          // collect exceptions to create a detailed output
                          addMultiOperationException(e);
                      } else {
                          // for single operation, throw the exception immediately
                          throw e;
                      }
                  }
              }
              // check if exceptions occurred
              checkMultiOperationException(Messages.get(), Messages.ERR_COPY_MULTI_0);
          } finally {
              // restore the site root
              if (storedSiteRoot != null) {
                  getCms().getRequestContext().setSiteRoot(storedSiteRoot);
              }
          }
          return true;
      }