/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.impl.protocol.jabber.extensions.jitsimeet;
import net.java.sip.communicator.impl.protocol.jabber.extensions.*;
/**
* The packet extension is used by Jicofo to broadcast versions of all video
* conferencing system components. This packets extension is added to jicofo's
* MUC presence. It will contain {@link Component} children which carry each
* component's name and version.
*
* @author Pawel Domas
*/
public class ComponentVersionsExtension
extends AbstractPacketExtension
{
/**
* The XML element name of {@link ComponentVersionsExtension}.
*/
public static final String ELEMENT_NAME = "versions";
/**
* The name of XML sub-elements which carry the info about particular
* component's version.
*/
public static final String COMPONENT_ELEMENT_NAME = "component";
/**
* Constant for {@link Component} name used to signal the version of
* conference focus.
*/
public static final String COMPONENT_FOCUS = "focus";
/**
* Constant for {@link Component} name used to signal the version of
* XMPP server.
*/
public static final String COMPONENT_XMPP_SERVER = "xmpp";
/**
* Constant for {@link Component} name used to signal the version of
* the videobridge.
*/
public static final String COMPONENT_VIDEOBRIDGE = "videobridge";
/**
* The XML element namespace of {@link ComponentVersionsExtension}.
*/
public static final String NAMESPACE = "http://jitsi.org/jitmeet";
/**
* Creates an {@link AbstractPacketExtension} instance for the specified
* <tt>namespace</tt> and <tt>elementName</tt>.
*/
public ComponentVersionsExtension()
{
super(NAMESPACE, ELEMENT_NAME);
}
/**
* Adds component's version to this extension.
*
* @param componentName the name of the component for which
* child {@link Component} extension will be added.
* @param versionStr human readable string that describes component's
* version.
*/
public void addComponentVersion(String componentName, String versionStr)
{
Component v = new Component();
v.setName(componentName);
v.setText(versionStr);
addChildExtension(v);
}
/**
* Component child element of {@link ComponentVersionsExtension}. The name
* of the component is carried in name attribute and the version string is
* the text value.
*/
public class Component
extends AbstractPacketExtension
{
/**
* The name of that attribute that carries component's name.
*/
private final String NAME_ATTR_NAME = "name";
/**
* Creates new instance of {@link Component} packet extension.
*/
public Component()
{
super(NAMESPACE, COMPONENT_ELEMENT_NAME);
}
/**
* Returns the value of the name attribute.
* @return <tt>String</tt> which describes the name of video
* conferencing system component.
*/
public String getName()
{
return getAttributeAsString(NAME_ATTR_NAME);
}
/**
* Sets new value for the component's name attribute.
* @param name a <tt>String</tt> which describes the name of video
* conferencing system component.
*/
public void setName(String name)
{
setAttribute(NAME_ATTR_NAME, name);
}
}
}