All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.org.retep.xmpp.muc.room.AbstractRoomBroadcast Maven / Gradle / Ivy

There is a newer version: 10.6
Show newest version
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uk.org.retep.xmpp.muc.room;

import javax.xml.bind.JAXBElement;
import org.jabber.protocol.nick.NickBuilder;
import uk.org.retep.util.messaging.MessageException;
import uk.org.retep.xmpp.builder.PresenceBuilder;
import uk.org.retep.xmpp.logic.AbstractXMPPLogic;
import uk.org.retep.xmpp.logic.XMPPLogic;
import uk.org.retep.xmpp.message.Presence;
import uk.org.retep.xmpp.muc.MucRoom;
import uk.org.retep.xmpp.muc.MucRoomMember;
import uk.org.retep.xmpp.muc.MucService;

/**
 * {@link XMPPLogic} implementation created by another to generate responses
 * for when a user joins a chat room
 * 
 * @author peter
 */
public abstract class AbstractRoomBroadcast
        extends AbstractXMPPLogic
{

    /**
     * Returns a Presence that can be used as some response. It will have the
     * correct muc#user.X element set with the details for the supplied
     * MucRoomMember applied.
     *
     * Note you need to set the from/to attributes on Presence, the default will
     * be the to/from pair from the passed instance.
     *
     * @param presence Presence to base the response on
     * @param member MucRoomMember
     * @param nonAnon true if the room is not anonymous
     * @param nickname Nickname or null
     * @return
     * @throws uk.org.retep.util.messaging.MessageException
     */
    protected final PresenceBuilder createMembershipPresence(
            final Presence presence,
            final MucRoomMember member,
            final boolean nonAnon,
            final String nickname )
            throws MessageException
    {
        final org.jabber.protocol.muc_user.ItemBuilder item = new org.jabber.protocol.muc_user.ItemBuilder();

        item.setAffiliation( member.getAffiliation() ).
                setRole( member.getRole() ). // Nickname change
                setNick( nickname );

        if( nonAnon )
        {
            item.setJid( member.getJID() );
        }

        final org.jabber.protocol.muc_user.XBuilder x = new org.jabber.protocol.muc_user.XBuilder();
        x.add( item );

        final PresenceBuilder p = presence.getResponseBuilder();
        p.addContent( x );

        // XEP-0172 persistent Nickname support
        final String persistentNickname = member.getPersistentNickname();
        if( persistentNickname != null )
        {
            p.addContent( new NickBuilder().setValue( persistentNickname ) );
        }

        return p;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy