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

uk.org.retep.xmpp.muc.logic.RoomQueryLogic 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.logic;

import java.util.List;
import uk.org.retep.util.messaging.MessageException;
import uk.org.retep.xmpp.JID;
import uk.org.retep.xmpp.XMPPServer;
import uk.org.retep.xmpp.logic.UnexpectedMessageLogic;
import uk.org.retep.xmpp.logic.XMPPLogic;
import uk.org.retep.xmpp.logic.XMPPProtocolLogic;
import uk.org.retep.xmpp.message.Iq;
import uk.org.retep.xmpp.message.Message;
import uk.org.retep.xmpp.util.MessageFactory;
import uk.org.retep.xmpp.message.Presence;
import uk.org.retep.xmpp.message.Stanza;
import uk.org.retep.xmpp.muc.MucFeature;
import uk.org.retep.xmpp.muc.MucRoom;
import uk.org.retep.xmpp.muc.MucService;

/**
 * XEP-0045 6.1 Discovering Component Support for MUC
 * 
 * @author peter
 */
public enum RoomQueryLogic
        implements XMPPProtocolLogic
{

    /**
     * XEP-0045 6.3 Querying for Room Information
     */
    ROOM_INFO
    {

        @Override
        public Class getProtocol()
        {
            return org.jabber.protocol.disco_info.Query.class;
        }

        @Override
        public  XMPPLogic process( final XMPPServer server,
                                      final MucService service,
                                      final MucRoom room,
                                      final Iq iq )
                throws MessageException
        {
            final org.jabber.protocol.disco_info.QueryBuilder items = new org.jabber.protocol.disco_info.QueryBuilder();
            items.addIdentity( room.getSubject(), "conference", "text", null );

            for( MucFeature feature : room.getFeatures() )
            {
                feature.add( items );
            }

            server.send( iq.getResponseBuilder().addContent( items ) );

            return null;
        }
    },
    /**
     * XEP-0045 6.4 Querying for Room Items
     */
    ROOM_ITEMS
    {

        @Override
        public Class getProtocol()
        {
            return org.jabber.protocol.disco_items.Query.class;
        }

        @Override
        public  XMPPLogic process( final XMPPServer server,
                                      final MucService service,
                                      final MucRoom room,
                                      final Iq iq )
                throws MessageException
        {
            // After Example 9 it states that this list contains the membership
            // only if the information is publically available. So is this a
            // MucFeature type and which one?
            // if( public ) {
            final org.jabber.protocol.disco_items.QueryBuilder query = new org.jabber.protocol.disco_items.QueryBuilder();

            // Copy so we don't accidentally corrupt it and no locking from
            // Terracotta
            final JID roomJid = room.getJid().copyWithoutResource();

            for( String member : room.getMemberNicknames() )
            {
                query.addItem( null,
                        null,
                        roomJid.copy().setResource( member ),
                        null);
            }
            // } // if( public )

            server.send( iq.getResponseBuilder().addContent( query ) );

            return null;
        }
    };

    @Override
    public  XMPPLogic process( final XMPPServer server,
                                  final MucService service,
                                  final MucRoom room,
                                  final Message message )
            throws MessageException
    {
        return UnexpectedMessageLogic.INSTANCE;
    }

    @Override
    public  XMPPLogic process( final XMPPServer server,
                                  final MucService service,
                                  final MucRoom room,
                                  final Presence presence )
            throws MessageException
    {
        return UnexpectedMessageLogic.INSTANCE;
    }

    @Override
    public  XMPPLogic process( final XMPPServer server,
                                  final MucService service,
                                  final MucRoom room,
                                  final Stanza stanza )
            throws MessageException
    {
        return UnexpectedMessageLogic.INSTANCE;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy