/*
* 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.rayo;
import net.java.sip.communicator.impl.protocol.jabber.extensions.*;
import org.jivesoftware.smack.packet.*;
/**
* 'End' Rayo packet extension used to notify the client about call ended event.
*
* @author Pawel Domas
*/
public class EndExtension
extends AbstractPacketExtension
{
/**
* XML element name of this extension.
*/
public static final String ELEMENT_NAME = "end";
/**
* End reason.
*/
private ReasonExtension reason;
/**
* Creates new instance.
*/
protected EndExtension()
{
super(RayoIqProvider.NAMESPACE, ELEMENT_NAME);
}
/**
* Checks if given <tt>elementName</tt> is valid end reason element.
* @param elementName the XML element name to check.
* @return <tt>true</tt> if given <tt>elementName</tt> is valid end reason
* element.
*/
public static boolean isValidReason(String elementName)
{
return ReasonExtension.BUSY.equals(elementName)
|| ReasonExtension.ERROR.equals(elementName)
|| ReasonExtension.HANGUP.equals(elementName)
|| ReasonExtension.HANGUP_COMMND.equals(elementName)
|| ReasonExtension.REJECTED.equals(elementName)
|| ReasonExtension.TIMEOUT.equals(elementName);
}
/**
* Returns {@link ReasonExtension} associated with this instance.
* @return {@link ReasonExtension} associated with this instance.
*/
public ReasonExtension getReason()
{
return reason;
}
/**
* Sets new {@link ReasonExtension} for this <tt>EndExtension</tt> instance.
* @param newReason the new {@link ReasonExtension} to set.
*/
public void setReason(ReasonExtension newReason)
{
if (this.reason != null)
{
getChildExtensions().remove(this.reason);
}
this.reason = newReason;
addChildExtension(newReason);
}
/**
* Creates 'Presence' packet containing call ended Rayo notification that
* contains specified end <tt>reason</tt>.
* @param from source JID of this event.
* @param to destination JID.
* @param reason call end reason string. One of {@link ReasonExtension}
* static constants.
* @return 'Presence' packet containing call ended Rayo notification.
*/
public static Presence createEnd(String from, String to, String reason)
{
Presence presence = new Presence(Presence.Type.unavailable);
presence.setFrom(from);
presence.setTo(to);
EndExtension end = new EndExtension();
end.setReason(new ReasonExtension(reason));
presence.addExtension(end);
return presence;
}
}