code: protected void performSingleMoveOperation(String source, String target, String sitePrefix) throws CmsException {
  
          // calculate the target name
          String finalTarget = getCms().getRequestContext().getFileTranslator().translateResource(target);
          finalTarget = CmsLinkManager.getAbsoluteUri(finalTarget, CmsResource.getParentFolder(source));
  
          if (finalTarget.equals(source) || (isMultiOperation() && finalTarget.startsWith(source))) {
              throw new CmsVfsException(Messages.get().container(Messages.ERR_MOVE_ONTO_ITSELF_1, finalTarget));
          }
  
          try {
              CmsResource res = getCms().readResource(finalTarget, CmsResourceFilter.ALL);
              if (res.isFolder()) {
                  // target folder already exists, so we add the current folder name
                  if (!finalTarget.endsWith("/")) {
                      finalTarget += "/";
                  }
                  finalTarget = finalTarget + CmsResource.getName(source);
                  if (finalTarget.endsWith("/")) {
                      finalTarget = finalTarget.substring(0, finalTarget.length() - 1);
                  }
              }
          } catch (CmsVfsResourceNotFoundException e) {
              // target folder does not already exist, so target name is o.k.
              if (LOG.isInfoEnabled()) {
                  LOG.info(e.getLocalizedMessage());
              }
          }
  
          // set the target parameter value
          setParamTarget(finalTarget);
  
          // could not overwrite a resource in a move operation
          if (getCms().existsResource(finalTarget, CmsResourceFilter.ALL)) {
              // throw exception to indicate that the target exists
              throw new CmsVfsResourceAlreadyExistsException(
                  Messages.get().container(
                      Messages.ERR_MOVE_FAILED_TARGET_EXISTS_2,
                      source,
                      getJsp().getRequestContext().removeSiteRoot(finalTarget)));
          }
  
          // lock resource if autolock is enabled
          checkLock(sitePrefix + source);
          // move the resource
          getCms().moveResource(sitePrefix + source, finalTarget);
      }
docs: Performs the move operation for a single VFS resource.<p>
  
  @param source the source VFS path
  @param target the target VFS path
  @param sitePrefix the site prefix
  
  @throws CmsException if moving the resource fails