package org.jacorb.test.notification; import java.util.ArrayList; import java.util.List; import org.jacorb.test.notification.common.NotificationTestCase; import org.junit.Assert; import org.omg.CORBA.IntHolder; import org.omg.CORBA.ORB; import org.omg.CosEventChannelAdmin.AlreadyConnected; import org.omg.CosEventComm.Disconnected; import org.omg.CosNotification.EventType; import org.omg.CosNotification.StructuredEvent; import org.omg.CosNotifyChannelAdmin.AdminLimitExceeded; import org.omg.CosNotifyChannelAdmin.AdminNotFound; import org.omg.CosNotifyChannelAdmin.ClientType; import org.omg.CosNotifyChannelAdmin.EventChannel; import org.omg.CosNotifyChannelAdmin.ProxyType; import org.omg.CosNotifyChannelAdmin.StructuredProxyPushConsumer; import org.omg.CosNotifyChannelAdmin.StructuredProxyPushConsumerHelper; import org.omg.CosNotifyChannelAdmin.SupplierAdmin; import org.omg.CosNotifyComm.InvalidEventType; import org.omg.CosNotifyComm.StructuredPushSupplier; import org.omg.CosNotifyComm.StructuredPushSupplierOperations; import org.omg.CosNotifyComm.StructuredPushSupplierPOATie; public class StructuredPushSender extends Thread implements StructuredPushSupplierOperations, TestClientOperations { public StructuredProxyPushConsumer pushConsumer_; StructuredEvent[] events_; boolean error_ = false; boolean connected_; boolean eventSent_; long interval_ = 0; NotificationTestCase testCase_; List addedSubscriptions_ = new ArrayList(); List removedSubscriptions_ = new ArrayList(); final ORB orb_; public StructuredPushSender(ORB orb) { orb_ = orb; } public boolean isConnected() { return connected_; } public boolean isEventHandled() { return eventSent_; } public boolean isError() { return error_; } public void run() { runOnEventArray(); eventSent_ = true; } private void runOnEventArray() { try { pushEvents(events_); } catch (Disconnected e) { Assert.fail(); } } public void pushEvents(final StructuredEvent[] events) throws Disconnected { for (int x = 0; x < events.length; ++x) { pushConsumer_.push_structured_event(events[x]); } } public void disconnect_structured_push_supplier() { connected_ = false; } public void subscription_change(EventType[] added, EventType[] removed) throws InvalidEventType { for (int x = 0; x < added.length; ++x) { addedSubscriptions_.add(added[x]); } for (int x = 0; x < removed.length; ++x) { removedSubscriptions_.add(removed[x]); } } public void connect(EventChannel channel, boolean useOrSemantic) throws AdminLimitExceeded, AlreadyConnected, AdminNotFound { Assert.assertNotNull(channel); StructuredPushSupplierPOATie senderTie = new StructuredPushSupplierPOATie(this); StructuredPushSupplier sender = senderTie._this(orb_); SupplierAdmin supplierAdmin = channel.default_supplier_admin(); Assert.assertNotNull(supplierAdmin); Assert.assertEquals(supplierAdmin, channel.get_supplieradmin(supplierAdmin.MyID())); IntHolder _proxyIdHolder = new IntHolder(); pushConsumer_ = StructuredProxyPushConsumerHelper.narrow(supplierAdmin .obtain_notification_push_consumer(ClientType.STRUCTURED_EVENT, _proxyIdHolder)); Assert.assertEquals(pushConsumer_.MyType(), ProxyType.PUSH_STRUCTURED); pushConsumer_.connect_structured_push_supplier(sender); connected_ = true; } public void shutdown() { pushConsumer_.disconnect_structured_push_consumer(); } public void setStructuredEvent(StructuredEvent[] events) { events_ = events; } public void setStructuredEvent(StructuredEvent events) { setStructuredEvent(new StructuredEvent[] { events }); } public void setInterval(long interval) { interval_ = interval; } }