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.packet;
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Date;
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.util.StringUtils;
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A decorator for the {@link DelayInformation} class to transparently support
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * both the new <b>Delay Delivery</b> specification <a href="http://xmpp.org/extensions/xep-0203.html">XEP-0203</a> and
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the old one <a href="http://xmpp.org/extensions/xep-0091.html">XEP-0091</a>.
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Existing code can be backward compatible.
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Robin Collier
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class DelayInfo extends DelayInformation
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	DelayInformation wrappedInfo;
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Creates a new instance with given delay information.
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param delay the delay information
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public DelayInfo(DelayInformation delay)
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		super(delay.getStamp());
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		wrappedInfo = delay;
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public String getFrom()
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		return wrappedInfo.getFrom();
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public String getReason()
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		return wrappedInfo.getReason();
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public Date getStamp()
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		return wrappedInfo.getStamp();
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public void setFrom(String from)
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		wrappedInfo.setFrom(from);
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public void setReason(String reason)
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		wrappedInfo.setReason(reason);
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public String getElementName()
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		return "delay";
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public String getNamespace()
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	{
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		return "urn:xmpp:delay";
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	@Override
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String toXML() {
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        StringBuilder buf = new StringBuilder();
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append(
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                "\"");
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append(" stamp=\"");
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append(StringUtils.formatXEP0082Date(getStamp()));
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("\"");
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getFrom() != null && getFrom().length() > 0) {
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(" from=\"").append(getFrom()).append("\"");
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append(">");
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getReason() != null && getReason().length() > 0) {
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(getReason());
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("</").append(getElementName()).append(">");
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return buf.toString();
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
106