/* * 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.jingle; import org.jivesoftware.smack.packet.*; /** * The <tt>reason</tt> element provides human or machine-readable information * explaining what prompted the <tt>action</tt> of the encapsulating * <tt>jingle</tt> element. * * @author Emil Ivov * @author Lyubomir Marinov */ public class ReasonPacketExtension implements PacketExtension { /** * The name space (or rather lack thereof ) that the reason element * belongs to. */ public static final String NAMESPACE = ""; /** * The name of the "content" element. */ public static final String ELEMENT_NAME = "reason"; /** * The name of the text element. */ public static final String TEXT_ELEMENT_NAME = "text"; /** * The reason that this packet extension is transporting. */ private final Reason reason; /** * The content of the text element (if any) providing human-readable * information about the reason for the action. */ private String text; /** * XEP-0166 mentions that the "reason" element MAY contain an element * qualified by some other namespace that provides more detailed machine- * readable information about the reason for the action. */ private PacketExtension otherExtension; /** * Creates a new <tt>ReasonPacketExtension</tt> instance with the specified * reason String. * * @param reason the reason string that we'd like to transport in this * packet extension, which may or may not be one of the static strings * defined here. * @param text an element providing human-readable information about the * reason for the action or <tt>null</tt> if no such information is * currently available. * @param packetExtension any other element that MAY be providing further * information or <tt>null</tt> if no such element has been specified. */ public ReasonPacketExtension(Reason reason, String text, PacketExtension packetExtension) { this.reason = reason; this.text = text; this.otherExtension = packetExtension; } /** * Returns the reason string that this packet extension is transporting. * * @return the reason string that this packet extension is transporting. */ public Reason getReason() { return reason; } /** * Returns human-readable information about the reason for the action or * <tt>null</tt> if no such information is currently available. * * @return human-readable information about the reason for the action or * <tt>null</tt> if no such information is currently available. */ public String getText() { return text; } /** * Sets the human-readable information about the reason for the action or * <tt>null</tt> if no such information is currently available * * @param text the human-readable information about the reason for the * action or <tt>null</tt> if no such information is currently available */ public void setText(String text) { this.text = text; } /** * Returns an extra extension containing further info about this action or * <tt>null</tt> if no such extension has been specified. This method * returns the extension that XEP-0166 refers to the following way: * the "reason" element MAY contain an element qualified by some other * namespace that provides more detailed machine-readable information about * the reason for the action. * * @return an extra extension containing further info about this action or * <tt>null</tt> if no such extension has been specified. */ public PacketExtension getOtherExtension() { return otherExtension; } /** * Sets the extra extension containing further info about this action or * <tt>null</tt> if no such extension has been specified. * * @param otherExtension the extra extension containing further info about * this action or <tt>null</tt> if no such extension has been specified */ public void setOtherExtension(PacketExtension otherExtension) { this.otherExtension = otherExtension; } /** * Returns the root element name. * * @return the element name. */ public String getElementName() { return ELEMENT_NAME; } /** * Returns the root element XML namespace. * * @return the namespace. */ public String getNamespace() { return NAMESPACE; } /** * Returns the XML representation of the PacketExtension. * * @return the packet extension as XML. */ public String toXML() { StringBuilder bldr = new StringBuilder("<" + getElementName() + ">"); bldr.append("<" + getReason().toString() + "/>"); //add reason "text" if we have it if(getText() != null) { bldr.append("<text>"); bldr.append(getText()); bldr.append("</text>"); } //add the extra element if it has been specified. if(getOtherExtension() != null) { bldr.append(getOtherExtension().toXML()); } bldr.append("</" + getElementName() + ">"); return bldr.toString(); } }