
uk.org.retep.xmpp.muc.builder.MucServiceBuilder Maven / Gradle / Ivy
/*
* 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