code: private void copy( final ITransaction transaction, final String sourcePath, final String destinationPath,
                         final Hashtable<String, WebdavStatus> errorList, final WebdavRequest req, final WebdavResponse resp )
          throws WebdavException, IOException
      {
  
          final StoredObject sourceSo = _store.getStoredObject( transaction, sourcePath );
          if ( sourceSo.isResource() )
          {
              _store.createResource( transaction, destinationPath );
              final long resourceLength =
                  _store.setResourceContent( transaction, destinationPath, _store.getResourceContent( transaction, sourcePath ), sourceSo.getResourceLength());
  
              if ( resourceLength != -1 )
              {
                  final StoredObject destinationSo = _store.getStoredObject( transaction, destinationPath );
                  destinationSo.setResourceLength( resourceLength );
              }
  
          }
          else
          {
  
              if ( sourceSo.isFolder() )
              {
                  copyFolder( transaction, sourcePath, destinationPath, errorList, req, resp );
              }
              else
              {
                  resp.sendError( WebdavStatus.SC_NOT_FOUND );
              }
          }
      }
docs: copies the specified resource(s) to the specified destination.
  preconditions must be handled by the caller. Standard status codes must
  be handled by the caller. a multi status report in case of errors is
  created here.
  
  @param transaction
  indicates that the method is within the scope of a WebDAV
  transaction
  @param sourcePath
  path from where to read
  @param destinationPath
  path where to write
  @param req
  HttpServletRequest
  @param resp
  HttpServletResponse
  @throws WebdavException
  if an error in the underlying store occurs
  @throws IOException