package org.jacorb.notification; /* * JacORB - a free Java ORB * * Copyright (C) 1997-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. */ import org.jacorb.config.*; import org.jacorb.notification.container.PicoContainerFactory; import org.jacorb.notification.servant.AbstractAdmin; import org.jacorb.notification.servant.AbstractSupplierAdmin; import org.jacorb.notification.servant.IEventChannel; import org.jacorb.notification.servant.ITypedEventChannel; import org.jacorb.notification.servant.TypedConsumerAdminImpl; import org.jacorb.notification.servant.TypedSupplierAdminImpl; import org.omg.CORBA.IntHolder; import org.omg.CORBA.ORB; import org.omg.CosNotifyChannelAdmin.AdminNotFound; import org.omg.CosNotifyChannelAdmin.EventChannel; import org.omg.CosNotifyChannelAdmin.InterFilterGroupOperator; import org.omg.CosNotifyFilter.FilterFactory; import org.omg.CosTypedNotifyChannelAdmin.TypedConsumerAdmin; import org.omg.CosTypedNotifyChannelAdmin.TypedConsumerAdminHelper; import org.omg.CosTypedNotifyChannelAdmin.TypedEventChannelFactory; import org.omg.CosTypedNotifyChannelAdmin.TypedEventChannelOperations; import org.omg.CosTypedNotifyChannelAdmin.TypedEventChannelPOATie; import org.omg.CosTypedNotifyChannelAdmin.TypedSupplierAdmin; import org.omg.CosTypedNotifyChannelAdmin.TypedSupplierAdminHelper; import org.omg.PortableServer.POA; import org.omg.PortableServer.Servant; import org.picocontainer.MutablePicoContainer; /** * @author Alphonse Bendt */ public class TypedEventChannelImpl extends AbstractEventChannel implements TypedEventChannelOperations, ITypedEventChannel { private final class TypedEventChannelAdapter implements IEventChannel { private final int adminID_; private final MutablePicoContainer childContainer_; private final String channelMBean_; private TypedEventChannelAdapter(MutablePicoContainer container, String channelMBean, int adminID) { super(); adminID_ = adminID; childContainer_ = container; channelMBean_ = channelMBean; } public int getAdminID() { return adminID_; } public int getChannelID() { return getID(); } public EventChannel getEventChannel() { return null; } public MutablePicoContainer getContainer() { return childContainer_; } public String getChannelMBean() { return channelMBean_; } public void destroy() { container_.removeChildContainer(childContainer_); } } private final TypedEventChannelFactory typedEventChannelFactory_; public TypedEventChannelImpl(IFactory factory, ORB orb, POA poa, Configuration config, FilterFactory filterFactory, TypedEventChannelFactory factoryRef) { super(factory, orb, poa, config, filterFactory); typedEventChannelFactory_ = factoryRef; } public TypedEventChannelFactory MyFactory() { return typedEventChannelFactory_; } public TypedConsumerAdmin default_consumer_admin() { return TypedConsumerAdminHelper.narrow(getDefaultConsumerAdminServant().activate()); } public TypedSupplierAdmin default_supplier_admin() { return TypedSupplierAdminHelper.narrow(getDefaultSupplierAdminServant().activate()); } public TypedConsumerAdmin new_for_typed_notification_consumers(InterFilterGroupOperator ifg, IntHolder intHolder) { AbstractAdmin _admin = new_for_consumers_servant(ifg, intHolder); return TypedConsumerAdminHelper.narrow(_admin.activate()); } public TypedSupplierAdmin new_for_typed_notification_suppliers(InterFilterGroupOperator ifg, IntHolder intHolder) { AbstractAdmin _admin = new_for_suppliers_servant(ifg, intHolder); return TypedSupplierAdminHelper.narrow(_admin.activate()); } public TypedConsumerAdmin get_consumeradmin(int id) throws AdminNotFound { return TypedConsumerAdminHelper.narrow(get_consumeradmin_internal(id).activate()); } public TypedSupplierAdmin get_supplieradmin(int id) throws AdminNotFound { return TypedSupplierAdminHelper.narrow(get_supplieradmin_internal(id).activate()); } public org.omg.CosTypedEventChannelAdmin.TypedConsumerAdmin for_consumers() { return org.omg.CosTypedEventChannelAdmin.TypedConsumerAdminHelper.narrow(default_consumer_admin()); } public org.omg.CosTypedEventChannelAdmin.TypedSupplierAdmin for_suppliers() { return org.omg.CosTypedEventChannelAdmin.TypedSupplierAdminHelper.narrow(default_supplier_admin()); } public Servant newServant() { return new TypedEventChannelPOATie(this); } public AbstractSupplierAdmin newSupplierAdmin(final int id) { final MutablePicoContainer _container = newContainerForAdmin(id); _container.registerComponentImplementation(AbstractSupplierAdmin.class, TypedSupplierAdminImpl.class); return (AbstractSupplierAdmin) _container.getComponentInstanceOfType(AbstractSupplierAdmin.class); } public AbstractAdmin newConsumerAdmin(final int id) { final MutablePicoContainer _container = newContainerForAdmin(id); _container.registerComponentImplementation(AbstractAdmin.class, TypedConsumerAdminImpl.class); return (AbstractAdmin) _container.getComponentInstanceOfType(AbstractAdmin.class); } private MutablePicoContainer newContainerForAdmin(final int id) { final MutablePicoContainer _container = PicoContainerFactory.createChildContainer(container_); _container.registerComponentInstance(new TypedEventChannelAdapter(_container, getJMXObjectName(), id)); return _container; } public String getMBeanType() { return "TypedEventChannel"; } /** * @jmx.managed-attribute access = "read-only" * currencyTimeLimit = "2147483647" */ public String getIOR() { return orb_.object_to_string(activate()); } }