/*
* JacORB - a free Java ORB
*
* Copyright (C) 1999-2014 Gerald Brose / The JacORB Team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
package org.jacorb.poa;
import org.jacorb.orb.dsi.ServerRequest;
import org.omg.PortableServer.Servant;
/**
* This class will manage an structure of a chain of poa event listeners
* and will dispatch events to those listeners.
*
* @version 1.01, 06/20/99, RT
*/
public class EventMulticaster
implements AOMListener, RequestQueueListener, RPPoolManagerListener, POAListener, EventListener {
protected EventListener one, two;
protected EventMulticaster(EventListener _one, EventListener _two) {
one = _one;
two = _two;
}
protected static AOMListener add(AOMListener _one, AOMListener _two) {
return (AOMListener) add_(_one, _two);
}
protected static POAListener add(POAListener _one, POAListener _two) {
return (POAListener) add_(_one, _two);
}
protected static RequestQueueListener add(RequestQueueListener _one, RequestQueueListener _two) {
return (RequestQueueListener) add_(_one, _two);
}
protected static RPPoolManagerListener add(RPPoolManagerListener _one, RPPoolManagerListener _two) {
return (RPPoolManagerListener) add_(_one, _two);
}
protected static EventListener add_(EventListener _one, EventListener _two) {
if (_one == null) return _two;
if (_two == null) return _one;
return new EventMulticaster(_one, _two);
}
public void objectActivated(byte[] oid, Servant servant, int size) {
((AOMListener)one).objectActivated(oid, servant, size);
((AOMListener)two).objectActivated(oid, servant, size);
}
public void objectDeactivated(byte[] oid, Servant servant, int size) {
((AOMListener)one).objectDeactivated(oid, servant, size);
((AOMListener)two).objectDeactivated(oid, servant, size);
}
public void poaCreated(POA poa) {
((POAListener)one).poaCreated(poa);
((POAListener)two).poaCreated(poa);
}
public void poaStateChanged(POA poa, int new_state) {
((POAListener)one).poaStateChanged(poa, new_state);
((POAListener)two).poaStateChanged(poa, new_state);
}
public void processorAddedToPool(RequestProcessor processor, int pool_count, int pool_size) {
((RPPoolManagerListener)one).processorAddedToPool(processor, pool_count, pool_size);
((RPPoolManagerListener)two).processorAddedToPool(processor, pool_count, pool_size);
}
public void processorRemovedFromPool(RequestProcessor processor, int pool_count, int pool_size) {
((RPPoolManagerListener)one).processorRemovedFromPool(processor, pool_count, pool_size);
((RPPoolManagerListener)two).processorRemovedFromPool(processor, pool_count, pool_size);
}
public void referenceCreated(org.omg.CORBA.Object object) {
((POAListener)one).referenceCreated(object);
((POAListener)two).referenceCreated(object);
}
protected static AOMListener remove(AOMListener l, AOMListener old) {
return (AOMListener) remove_(l, old);
}
protected EventListener remove(EventListener l) {
if (l == one) return two;
if (l == two) return one;
EventListener a = remove_(one, l);
EventListener b = remove_(two, l);
if (a == one && b == two) {
return this;
}
return add_(a, b);
}
protected static POAListener remove(POAListener l, POAListener old) {
return (POAListener) remove_(l, old);
}
protected static RequestQueueListener remove(RequestQueueListener l, RequestQueueListener old) {
return (RequestQueueListener) remove_(l, old);
}
protected static RPPoolManagerListener remove(RPPoolManagerListener l, RPPoolManagerListener old) {
return (RPPoolManagerListener) remove_(l, old);
}
protected static EventListener remove_(EventListener l, EventListener old) {
if (l == old || l == null) {
return null;
} else if (l instanceof EventMulticaster) {
return ((EventMulticaster) l).remove(old);
} else {
return l;
}
}
public void requestAddedToQueue(ServerRequest request, int queue_size) {
((RequestQueueListener)one).requestAddedToQueue(request, queue_size);
((RequestQueueListener)two).requestAddedToQueue(request, queue_size);
}
public void requestRemovedFromQueue(ServerRequest request, int queue_size) {
((RequestQueueListener)one).requestRemovedFromQueue(request, queue_size);
((RequestQueueListener)two).requestRemovedFromQueue(request, queue_size);
}
public void servantEtherialized(byte[] oid, Servant servant) {
((AOMListener)one).servantEtherialized(oid, servant);
((AOMListener)two).servantEtherialized(oid, servant);
}
public void servantIncarnated(byte[] oid, Servant servant) {
((AOMListener)one).servantIncarnated(oid, servant);
((AOMListener)two).servantIncarnated(oid, servant);
}
}