• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * $RCSfile$
3  * $Revision$
4  * $Date$
5  *
6  * Copyright 2003-2007 Jive Software.
7  *
8  * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 package org.jivesoftware.smackx.packet;
22 
23 import org.jivesoftware.smack.packet.PacketExtension;
24 import org.jivesoftware.smack.provider.PacketExtensionProvider;
25 import org.xmlpull.v1.XmlPullParser;
26 
27 /**
28  * OfflineMessageInfo is an extension included in the retrieved offline messages requested by
29  * the {@link org.jivesoftware.smackx.OfflineMessageManager}. This extension includes a stamp
30  * that uniquely identifies the offline message. This stamp may be used for deleting the offline
31  * message. The stamp may be of the form UTC timestamps but it is not required to have that format.
32  *
33  * @author Gaston Dombiak
34  */
35 public class OfflineMessageInfo implements PacketExtension {
36 
37     private String node = null;
38 
39     /**
40     * Returns the XML element name of the extension sub-packet root element.
41     * Always returns "offline"
42     *
43     * @return the XML element name of the packet extension.
44     */
getElementName()45     public String getElementName() {
46         return "offline";
47     }
48 
49     /**
50      * Returns the XML namespace of the extension sub-packet root element.
51      * According the specification the namespace is always "http://jabber.org/protocol/offline"
52      *
53      * @return the XML namespace of the packet extension.
54      */
getNamespace()55     public String getNamespace() {
56         return "http://jabber.org/protocol/offline";
57     }
58 
59     /**
60      * Returns the stamp that uniquely identifies the offline message. This stamp may
61      * be used for deleting the offline message. The stamp may be of the form UTC timestamps
62      * but it is not required to have that format.
63      *
64      * @return the stamp that uniquely identifies the offline message.
65      */
getNode()66     public String getNode() {
67         return node;
68     }
69 
70     /**
71      * Sets the stamp that uniquely identifies the offline message. This stamp may
72      * be used for deleting the offline message. The stamp may be of the form UTC timestamps
73      * but it is not required to have that format.
74      *
75      * @param node the stamp that uniquely identifies the offline message.
76      */
setNode(String node)77     public void setNode(String node) {
78         this.node = node;
79     }
80 
toXML()81     public String toXML() {
82         StringBuilder buf = new StringBuilder();
83         buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append(
84             "\">");
85         if (getNode() != null)
86             buf.append("<item node=\"").append(getNode()).append("\"/>");
87         buf.append("</").append(getElementName()).append(">");
88         return buf.toString();
89     }
90 
91     public static class Provider implements PacketExtensionProvider {
92 
93         /**
94          * Creates a new Provider.
95          * ProviderManager requires that every PacketExtensionProvider has a public,
96          * no-argument constructor
97          */
Provider()98         public Provider() {
99         }
100 
101         /**
102          * Parses a OfflineMessageInfo packet (extension sub-packet).
103          *
104          * @param parser the XML parser, positioned at the starting element of the extension.
105          * @return a PacketExtension.
106          * @throws Exception if a parsing error occurs.
107          */
parseExtension(XmlPullParser parser)108         public PacketExtension parseExtension(XmlPullParser parser)
109             throws Exception {
110             OfflineMessageInfo info = new OfflineMessageInfo();
111             boolean done = false;
112             while (!done) {
113                 int eventType = parser.next();
114                 if (eventType == XmlPullParser.START_TAG) {
115                     if (parser.getName().equals("item"))
116                         info.setNode(parser.getAttributeValue("", "node"));
117                 } else if (eventType == XmlPullParser.END_TAG) {
118                     if (parser.getName().equals("offline")) {
119                         done = true;
120                     }
121                 }
122             }
123 
124             return info;
125         }
126 
127     }
128 }
129