1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $RCSfile$
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2003-2007 Jive Software.
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License.
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *     http://www.apache.org/licenses/LICENSE-2.0
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS,
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License.
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smackx.packet;
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.IQ;
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A Version IQ packet, which is used by XMPP clients to discover version information
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * about the software running at another entity's JID.<p>
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * An example to discover the version of the server:
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <pre>
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * // Request the version from the server.
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Version versionRequest = new Version();
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * timeRequest.setType(IQ.Type.GET);
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * timeRequest.setTo("example.com");
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * // Create a packet collector to listen for a response.
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * PacketCollector collector = con.createPacketCollector(
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *                new PacketIDFilter(versionRequest.getPacketID()));
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * con.sendPacket(versionRequest);
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * // Wait up to 5 seconds for a result.
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * IQ result = (IQ)collector.nextResult(5000);
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * if (result != null && result.getType() == IQ.Type.RESULT) {
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *     Version versionResult = (Version)result;
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *     // Do something with result...
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * }</pre><p>
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class Version extends IQ {
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String name;
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String version;
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String os;
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the natural-language name of the software. This property will always be
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * present in a result.
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return the natural-language name of the software.
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getName() {
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return name;
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the natural-language name of the software. This message should only be
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * invoked when parsing the XML and setting the property to a Version instance.
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param name the natural-language name of the software.
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setName(String name) {
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.name = name;
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the specific version of the software. This property will always be
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * present in a result.
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return the specific version of the software.
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getVersion() {
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return version;
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the specific version of the software. This message should only be
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * invoked when parsing the XML and setting the property to a Version instance.
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param version the specific version of the software.
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setVersion(String version) {
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.version = version;
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the operating system of the queried entity. This property will always be
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * present in a result.
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return the operating system of the queried entity.
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getOs() {
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return os;
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the operating system of the queried entity. This message should only be
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * invoked when parsing the XML and setting the property to a Version instance.
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param os operating system of the queried entity.
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setOs(String os) {
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.os = os;
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getChildElementXML() {
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        StringBuilder buf = new StringBuilder();
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("<query xmlns=\"jabber:iq:version\">");
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (name != null) {
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<name>").append(name).append("</name>");
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (version != null) {
124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<version>").append(version).append("</version>");
125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (os != null) {
127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<os>").append(os).append("</os>");
128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("</query>");
130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return buf.toString();
131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
133