uk.org.retep.xmpp.muc.builder.MucServiceBuilder Maven / Gradle / Ivy
/*
* Copyright (c) 1998-2010, Peter T Mount
* All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*
*
*
* GNU GENERAL PUBLIC LICENSE - CLASSPATH EXCEPTION
*
*
*
* Linking this library statically or dynamically with other modules
* is making a combined work based on this library. Thus, the terms
* and conditions of the GNU General Public License cover the whole
* combination.
*
*
*
* As a special exception, the copyright holders of this library give
* you permission to link this library with independent modules to
* produce an executable, regardless of the license terms of these
* independent modules, and to copy and distribute the resulting
* executable under terms of your choice, provided that you also meet,
* for each linked independent module, the terms and conditions of the
* license of that module.
*
*
*
* An independent module is a module which is either not derived from or based
* on this library, or a module who's classes extend those within this library
* as part of the implementation of the library.
*
*
*
* If you modify this library, you may extend this exception to your version
* of the library, but you are not obligated to do so. If you do not wish to
* do so, delete this exception statement from your version.
*
*/
package uk.org.retep.xmpp.muc.builder;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import uk.org.retep.util.builder.BuilderFactory;
import uk.org.retep.util.builder.impl.AbstractLastBuilder;
import uk.org.retep.xmpp.JID;
import uk.org.retep.xmpp.JIDBuilder;
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();
BuilderFactory.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;
}
}