/* * Copyright (C) 2004-2006 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.xmpp.workgroup.spi; import org.jivesoftware.xmpp.workgroup.UserCommunicationMethod; import org.jivesoftware.xmpp.workgroup.request.Request; import org.jivesoftware.xmpp.workgroup.request.UserRequest; import org.dom4j.Element; import org.xmpp.packet.IQ; import org.xmpp.packet.JID; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; /** * This communication method will be used when a user is using a client that supports the * Workgroup JEP. Most probably the user is using the LA's web client. If the Workgroup * JEP is implemented by standard XMPP clients then this class will be used too.<p> * * Only one instance of this class will exist for all the users since no state is stored for * each user session. * * @author Gaston Dombiak */ public class WorkgroupCompatibleClient implements UserCommunicationMethod { private static WorkgroupCompatibleClient instance = new WorkgroupCompatibleClient(); /** * Returns the unique instance of this class. * * @return the unique instance of this class. */ public static UserCommunicationMethod getInstance() { return instance; } /** * Hide the default constructor so there could only be one instance of this class */ private WorkgroupCompatibleClient() { super(); } public void notifyQueueStatus(JID sender, JID receiver, UserRequest request, boolean isPolling) { Packet statusPacket; if (isPolling) { statusPacket = new IQ(); } else { statusPacket = new Message(); } statusPacket.setFrom(sender); statusPacket.setTo(receiver); // Add Queue Status Packet to IQ Element status = statusPacket.getElement().addElement("queue-status", "http://jabber.org/protocol/workgroup"); // Add Time Element Element time = status.addElement("time"); time.setText(Integer.toString(request.getTimeStatus())); // Add Position Element Element position = status.addElement("position"); position.setText(Integer.toString(request.getPosition() + 1)); status.add(request.getSessionElement()); // Send the queue status request.getWorkgroup().send(statusPacket); } public void notifyQueueDepartued(JID sender, JID receiver, UserRequest request, Request.CancelType type) { Message message = new Message(); if (sender != null) { message.setFrom(sender); } message.setTo(receiver); Element depart = message.getElement().addElement("depart-queue", "http://jabber.org/protocol/workgroup"); // Add an element that explains the reason why the user is being removed from the queue depart.addElement(type.getDescription()); // Send the notification request.getWorkgroup().send(message); } public void invitationsSent(UserRequest request) { //Do nothing } public void checkInvitation(UserRequest request) { // Send a new invitation to the user request.getWorkgroup().sendUserInvitiation(request, request.getInvitedRoomID()); } public void supportStarted(UserRequest request) { //Do nothing } public void supportEnded(UserRequest request) { //Do nothing } }