docs: private void copyFolder( ITransaction transaction,
                               String sourcePath,
                               String destinationPath,
                               Hashtable<String, Integer> errorList,
                               HttpServletRequest req,
                               HttpServletResponse resp ) throws WebdavException {
  
          store.createFolder(transaction, destinationPath);
          boolean infiniteDepth = true;
          String depth = req.getHeader("Depth");
          if (depth != null) {
              if (depth.equals("0")) {
                  infiniteDepth = false;
              }
          }
          if (infiniteDepth) {
              String[] children = store.getChildrenNames(transaction, sourcePath);
              children = children == null ? new String[] {} : children;
  
              StoredObject childSo;
              for (int i = children.length - 1; i >= 0; i--) {
                  children[i] = "/" + children[i];
                  try {
                      childSo = store.getStoredObject(transaction, (sourcePath + children[i]));
                      if (childSo == null) {
                          errorList.put(destinationPath + children[i], WebdavStatus.SC_NOT_FOUND);
                          continue;
                      }
                      if (childSo.isResource()) {
                          store.createResource(transaction, destinationPath + children[i]);
                          long resourceLength = store.setResourceContent(transaction,
                                                                         destinationPath + children[i],
                                                                         store.getResourceContent(transaction, sourcePath
                                                                                                               + children[i]),
                                                                         null,
                                                                         null);
  
                          if (resourceLength != -1) {
                              StoredObject destinationSo = store.getStoredObject(transaction, destinationPath + children[i]);
                              destinationSo.setResourceLength(resourceLength);
                          }
  
                      } else {
                          copyFolder(transaction, sourcePath + children[i], destinationPath + children[i], errorList, req, resp);
                      }
                  } catch (AccessDeniedException e) {
                      errorList.put(destinationPath + children[i], WebdavStatus.SC_FORBIDDEN);
                  } catch (ObjectNotFoundException e) {
                      errorList.put(destinationPath + children[i], WebdavStatus.SC_NOT_FOUND);
                  } catch (ObjectAlreadyExistsException e) {
                      errorList.put(destinationPath + children[i], WebdavStatus.SC_CONFLICT);
                  } catch (WebdavException e) {
                      errorList.put(destinationPath + children[i], WebdavStatus.SC_INTERNAL_SERVER_ERROR);
                  }
              }
          }
      }