/*
* Jitsi Videobridge, OpenSource video conferencing.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jitsi.videobridge.log;
/**
* A utility class with static methods which initialize <tt>Event</tt> instances
* with pre-determined fields.
*
* @author Boris Grozev
*/
public class EventFactory
{
/**
* The names of the columns of a "conference created" event.
*/
private static final String[] CONFERENCE_CREATED_COLUMNS
= new String[] {"conference_id", "focus"};
/**
* The names of the columns of a "conference expired" event.
*/
private static final String[] CONFERENCE_EXPIRED_COLUMNS
= new String[] {"conference_id"};
/**
* The names of the columns of a "content created" event.
*/
private static final String[] CONTENT_CREATED_COLUMNS
= new String[] {"name", "conference_id"};
/**
* The names of the columns of a "content expired" event.
*/
private static final String[] CONTENT_EXPIRED_COLUMNS
= CONTENT_CREATED_COLUMNS;
/**
* The names of the columns of a "channel created" event.
*/
private static final String[] CHANNEL_CREATED_COLUMNS
= new String[]
{
"channel_id",
"content_name",
"conference_id",
"endpoint_id",
"lastn"
};
/**
* The names of the columns of a "channel expired" event.
*/
private static final String[] CHANNEL_EXPIRED_COLUMNS
= CHANNEL_CREATED_COLUMNS;
/**
* The names of the columns of a "transport created" event.
*/
private static final String[] TRANSPORT_CREATED_COLUMNS
= new String[]
{
"hash_code",
"conference_id",
"num_components",
"ufrag",
"is_controlling"
};
/**
* The names of the columns of a "transport manager channel added" event.
*/
private static final String[] TRANSPORT_CHANNEL_ADDED_COLUMNS
= new String[]
{
"hash_code",
"conference_id",
"channel_id",
};
/**
* The names of the columns of a "transport manager channel removed" event.
*/
private static final String[] TRANSPORT_CHANNEL_REMOVED_COLUMNS
= TRANSPORT_CHANNEL_ADDED_COLUMNS;
/**
* The names of the columns of a "transport manager connected" event.
*/
private static final String[] TRANSPORT_CONNECTED_COLUMNS
= new String[]
{
"hash_code",
"conference_id",
"selected_pairs"
};
/**
* The names of the columns of a "transport manager connected" event.
*/
private static final String[] TRANSPORT_STATE_CHANGED_COLUMNS
= new String[]
{
"hash_code",
"conference_id",
"old_state",
"new_state"
};
/**
* The names of the columns of an "endpoint created" event.
*/
private static final String[] ENDPOINT_CREATED_COLUMNS
= new String[]
{
"conference_id",
"endpoint_id",
};
/**
* The names of the columns of a "focus created" event.
*/
private static final String[] FOCUS_CREATED_COLUMNS
= new String[]
{
"room_jid"
};
/**
* The names of the columns of a "conference room" event.
*/
private static final String[] CONFERENCE_ROOM_COLUMNS
= new String[]
{
"conference_id",
"room_jid"
};
/**
* The names of the columns of an "endpoint display name" event.
*/
private static final String[] ENDPOINT_DISPLAY_NAME_COLUMNS
= new String[]
{
"conference_id",
"endpoint_id",
"display_name"
};
/**
* Creates a new "conference created" <tt>Event</tt>, which indicates the
* creation of a new COLIBRI conference.
* @param id the ID of the COLIBRI conference.
* @param focus the JID which requested the creation of the COLIBRI
* conference, if any.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event conferenceCreated(String id, String focus)
{
return new Event("conference_created",
CONFERENCE_CREATED_COLUMNS,
new Object[]
{
id,
focus != null ? focus : "null"
});
}
/**
* Creates a new "content created" <tt>Event</tt>, which indicates the
* creation of a new COLIBRI content.
* @param name the name of the COLIBRI content.
* @param conferenceId the ID of the COLIBRI content's parent conference.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event contentCreated(String name, String conferenceId)
{
return new Event("content_created",
CONTENT_CREATED_COLUMNS,
new Object[] {name, conferenceId});
}
/**
* Creates a new "channel created" <tt>Event</tt>, which indicates the
* creation of a new COLIBRI channel.
* @param id the ID of the COLIBRI channel.
* @param contentName the name of the COLIBRI channel's parent content.
* @param conferenceId the ID of the COLIBRI channel's parent conference.
* @param endpointId the ID of the channel's endpoint.
* @param lastN the last-n value for the channel.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event channelCreated(
String id,
String contentName,
String conferenceId,
String endpointId,
int lastN)
{
return new Event("channel_created",
CHANNEL_CREATED_COLUMNS,
new Object[] {id, contentName, conferenceId,
endpointId, lastN});
}
/**
* Creates a new "conference expired" <tt>Event</tt>, which indicates the
* expiry of a COLIBRI conference.
* @param id the ID of the COLIBRI conference.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event conferenceExpired(String id)
{
return new Event("conference_expired",
CONFERENCE_EXPIRED_COLUMNS,
new Object[] {id});
}
/**
* Creates a new "content expired" <tt>Event</tt>, which indicates the
* expiry of a COLIBRI content.
* @param name the name of the COLIBRI content.
* @param conferenceId the ID of the COLIBRI content's parent conference.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event contentExpired(String name, String conferenceId)
{
return new Event("content_expired",
CONTENT_EXPIRED_COLUMNS,
new Object[] {name, conferenceId});
}
/**
* Creates a new "channel expired" <tt>Event</tt>, which indicates the
* expiry of a COLIBRI channel.
* @param id the ID of the COLIBRI channel.
* @param contentName the name of the COLIBRI channel's parent content.
* @param conferenceId the ID of the COLIBRI channel's parent conference.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event channelExpired(
String id,
String contentName,
String conferenceId)
{
return new Event("channel_expired",
CHANNEL_EXPIRED_COLUMNS,
new Object[] {id, contentName, conferenceId});
}
/**
* Creates a new "transport created" <tt>Event</tt>, which indicates the
* creation of a new Jitsi Videobridge TransportManager.
* @param hashCode the hash code of the transport manager object.
* @param conferenceId the ID of the transport manager's parent conference.
* @param numComponents the number of ICE components.
* @param ufrag the local ufrag.
* @param isControlling whether the ICE agent has the controlling or
* controlled role.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event transportCreated(
int hashCode,
String conferenceId,
int numComponents,
String ufrag,
boolean isControlling)
{
return new Event("transport_created",
TRANSPORT_CREATED_COLUMNS,
new Object[]{
String.valueOf(hashCode),
conferenceId,
numComponents,
ufrag,
Boolean.valueOf(isControlling).toString()});
}
/**
* Creates a new "transport channel added" <tt>Event</tt>, which indicates
* that a COLIBRI channel was added to a Jitsi Videobridge TransportManager.
* @param hashCode the hash code of the transport manager object.
* @param conferenceId the ID of the transport manager's parent conference.
* @param channelId the ID of the channel which was added.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event transportChannelAdded(
int hashCode,
String conferenceId,
String channelId)
{
return new Event("transport_channel_added",
TRANSPORT_CHANNEL_ADDED_COLUMNS,
new Object[]{
String.valueOf(hashCode),
conferenceId,
channelId});
}
/**
* Creates a new "transport channel removed" <tt>Event</tt>, which indicates
* that a COLIBRI channel was removed from a Jitsi Videobridge
* TransportManager.
* @param hashCode the hash code of the transport manager object.
* @param conferenceId the ID of the transport manager's parent conference.
* @param channelId the ID of the channel which was added.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event transportChannelRemoved(
int hashCode,
String conferenceId,
String channelId)
{
return new Event("transport_channel_removed",
TRANSPORT_CHANNEL_REMOVED_COLUMNS,
new Object[]{
String.valueOf(hashCode),
conferenceId,
channelId});
}
/**
* Creates a new "transport connected" <tt>Event</tt>, which indicates
* that a Jitsi Videobridge TransportManager has changed its state to
* connected.
* @param hashCode the hash code of the transport manager object
* @param conferenceId the ID of the transport manager's parent conference.
* @param selectedPairs a <tt>String</tt> representation of the ICE pairs
* which were selected for each ICE component.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event transportConnected(
int hashCode,
String conferenceId,
String selectedPairs)
{
return new Event("transport_connected",
TRANSPORT_CONNECTED_COLUMNS,
new Object[]{
String.valueOf(hashCode),
conferenceId,
selectedPairs});
}
/**
* Creates a new "transport manager state changed" <tt>Event</tt>, which
* indicates that a Jitsi Videobridge TransportManager has changed its
* state.
* @param hashCode the hash code of the transport manager object
* @param conferenceId the ID of the transport manager's parent conference.
* @param oldState the old ICE state.
* @param newState the new ICE state.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event transportStateChanged(
int hashCode,
String conferenceId,
String oldState,
String newState)
{
return new Event("transport_state_changed",
TRANSPORT_STATE_CHANGED_COLUMNS,
new Object[]{
String.valueOf(hashCode),
conferenceId,
oldState,
newState});
}
/**
* Creates a new "endpoint created" <tt>Event</tt>, which indicates that
* a COLIBRI endpoint was created.
* @param conferenceId the ID of the endpoint's parent conference.
* @param endpointId the ID of the endpoint
*
* @return the <tt>Event</tt> which was created.
*/
public static Event endpointCreated(
String conferenceId,
String endpointId)
{
return new Event("endpoint_created",
ENDPOINT_CREATED_COLUMNS,
new Object[]
{
conferenceId,
endpointId
});
}
/**
* Creates a new "focus created" <tt>Event</tt>.
* @param roomJid the JID of the MUC for which the focus was created.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event focusCreated(
String roomJid)
{
return new Event("focus_created",
FOCUS_CREATED_COLUMNS,
new Object[]
{
roomJid,
});
}
/**
* Creates a new "room conference" <tt>Event</tt> which binds a COLIBRI
* conference ID to the JID of the associated MUC.
*
* @param conferenceId the ID of the COLIBRI conference.
* @param roomJid the JID of the MUC for which the focus was created.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event conferenceRoom(
String conferenceId,
String roomJid)
{
return new Event("conference_room",
CONFERENCE_ROOM_COLUMNS,
new Object[]
{
conferenceId,
roomJid
});
}
/**
* Creates a new "endpoint display name changed" <tt>Event</tt>, which
* conference ID to the JID of the associated MUC.
*
* @param conferenceId the ID of the COLIBRI conference.
* @param endpointId the ID of the COLIBRI endpoint.
* @param displayName the new display name.
*
* @return the <tt>Event</tt> which was created.
*/
public static Event endpointDisplayNameChanged(
String conferenceId,
String endpointId,
String displayName)
{
return new Event("endpoint_display_name",
ENDPOINT_DISPLAY_NAME_COLUMNS,
new Object[]
{
conferenceId,
endpointId,
displayName
});
}
}