/* * Copyright (C) 2004-2008 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.routing; import org.jivesoftware.xmpp.workgroup.Workgroup; import org.jivesoftware.xmpp.workgroup.request.UserRequest; /** * Routers take incoming user chat requests and routes them to the 'best' workgroup * request queue. A single router handles all chat requests in a workgroup. You can * change the workgroup request queue routing behavior by implementing and installing * your own, custom router. * * @author Derek DeMoro */ public abstract class RequestRouter { private long routingQueue = -1; /** * Empty constructor */ protected RequestRouter() { } /** * Returns the ID of the Queue to route to if this Router evalutes to true. * * @return the queue id to route to. */ public long getRoutingQueue() { return routingQueue; } /** * Sets the ID of the Queue to route to when this router evalutes to true. * * @param routingQueue the ID of the Queue to route to. */ public void setRoutingQueue(long routingQueue) { this.routingQueue = routingQueue; } /** * Returns true if the admin select the queue to route to, otherwise false to * only have the Router select the queue itself. By default, this returns true. * * @return true if the Queue can be selected via admin. */ public boolean isConfigurable() { return true; } /** * Route the given request to one of the workgroup's request queues. * This method will never be called concurrently. Implementations * should feel free to sleep(), block, or otherwise take their time in making * sure the routing happens properly. Routers may be chained by calling * several in sequence and stopping when the first router returns true. * * @param workgroup The workgroup the request belongs to * @param request The request being routed * @return True if the router was able to route the request */ public abstract boolean handleRequest(Workgroup workgroup, UserRequest request); }