| /** |
| * 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.pubsub; |
| |
| /** |
| * Represents a subscription to node for both requests and replies. |
| * |
| * @author Robin Collier |
| */ |
| public class Subscription extends NodeExtension |
| { |
| protected String jid; |
| protected String id; |
| protected State state; |
| protected boolean configRequired = false; |
| |
| public enum State |
| { |
| subscribed, unconfigured, pending, none |
| } |
| |
| /** |
| * Used to constructs a subscription request to the root node with the specified |
| * JID. |
| * |
| * @param subscriptionJid The subscriber JID |
| */ |
| public Subscription(String subscriptionJid) |
| { |
| this(subscriptionJid, null, null, null); |
| } |
| |
| /** |
| * Used to constructs a subscription request to the specified node with the specified |
| * JID. |
| * |
| * @param subscriptionJid The subscriber JID |
| * @param nodeId The node id |
| */ |
| public Subscription(String subscriptionJid, String nodeId) |
| { |
| this(subscriptionJid, nodeId, null, null); |
| } |
| |
| /** |
| * Constructs a representation of a subscription reply to the specified node |
| * and JID. The server will have supplied the subscription id and current state. |
| * |
| * @param jid The JID the request was made under |
| * @param nodeId The node subscribed to |
| * @param subscriptionId The id of this subscription |
| * @param state The current state of the subscription |
| */ |
| public Subscription(String jid, String nodeId, String subscriptionId, State state) |
| { |
| super(PubSubElementType.SUBSCRIPTION, nodeId); |
| this.jid = jid; |
| id = subscriptionId; |
| this.state = state; |
| } |
| |
| /** |
| * Constructs a representation of a subscription reply to the specified node |
| * and JID. The server will have supplied the subscription id and current state |
| * and whether the subscription need to be configured. |
| * |
| * @param jid The JID the request was made under |
| * @param nodeId The node subscribed to |
| * @param subscriptionId The id of this subscription |
| * @param state The current state of the subscription |
| * @param configRequired Is configuration required to complete the subscription |
| */ |
| public Subscription(String jid, String nodeId, String subscriptionId, State state, boolean configRequired) |
| { |
| super(PubSubElementType.SUBSCRIPTION, nodeId); |
| this.jid = jid; |
| id = subscriptionId; |
| this.state = state; |
| this.configRequired = configRequired; |
| } |
| |
| /** |
| * Gets the JID the subscription is created for |
| * |
| * @return The JID |
| */ |
| public String getJid() |
| { |
| return jid; |
| } |
| |
| /** |
| * Gets the subscription id |
| * |
| * @return The subscription id |
| */ |
| public String getId() |
| { |
| return id; |
| } |
| |
| /** |
| * Gets the current subscription state. |
| * |
| * @return Current subscription state |
| */ |
| public State getState() |
| { |
| return state; |
| } |
| |
| /** |
| * This value is only relevant when the {@link #getState()} is {@link State#unconfigured} |
| * |
| * @return true if configuration is required, false otherwise |
| */ |
| public boolean isConfigRequired() |
| { |
| return configRequired; |
| } |
| |
| public String toXML() |
| { |
| StringBuilder builder = new StringBuilder("<subscription"); |
| appendAttribute(builder, "jid", jid); |
| |
| if (getNode() != null) |
| appendAttribute(builder, "node", getNode()); |
| |
| if (id != null) |
| appendAttribute(builder, "subid", id); |
| |
| if (state != null) |
| appendAttribute(builder, "subscription", state.toString()); |
| |
| builder.append("/>"); |
| return builder.toString(); |
| } |
| |
| private void appendAttribute(StringBuilder builder, String att, String value) |
| { |
| builder.append(" "); |
| builder.append(att); |
| builder.append("='"); |
| builder.append(value); |
| builder.append("'"); |
| } |
| |
| } |