private void saveDOM()

in jspwiki-main/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java [234:303]


    private void saveDOM() throws WikiSecurityException {
        if( c_dom == null ) {
            throw new IllegalStateException( "FATAL: database does not exist" );
        }

        final File newFile = new File( c_file.getAbsolutePath() + ".new" );
        try( final BufferedWriter io = new BufferedWriter( new OutputStreamWriter( Files.newOutputStream( newFile.toPath() ), StandardCharsets.UTF_8 ) ) ) {

            // Write the file header and document root
            io.write( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
            io.write( "<users>\n" );

            // Write each profile as a <user> node
            final Element root = c_dom.getDocumentElement();
            final NodeList nodes = root.getElementsByTagName( USER_TAG );
            for( int i = 0; i < nodes.getLength(); i++ ) {
                final Element user = ( Element )nodes.item( i );
                io.write( "    <" + USER_TAG + " " );
                io.write( UID );
                io.write( "=\"" + user.getAttribute( UID ) + "\" " );
                io.write( LOGIN_NAME );
                io.write( "=\"" + user.getAttribute( LOGIN_NAME ) + "\" " );
                io.write( WIKI_NAME );
                io.write( "=\"" + user.getAttribute( WIKI_NAME ) + "\" " );
                io.write( FULL_NAME );
                io.write( "=\"" + user.getAttribute( FULL_NAME ) + "\" " );
                io.write( EMAIL );
                io.write( "=\"" + user.getAttribute( EMAIL ) + "\" " );
                io.write( PASSWORD );
                io.write( "=\"" + user.getAttribute( PASSWORD ) + "\" " );
                io.write( CREATED );
                io.write( "=\"" + user.getAttribute( CREATED ) + "\" " );
                io.write( LAST_MODIFIED );
                io.write( "=\"" + user.getAttribute( LAST_MODIFIED ) + "\" " );
                io.write( LOCK_EXPIRY );
                io.write( "=\"" + user.getAttribute( LOCK_EXPIRY ) + "\" " );
                io.write( ">" );
                final NodeList attributes = user.getElementsByTagName( ATTRIBUTES_TAG );
                for( int j = 0; j < attributes.getLength(); j++ ) {
                    final Element attribute = ( Element )attributes.item( j );
                    final String value = extractText( attribute );
                    io.write( "\n        <" + ATTRIBUTES_TAG + ">" );
                    io.write( value );
                    io.write( "</" + ATTRIBUTES_TAG + ">" );
                }
                io.write( "\n    </" + USER_TAG + ">\n" );
            }
            io.write( "</users>" );
        } catch( final IOException e ) {
            throw new WikiSecurityException( e.getLocalizedMessage(), e );
        }

        // Copy new file over old version
        final File backup = new File( c_file.getAbsolutePath() + ".old" );
        if( backup.exists() ) {
            if( !backup.delete() ) {
                LOG.error( "Could not delete old user database backup: " + backup );
            }
        }
        if( !c_file.renameTo( backup ) ) {
            LOG.error( "Could not create user database backup: " + backup );
        }
        if( !newFile.renameTo( c_file ) ) {
            LOG.error( "Could not save database: " + backup + " restoring backup." );
            if( !backup.renameTo( c_file ) ) {
                LOG.error( "Restore failed. Check the file permissions." );
            }
            LOG.error( "Could not save database: " + c_file + ". Check the file permissions" );
        }
    }