Name |
---|
com::wombat::mama |
Name | |
---|---|
class | com::wombat::mama::MamaDQPublisherManager |
class | com::wombat::mama::MamaDQPublisherManager::MamaPublishTopic |
/* $Id:
*
* OpenMAMA: The open middleware agnostic messaging API
* Copyright (C) 2011 NYSE Technologies, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
package com.wombat.mama;
import java.util.ArrayList;
import java.util.Iterator;
public class MamaDQPublisherManager
{
/*A long value containing a pointer to the underlying C publisher manager structure*/
private long dqpublisherManagerPointer_i = 0;
private static final ArrayList myTopics = new ArrayList();
static
{
initIDs();
}
public void create (MamaTransport transport,
MamaQueue queue,
MamaDQPublisherManagerCallback callback,
String source)
{
_create (transport, queue, callback, source, "_MD");
}
public void create (MamaTransport transport,
MamaQueue queue,
MamaDQPublisherManagerCallback callback,
String source,
String root)
{
_create (transport, queue, callback, source, root);
}
public void destroy()
{
checkIsCreated("destroy");
_destroy();
}
// Probably needs to be more defensive in terms of dealing with nulls
public void addPublisher (String symbol,
MamaDQPublisher publisher,
MamaSubscriptionCallback cache)
{
checkIsCreated("addPublisher");
_addPublisher(symbol, publisher, cache);
}
public MamaDQPublisher removePublisher (String symbol)
{
checkIsCreated("removePublisher");
return _removePublisher(symbol);
}
public void destroyPublisher (String symbol)
{
checkIsCreated("destroyPublisher");
_destroyPublisher(symbol);
}
// Probably needs to be more defensive in terms of dealing with nulls
public MamaDQPublisher createPublisher (String symbol, Object cache)
{
checkIsCreated("createPublisher");
MamaDQPublisher myPub = new MamaDQPublisher();
MamaPublishTopic myTopic = new MamaPublishTopic(symbol, myPub, cache);
_createPublisher (symbol, myPub, myTopic);
myPub.setCache(cache);
myTopics.add (myTopic);
return myPub;
}
public void setStatus (int status)
{
checkIsCreated("setStatus");
_setStatus(status);
}
public void setSeqNum (long seqNum)
{
checkIsCreated("setSeqNum");
_setSeqNum(seqNum);
}
public void setSenderId (long id)
{
checkIsCreated("setSenderId");
_setSenderId(id);
}
public void sendSyncRequest (int numMsg, double delay, double duration)
{
checkIsCreated("sendSyncRequest");
_sendSyncRequest(numMsg, delay, duration);
}
public void sendNoSubscribers (String symbol)
{
checkIsCreated("sendSyncRequest");
_sendNoSubscribers(symbol);
}
private native void _create (MamaTransport transport,
MamaQueue queue,
MamaDQPublisherManagerCallback callback,
String source,
String root);
private native void _destroy ();
private native void _addPublisher (String symbol,
MamaDQPublisher publisher,
Object cache);
private native MamaDQPublisher _removePublisher (String symbol);
private native void _destroyPublisher (String symbol);
private native MamaDQPublisher _createPublisher (String symbol, MamaDQPublisher pub, Object cache);
private native void _setStatus (int status);
private native void _setSeqNum (long seqNum);
private native void _setSenderId (long id);
private native void _sendSyncRequest (int numMsg, double delay, double duration);
private native void _sendNoSubscribers (String symbol);
private static native void initIDs ();
private void checkIsCreated (String invokingMethod)
{
if (0 == dqpublisherManagerPointer_i)
{
throw new MamaException("Cannot call " + invokingMethod +
"before invoking create()");
}
}
public static class MamaPublishTopic
{
private final MamaDQPublisher dqPublisher;
private final String symbol;
private final Object cache;
public MamaPublishTopic (String symbol,
MamaDQPublisher dqPublisher,
Object cache)
{
this.dqPublisher = dqPublisher;
this.cache = cache;
this.symbol = symbol;
}
public MamaDQPublisher getPublisher()
{
return dqPublisher;
}
public Object getCache()
{
return cache;
}
public String getSymbol()
{
return symbol;
}
}
public static Object getCache(String symbol)
{
Iterator it = myTopics.iterator();
while(it.hasNext())
{
MamaPublishTopic myTopic = (MamaPublishTopic) it.next();
if (myTopic.getSymbol().equals(symbol))
return myTopic.getCache();
}
return null;
}
public static MamaDQPublisher getPublisher(String symbol)
{
Iterator it = myTopics.iterator();
while(it.hasNext())
{
MamaPublishTopic myTopic = (MamaPublishTopic) it.next();
if (myTopic.getSymbol().equals(symbol))
return myTopic.getPublisher();
}
return null;
}
}
Updated on 2023-03-31 at 15:29:45 +0100