1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2003-2007 Jive Software.
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License.
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *     http://www.apache.org/licenses/LICENSE-2.0
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS,
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License.
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smackx.workgroup.agent;
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smackx.workgroup.packet.AgentInfo;
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smackx.workgroup.packet.AgentWorkgroups;
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.PacketCollector;
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.SmackConfiguration;
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.Connection;
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.XMPPException;
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.filter.PacketIDFilter;
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.IQ;
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Collection;
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * The <code>Agent</code> class is used to represent one agent in a Workgroup Queue.
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Derek DeMoro
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class Agent {
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private Connection connection;
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String workgroupJID;
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static Collection<String> getWorkgroups(String serviceJID, String agentJID, Connection connection) throws XMPPException {
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        AgentWorkgroups request = new AgentWorkgroups(agentJID);
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        request.setTo(serviceJID);
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        PacketCollector collector = connection.createPacketCollector(new PacketIDFilter(request.getPacketID()));
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // Send the request
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        connection.sendPacket(request);
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        AgentWorkgroups response = (AgentWorkgroups)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // Cancel the collector.
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        collector.cancel();
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (response == null) {
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new XMPPException("No response from server on status set.");
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (response.getError() != null) {
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new XMPPException(response.getError());
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return response.getWorkgroups();
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Constructs an Agent.
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Agent(Connection connection, String workgroupJID) {
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.connection = connection;
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.workgroupJID = workgroupJID;
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Return the agents JID
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return - the agents JID.
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getUser() {
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return connection.getUser();
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Return the agents name.
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return - the agents name.
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getName() throws XMPPException {
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        AgentInfo agentInfo = new AgentInfo();
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setType(IQ.Type.GET);
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setTo(workgroupJID);
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setFrom(getUser());
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        PacketCollector collector = connection.createPacketCollector(new PacketIDFilter(agentInfo.getPacketID()));
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // Send the request
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        connection.sendPacket(agentInfo);
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        AgentInfo response = (AgentInfo)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // Cancel the collector.
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        collector.cancel();
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (response == null) {
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new XMPPException("No response from server on status set.");
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (response.getError() != null) {
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new XMPPException(response.getError());
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return response.getName();
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Changes the name of the agent in the server. The server may have this functionality
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * disabled for all the agents or for this agent in particular. If the agent is not
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * allowed to change his name then an exception will be thrown with a service_unavailable
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * error code.
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param newName the new name of the agent.
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @throws XMPPException if the agent is not allowed to change his name or no response was
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *                       obtained from the server.
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setName(String newName) throws XMPPException {
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        AgentInfo agentInfo = new AgentInfo();
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setType(IQ.Type.SET);
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setTo(workgroupJID);
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setFrom(getUser());
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        agentInfo.setName(newName);
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        PacketCollector collector = connection.createPacketCollector(new PacketIDFilter(agentInfo.getPacketID()));
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // Send the request
124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        connection.sendPacket(agentInfo);
125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        IQ response = (IQ)collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        // Cancel the collector.
129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        collector.cancel();
130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (response == null) {
131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new XMPPException("No response from server on status set.");
132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (response.getError() != null) {
134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new XMPPException(response.getError());
135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return;
137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
139