1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License. 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License. 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smackx.pubsub; 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Represents a subscription to node for both requests and replies. 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Robin Collier 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class Subscription extends NodeExtension 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{ 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected String jid; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected String id; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected State state; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen protected boolean configRequired = false; 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public enum State 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen subscribed, unconfigured, pending, none 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Used to constructs a subscription request to the root node with the specified 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * JID. 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param subscriptionJid The subscriber JID 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Subscription(String subscriptionJid) 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this(subscriptionJid, null, null, null); 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Used to constructs a subscription request to the specified node with the specified 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * JID. 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param subscriptionJid The subscriber JID 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param nodeId The node id 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Subscription(String subscriptionJid, String nodeId) 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this(subscriptionJid, nodeId, null, null); 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Constructs a representation of a subscription reply to the specified node 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and JID. The server will have supplied the subscription id and current state. 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param jid The JID the request was made under 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param nodeId The node subscribed to 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param subscriptionId The id of this subscription 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param state The current state of the subscription 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Subscription(String jid, String nodeId, String subscriptionId, State state) 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen super(PubSubElementType.SUBSCRIPTION, nodeId); 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.jid = jid; 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen id = subscriptionId; 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.state = state; 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Constructs a representation of a subscription reply to the specified node 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and JID. The server will have supplied the subscription id and current state 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and whether the subscription need to be configured. 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param jid The JID the request was made under 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param nodeId The node subscribed to 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param subscriptionId The id of this subscription 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param state The current state of the subscription 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param configRequired Is configuration required to complete the subscription 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Subscription(String jid, String nodeId, String subscriptionId, State state, boolean configRequired) 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen super(PubSubElementType.SUBSCRIPTION, nodeId); 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.jid = jid; 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen id = subscriptionId; 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.state = state; 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.configRequired = configRequired; 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Gets the JID the subscription is created for 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The JID 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getJid() 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return jid; 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Gets the subscription id 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The subscription id 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getId() 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return id; 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Gets the current subscription state. 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return Current subscription state 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public State getState() 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return state; 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * This value is only relevant when the {@link #getState()} is {@link State#unconfigured} 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if configuration is required, false otherwise 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isConfigRequired() 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return configRequired; 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String toXML() 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuilder builder = new StringBuilder("<subscription"); 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen appendAttribute(builder, "jid", jid); 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getNode() != null) 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen appendAttribute(builder, "node", getNode()); 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (id != null) 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen appendAttribute(builder, "subid", id); 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (state != null) 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen appendAttribute(builder, "subscription", state.toString()); 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen builder.append("/>"); 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return builder.toString(); 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private void appendAttribute(StringBuilder builder, String att, String value) 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen { 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen builder.append(" "); 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen builder.append(att); 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen builder.append("='"); 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen builder.append(value); 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen builder.append("'"); 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 161