All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.smackx.address.packet.MultipleAddresses Maven / Gradle / Ivy

/**
 *
 * Copyright 2003-2006 Jive Software.
 *
 * 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.address.packet;

import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;

import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.util.XmlStringBuilder;

import org.jxmpp.jid.Jid;

/**
 * Stanza extension that contains the list of addresses that a stanza should be sent or was sent.
 *
 * @author Gaston Dombiak
 */
public class MultipleAddresses implements ExtensionElement {

    public static final String NAMESPACE = "http://jabber.org/protocol/address";
    public static final String ELEMENT = "addresses";
    public static final QName QNAME = new QName(NAMESPACE, ELEMENT);

    public enum Type {
        bcc,
        cc,
        noreply,
        replyroom,
        replyto,
        to,

        /**
         * The "original from" type used to indicate the real originator of the stanza.
         * 

* This Extended Stanza Addressing type is not specified in XEP-33, but in XEP-45 § 7.2.14 (Example 36). *

*/ ofrom, } private final List
addresses = new ArrayList<>(); /** * Adds a new address to which the stanza is going to be sent or was sent. * * @param type on of the static type (BCC, CC, NO_REPLY, REPLY_ROOM, etc.) * @param jid the JID address of the recipient. * @param node used to specify a sub-addressable unit at a particular JID, corresponding to * a Service Discovery node. * @param desc used to specify human-readable information for this address. * @param delivered true when the stanza was already delivered to this address. * @param uri used to specify an external system address, such as a sip:, sips:, or im: URI. */ public void addAddress(Type type, Jid jid, String node, String desc, boolean delivered, String uri) { // Create a new address with the specified configuration Address address = new Address(type); address.setJid(jid); address.setNode(node); address.setDescription(desc); address.setDelivered(delivered); address.setUri(uri); // Add the new address to the list of multiple recipients addresses.add(address); } /** * Indicate that the stanza being sent should not be replied. */ public void setNoReply() { // Create a new address with the specified configuration Address address = new Address(Type.noreply); // Add the new address to the list of multiple recipients addresses.add(address); } /** * Returns the list of addresses that matches the specified type. Examples of address * type are: TO, CC, BCC, etc. * * @param type Examples of address type are: TO, CC, BCC, etc. * @return the list of addresses that matches the specified type. */ public List
getAddressesOfType(Type type) { List
answer = new ArrayList<>(addresses.size()); for (Address address : addresses) { if (address.getType().equals(type)) { answer.add(address); } } return answer; } @Override public String getElementName() { return ELEMENT; } @Override public String getNamespace() { return NAMESPACE; } @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(this); buf.rightAngleBracket(); // Loop through all the addresses and append them to the string buffer for (Address address : addresses) { buf.append(address.toXML()); } buf.closeElement(this); return buf; } public static final class Address implements ExtensionElement { public static final String ELEMENT = "address"; public static final QName QNAME = new QName(NAMESPACE, ELEMENT); private final Type type; private Jid jid; private String node; private String description; private boolean delivered; private String uri; private Address(Type type) { this.type = type; } public Type getType() { return type; } public Jid getJid() { return jid; } private void setJid(Jid jid) { this.jid = jid; } public String getNode() { return node; } private void setNode(String node) { this.node = node; } public String getDescription() { return description; } private void setDescription(String description) { this.description = description; } public boolean isDelivered() { return delivered; } private void setDelivered(boolean delivered) { this.delivered = delivered; } public String getUri() { return uri; } private void setUri(String uri) { this.uri = uri; } @Override public String getElementName() { return QNAME.getLocalPart(); } @Override public String getNamespace() { return QNAME.getNamespaceURI(); } @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); buf.attribute("type", type); buf.optAttribute("jid", jid); buf.optAttribute("node", node); buf.optAttribute("desc", description); if (description != null && description.trim().length() > 0) { buf.append(" desc=\""); buf.append(description).append('"'); } buf.optBooleanAttribute("delivered", delivered); buf.optAttribute("uri", uri); buf.closeEmptyElement(); return buf; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy