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

uk.org.retep.xmpp.muc.builder.MucServiceBuilder 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.builder;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import uk.org.retep.xmpp.JID;
import uk.org.retep.xmpp.builder.JIDBuilder;
import uk.org.retep.util.builder.impl.AbstractLastBuilder;
import uk.org.retep.xmpp.muc.MucRoomSet;
import uk.org.retep.xmpp.muc.MucService;
import uk.org.retep.xmpp.muc.beans.BasicMucAuthenticator;
import uk.org.retep.xmpp.muc.beans.BasicMucRoomSet;
import uk.org.retep.xmpp.muc.beans.BasicMucService;
import uk.org.retep.xmpp.muc.beans.BasicMucValidator;

/**
 * A Builder for creating a MucService
 *
 * @author peter
 * @since 9.12
 */
public class MucServiceBuilder
        extends AbstractLastBuilder
{

    private JIDBuilder serviceJidBuilder;
    private MucRoomLogicBuilder roomLogicBuilder;
    private MucRoomLookupLogicBuilder roomLookupLogicBuilder;
    private MucRoomSetLogicBuilder roomSetLogicBuilder;
    private AbsentMucRoomLogicBuilder absentRoomLogicBuilder;
    private MucAuthenticatorBuilder mucAuthenticatorBuilder;
    private MucValidatorBuilder mucValidatorBuilder;
    private MucRoomSetBuilder mucRoomSetBuilder;
    private MucLoggerBuilder mucLoggerBuilder;

    /**
     * Construct a builder of a {@link MucService}
     *
     * @param serviceJid {@link JID} of the service
     */
    public MucServiceBuilder( final JID serviceJid )
    {
        this( new JIDBuilder( serviceJid ) );
    }

    public MucServiceBuilder( @Nonnull final JIDBuilder serviceJIDBuilder )
    {
        this();
        this.serviceJidBuilder = serviceJIDBuilder;
    }

    public MucServiceBuilder()
    {
        roomLogicBuilder = new MucRoomLogicBuilder();
        roomLookupLogicBuilder = new MucRoomLookupLogicBuilder();
        roomSetLogicBuilder = new MucRoomSetLogicBuilder();
        absentRoomLogicBuilder = new AbsentMucRoomLogicBuilder();
    }

    /**
     * Create a {@link MucService} based on the built logic
     *
     * @return MucService
     */
    @Override
    public final MucService build()
    {
        resetLastBuild();

        assertBuilder( serviceJidBuilder, "serviceJidBuilder" );

        if( roomLogicBuilder == null )
        {
            roomLogicBuilder = new MucRoomLogicBuilder();
        }

        if( roomLookupLogicBuilder == null )
        {
            roomLookupLogicBuilder = new MucRoomLookupLogicBuilder();
        }

        if( roomSetLogicBuilder == null )
        {
            roomSetLogicBuilder = new MucRoomSetLogicBuilder();
        }

        if( absentRoomLogicBuilder == null )
        {
            absentRoomLogicBuilder = new AbsentMucRoomLogicBuilder();
        }

        final BasicMucService service = new BasicMucService(
                serviceJidBuilder.build() );

        // These use defaults rather than creating a builder which does the same
        // thing, saving object creation
        service.setAuthenticator(
                mucAuthenticatorBuilder == null ? new BasicMucAuthenticator() : mucAuthenticatorBuilder.build() );

        service.setValidator(
                mucValidatorBuilder == null ? new BasicMucValidator() : mucValidatorBuilder.build() );

        if( mucRoomSetBuilder == null )
        {
            service.setRoomSet( new BasicMucRoomSet( service.getJid() ) );
        }
        else
        {
            service.setRoomSet(
                    mucRoomSetBuilder.setServiceJid( service.getJid() ).build() );
        }

        // This is optional
        if( mucLoggerBuilder != null )
        {
            service.setLogger( mucLoggerBuilder.build() );
        }

        // Mandatory
        service.setServerLogic( roomSetLogicBuilder.build() );

        service.setRoomLogic( roomLogicBuilder.build() );

        service.setRoomAbsentLogic( absentRoomLogicBuilder.build() );

        return setLastBuild( service );
    }

    @Nonnull
    public MucServiceBuilder setServiceJidBuilder(
            @Nonnull final JIDBuilder serviceJidBuilder )
    {
        this.serviceJidBuilder = serviceJidBuilder;
        return this;
    }

    @Nonnull
    public MucServiceBuilder setAbsentRoomLogicBuilder(
            @Nonnull final AbsentMucRoomLogicBuilder absentRoomLogicBuilder )
    {
        this.absentRoomLogicBuilder = absentRoomLogicBuilder;
        return this;
    }

    @Nonnull
    public MucServiceBuilder setRoomLogicBuilder(
            @Nonnull final MucRoomLogicBuilder roomLogicBuilder )
    {
        this.roomLogicBuilder = roomLogicBuilder;
        return this;
    }

    @Nonnull
    public MucServiceBuilder setRoomLookupLogicBuilder(
            @Nonnull final MucRoomLookupLogicBuilder roomLookupLogicBuilder )
    {
        this.roomLookupLogicBuilder = roomLookupLogicBuilder;
        return this;
    }

    @Nonnull
    public MucRoomLookupLogicBuilder getRoomLookupLogicBuilder()
    {
        return roomLookupLogicBuilder;
    }



    @Nonnull
    public MucServiceBuilder setRoomSetLogicBuilder(
            @Nonnull final MucRoomSetLogicBuilder roomSetLogicBuilder )
    {
        this.roomSetLogicBuilder = roomSetLogicBuilder;
        return this;
    }

    /**
     * Set the {@link MucAuthenticatorBuilder} to use. If this is not set then a
     * default will be used
     *
     * @param mucAuthenticatorBuilder MucAuthenticatorBuilder or null
     * @return this instance
     */
    @Nonnull
    public MucServiceBuilder setMucAuthenticatorBuilder(
            @Nullable final MucAuthenticatorBuilder mucAuthenticatorBuilder )
    {
        this.mucAuthenticatorBuilder = mucAuthenticatorBuilder;
        return this;
    }

    /**
     * Set the {@link MucValidatorBuilder} to use. If this is not set then a default
     * will be used
     *
     * @param mucValidatorBuilder MucValidatorBuilder or null
     * @return this instance
     */
    @Nonnull
    public MucServiceBuilder setMucValidatorBuilder(
            @Nullable final MucValidatorBuilder mucValidatorBuilder )
    {
        this.mucValidatorBuilder = mucValidatorBuilder;
        return this;
    }

    /**
     * Set the {@link MucLoggerBuilder} to use for logging. If this is not set,
     * then no logger will be used.
     *
     * @param mucLoggerBuilder MucLoggerBuilder to use or null for none
     * @return this instance
     */
    @Nonnull
    public MucServiceBuilder setMucLoggerBuilder(
            @Nullable final MucLoggerBuilder mucLoggerBuilder )
    {
        this.mucLoggerBuilder = mucLoggerBuilder;
        return this;
    }

    /**
     * Sets the {@link MucRoomSet} to use. If this is not set then a default
     * implementation will be used.
     *
     * @param mucRoomSetBuilder MucRoomSetBuilder or null
     * @return this instance
     */
    @Nonnull
    public MucServiceBuilder setMucRoomSetBuilder(
            @Nullable final MucRoomSetBuilder mucRoomSetBuilder )
    {
        this.mucRoomSetBuilder = mucRoomSetBuilder;
        return this;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy