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

uk.org.retep.xmpp.muc.builder.MucRoomMemberBuilder 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.util.builder.StringBuilder;
import uk.org.retep.util.builder.impl.AbstractBuilder;
import uk.org.retep.xmpp.builder.JIDBuilder;
import uk.org.retep.xmpp.muc.MucAuthenticator;
import uk.org.retep.xmpp.muc.MucRoomMember;
import uk.org.retep.xmpp.muc.beans.BasicMucAuthenticator;
import uk.org.retep.xmpp.muc.beans.BasicMucRoomMember;
import uk.org.retep.xmpp.util.Affiliation;
import uk.org.retep.xmpp.util.Role;

/**
 * Builds a {@link MucAuthenticator}.
 *
 * The default implementation simply returns a new {@link BasicMucAuthenticator}
 * but this builder exists to allow subclasses to implement their own implementation
 * 
 * @param  Type of subclass
 * @author peter
 */
public class MucRoomMemberBuilder
        extends AbstractBuilder
{

    private JIDBuilder jidBuilder;
    private Affiliation affilitation = Affiliation.NONE;
    private Role role = Role.VISITOR;
    private StringBuilder nickNameBuilder = null;

    @Nonnull
    public final B setJidBuilder( @Nonnull final JIDBuilder jidBuilder )
    {
        this.jidBuilder = jidBuilder;
        return getThis();
    }

    @Nonnull
    public final B setAffilitation( @Nullable final Affiliation affilitation )
    {
        this.affilitation = affilitation == null ? Affiliation.NONE : affilitation;
        return getThis();
    }

    @Nonnull
    public final B setRole( @Nullable final Role role )
    {
        this.role = role == null ? Role.NONE : role;
        return getThis();
    }

    @Nonnull
    public final B setNickName( final String nickName )
    {
        return setNickNameBuilder( new StringBuilder( nickName ) );
    }

    @Nonnull
    public final B setNickNameBuilder(
            @Nullable final StringBuilder nickNameBuilder )
    {
        this.nickNameBuilder = nickNameBuilder;
        return getThis();
    }

    @Nonnull
    protected final Affiliation getAffilitation()
    {
        return affilitation;
    }

    @Nonnull
    protected final Role getRole()
    {
        return role;
    }

    @Nullable
    protected final StringBuilder getNickNameBuilder()
    {
        return nickNameBuilder;
    }

    @Nonnull
    @Override
    public MucRoomMember build()
    {
        final MucRoomMember member = new BasicMucRoomMember();

        member.setJID( jidBuilder.build() );
        member.setAffiliation( affilitation );
        member.setRole( role );
        member.setNickname( build( nickNameBuilder ) );

        return member;
    }

    /**
     * Subclasses must implement this to create a specific implementation
     *
     * @return implementation of {@link MucRoomMember}
     */
    @Nonnull
    protected MucRoomMember createNewInstance()
    {
        return new BasicMucRoomMember();
    }
}