/** | |
* 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("'"); | |
} | |
} |