/** * $RCSfile: JingleContent.java,v $ * $Revision: 1.2 $ * $Date: 2007/07/02 22:45:36 $ * * Copyright 2003-2005 Jive Software. * * All rights reserved. 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 org.jivesoftware.smackx.packet; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.jivesoftware.smack.packet.PacketExtension; /** * Jingle content. * * @author Jeff Williams */ public class JingleContent implements PacketExtension { public static final String NODENAME = "content"; public static final String CREATOR = "creator"; public static final String NAME = "name"; private String creator; private String name; private JingleDescription description; private final List<JingleTransport> transports = new ArrayList<JingleTransport>(); /** * Creates a content description.. */ public JingleContent(String creator, String name) { super(); this.creator = creator; this.name = name; } public String getCreator() { return creator; } public String getName() { return name; } /** * Returns the XML element name of the element. * * @return the XML element name of the element. */ public String getElementName() { return NODENAME; } /** * Return the namespace. * * @return The namespace */ public String getNamespace() { // There is no namespace for <content> return ""; } /** * Sets the description for this Jingle content. * * @param description * The description */ public void setDescription(JingleDescription description) { this.description = description; } /** * Gets the description for this Jingle content. * * @return The description. */ public JingleDescription getDescription() { return description; } /** * Adds a JingleTransport type to the packet. * * @param transport * the JignleTransport to add. */ public void addJingleTransport(final JingleTransport transport) { synchronized (transports) { transports.add(transport); } } /** * Adds a list of transports to add to the packet. * * @param transports * the transports to add. */ public void addTransports(final List<JingleTransport> transports) { synchronized (transports) { for (JingleTransport transport : transports) { addJingleTransport(transport); } } } /** * Returns an Iterator for the JingleTransports in the packet. * * @return an Iterator for the JingleTransports in the packet. */ public Iterator<JingleTransport> getJingleTransports() { return Collections.unmodifiableList(getJingleTransportsList()).iterator(); } /** * Returns a list for the JingleTransports in the packet. * * @return a list for the JingleTransports in the packet. */ public List<JingleTransport> getJingleTransportsList() { synchronized (transports) { return new ArrayList<JingleTransport>(transports); } } /** * Returns a count of the JingleTransports in the Jingle packet. * * @return the number of the JingleTransports in the Jingle packet. */ public int getJingleTransportsCount() { synchronized (transports) { return transports.size(); } } /** * Convert a Jingle description to XML. * * @return a string with the XML representation */ public String toXML() { StringBuilder buf = new StringBuilder(); synchronized (transports) { buf.append("<").append(getElementName()); buf.append(" creator='" + creator + "' name='" + name + "'>"); // Add the description. if (description != null) { buf.append(description.toXML()); } // Add all of the transports. for (JingleTransport transport : transports) { buf.append(transport.toXML()); } buf.append("</").append(getElementName()).append(">"); } return buf.toString(); } }