aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jitsimeet/ComponentVersionsExtension.java
blob: bcc339790a9935ed3e012d2bbf2eb2b98855caf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 * 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);
        }
    }
}