@Override
    protected boolean performDialogOperation() throws CmsException {

        // check if the current resource is a folder for single operation
        boolean isFolder = isOperationOnFolder();
        // on folder undo changes or multi operation display "please wait" screen, not for simple file undo changes
        if ((isMultiOperation() || isFolder) && !DIALOG_WAIT.equals(getParamAction())) {
            // return false, this will trigger the "please wait" screen
            return false;
        }

        // get the flag if the undo changes is recursive from request parameter
        boolean undoRecursive = Boolean.valueOf(getParamRecursive()).booleanValue();
        boolean undoMove = Boolean.valueOf(getParamMove()).booleanValue();

        CmsResourceUndoMode mode = CmsResource.UNDO_CONTENT;
        if (undoRecursive) {
            mode = CmsResource.UNDO_CONTENT_RECURSIVE;
        }
        if (undoMove) {
            mode = mode.includeMove();
        }

        Iterator<String> i = getResourceList().iterator();
        // iterate the resources to delete
        while (i.hasNext()) {
            String resName = i.next();
            try {
                // lock resource if autolock is enabled
                checkLock(resName);
                // undo changes on the resource
                getCms().undoChanges(resName, mode);
            } 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_UNDO_CHANGES_MULTI_0);

        return true;
    }
@ Override protected boolean performDialogOperation ( ) throws CmsException { boolean isFolder = isOperationOnFolder ( ) ; if ( ( isMultiOperation ( ) || isFolder ) && ! DIALOG_WAIT . equals ( getParamAction ( ) ) ) { return false ; } boolean undoRecursive = Boolean . valueOf ( getParamRecursive ( ) ) . booleanValue ( ) ; boolean undoMove = Boolean . valueOf ( getParamMove ( ) ) . booleanValue ( ) ; CmsResourceUndoMode mode = CmsResource . UNDO_CONTENT ; if ( undoRecursive ) { mode = CmsResource . UNDO_CONTENT_RECURSIVE ; } if ( undoMove ) { mode = mode . includeMove ( ) ; } Iterator < String > i = getResourceList ( ) . iterator ( ) ; while ( i . hasNext ( ) ) { String resName = i . next ( ) ; try { checkLock ( resName ) ; getCms ( ) . undoChanges ( resName , mode ) ; } catch ( CmsException e ) { if ( isMultiOperation ( ) ) { addMultiOperationException ( e ) ; } else { throw e ; } } } checkMultiOperationException ( Messages . get ( ) , Messages . ERR_UNDO_CHANGES_MULTI_0 ) ; return true ; }
Performs the undo changes operation on a resource.<p>

@return true, if the changes on a resource were undone, otherwise false
@throws CmsException if undo changes is not successful