/* * 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.inputevt; import java.util.*; import org.jivesoftware.smack.packet.*; /** * Input event IQ. It is used to transfer key and mouse events through XMPP. * * @author Sebastien Vincent */ public class InputEvtIQ extends IQ { /** * The namespace that input event belongs to. */ public static final String NAMESPACE = "http://jitsi.org/protocol/inputevt"; /** * The namespace for peer that supports input event as a sharing server * (sharer): * Sends to remote peer "start" or "stop" action to respectively allows or * disables remote peer to send "notify" action about its mouse or keyboard * events. */ public static final String NAMESPACE_SERVER = NAMESPACE + "/sharer"; /** * The namespace for peer that supports input event as a sharing clent * (sharee): * Sends "notify" action describing mouse or keyboard events to the remote * peer which shares its desktop. */ public static final String NAMESPACE_CLIENT = NAMESPACE + "/sharee"; /** * The name of the element that contains the input event data. */ public static final String ELEMENT_NAME = "inputevt"; /** * The name of the argument that contains the input action value. */ public static final String ACTION_ATTR_NAME = "action"; /** * Action of this <tt>InputIQ</tt>. */ private InputEvtAction action = null; /** * List of remote-control elements. */ private List<RemoteControlExtension> remoteControls = new ArrayList<RemoteControlExtension>(); /** * Constructor. */ public InputEvtIQ() { } /** * Get the XML representation of the IQ. * * @return XML representation of the IQ */ @Override public String getChildElementXML() { StringBuilder bldr = new StringBuilder("<" + ELEMENT_NAME); bldr.append(" xmlns='" + NAMESPACE + "'"); bldr.append(" " + ACTION_ATTR_NAME + "='" + getAction() + "'"); if(remoteControls.size() > 0) { bldr.append(">"); for(RemoteControlExtension p : remoteControls) bldr.append(p.toXML()); bldr.append("</" + ELEMENT_NAME + ">"); } else { bldr.append("/>"); } return bldr.toString(); } /** * Sets the value of this element's <tt>action</tt> attribute. The value of * the 'action' attribute MUST be one of the values enumerated here. If an * entity receives a value not defined here, it MUST ignore the attribute * and MUST return a <tt>bad-request</tt> error to the sender. There is no * default value for the 'action' attribute. * * @param action the value of the <tt>action</tt> attribute. */ public void setAction(InputEvtAction action) { this.action = action; } /** * Returns the value of this element's <tt>action</tt> attribute. The value * of the 'action' attribute MUST be one of the values enumerated here. If * an entity receives a value not defined here, it MUST ignore the attribute * and MUST return a <tt>bad-request</tt> error to the sender. There is no * default value for the 'action' attribute. * * @return the value of the <tt>action</tt> attribute. */ public InputEvtAction getAction() { return action; } /** * Add a remote-control extension. * * @param item remote-control extension */ public void addRemoteControl(RemoteControlExtension item) { remoteControls.add(item); } /** * Remove a remote-control extension. * * @param item remote-control extension */ public void removeRemoteControl(RemoteControlExtension item) { remoteControls.remove(item); } /** * Get the <tt>RemoteControlExtension</tt> list of this IQ. * * @return list of <tt>RemoteControlExtension</tt> */ public List<RemoteControlExtension> getRemoteControls() { return remoteControls; } }