diff options
Diffstat (limited to 'plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java')
-rw-r--r-- | plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java new file mode 100644 index 00000000000..630edfa3661 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.framework.messaging.internal.old; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import org.eclipse.osee.framework.messaging.EndpointSend; +import org.eclipse.osee.framework.messaging.id.MessageId; +import org.eclipse.osee.framework.messaging.id.ProtocolId; + +/** + * @author Andrew M. Finkbeiner + */ +public class EndpointSendCollection { + + private final List<EndpointSend> endpoints; + private Map<ProtocolId, EndpointSend> protocolMapping; + private Map<MessageId, ProtocolId> messageIdMapping; + + public EndpointSendCollection() { + endpoints = new CopyOnWriteArrayList<EndpointSend>(); + protocolMapping = new ConcurrentHashMap<ProtocolId, EndpointSend>(); + messageIdMapping = new ConcurrentHashMap<MessageId, ProtocolId>(); + } + + public synchronized boolean add(EndpointSend endpoint) { + if (endpoints.contains(endpoint)) { + return false; + } else { + return endpoints.add(endpoint); + } + } + + public synchronized boolean remove(EndpointSend endpoint) { + if (endpoints.remove(endpoint)) { + List<ProtocolId> protocolIdsToRemove = new ArrayList<ProtocolId>(); + Iterator<ProtocolId> it = protocolMapping.keySet().iterator(); + while (it.hasNext()) { + ProtocolId id = it.next(); + if (protocolMapping.get(id).equals(endpoint)) { + it.remove(); + protocolIdsToRemove.add(id); + } + } + for (ProtocolId id : protocolIdsToRemove) { + removeProtocolId(id); + } + return true; + } + return false; + } + + public synchronized boolean bind(ProtocolId protocolId, EndpointSend endpoint) { + if (protocolMapping.containsKey(protocolId)) { + return false; + } else { + protocolMapping.put(protocolId, endpoint); + return true; + } + } + + public synchronized boolean unbind(ProtocolId protocolId, EndpointSend endpoint) { + if (protocolMapping.containsKey(protocolId)) { + protocolMapping.remove(protocolId); + + removeProtocolId(protocolId); + + return true; + } else { + return false; + } + } + + private void removeProtocolId(ProtocolId protocolId) { + Iterator<MessageId> it = messageIdMapping.keySet().iterator(); + while (it.hasNext()) { + MessageId id = it.next(); + if (messageIdMapping.get(id).equals(protocolId)) { + it.remove(); + } + } + } + + public synchronized boolean bind(MessageId messageId, ProtocolId protocolId) { + if (messageIdMapping.containsKey(messageId)) { + return false; + } else { + messageIdMapping.put(messageId, protocolId); + return true; + } + } + + public synchronized boolean unbind(MessageId messageId, ProtocolId protocolId) { + if (messageIdMapping.containsKey(messageId)) { + messageIdMapping.remove(messageId); + return true; + } else { + return false; + } + } + + public synchronized Collection<EndpointSend> getAll() { + return endpoints; + } + + public synchronized void dispose() { + endpoints.clear(); + protocolMapping.clear(); + messageIdMapping.clear(); + } + + public synchronized EndpointSend get(MessageId id) { + ProtocolId protocolId = messageIdMapping.get(id); + if (protocolId != null) { + EndpointSend send = protocolMapping.get(protocolId); + if (send != null) { + return send; + } + } + return null; + } +} |