/***********************************************************************************
*
* Copyright (c) 2014 Kamil Baczkowicz
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*
* Kamil Baczkowicz - initial API and implementation and/or initial documentation
*
*/
package pl.baczkowicz.mqttspy.connectivity.topicmatching;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.moquette.spi.ISessionsStore;
import org.eclipse.moquette.spi.impl.subscriptions.Subscription;
/**
* Simple implementation of the ISessionsStore as required by moquette.
*/
public class MapBasedSubscriptionStore implements ISessionsStore
{
/** List of subscriptions. */
private final Map<String, List<Subscription>> subscriptions = new HashMap<String, List<Subscription>>();
@Override
public void wipeSubscriptions(final String clientID)
{
subscriptions.remove(clientID);
}
@Override
public List<Subscription> listAllSubscriptions()
{
List<Subscription> list = new ArrayList<Subscription>();
for (final List<Subscription>clientSubscriptions : subscriptions.values())
{
list.addAll(clientSubscriptions);
}
return list;
}
/**
* Add a new subscription to the session.
*/
@Override
public void addNewSubscription(final Subscription newSubscription)
{
final String clientID = newSubscription.getClientId();
List<Subscription> clientSubscriptions = subscriptions.get(clientID);
if (clientSubscriptions == null)
{
clientSubscriptions = new ArrayList<Subscription>();
subscriptions.put(clientID, clientSubscriptions);
}
clientSubscriptions.add(newSubscription);
}
/**
* @return true if there are subscriptions persisted with clientID.
*/
@Override
public boolean contains(final String clientID)
{
return subscriptions.containsKey(clientID);
}
/**
* Remove a specific subscription.
*/
@Override
public void removeSubscription(final String topic, final String clientID)
{
final List<Subscription> clientSubscriptions = subscriptions.get(clientID);
if (clientSubscriptions != null)
{
clientSubscriptions.remove(topic);
}
}
@Override
public void updateSubscriptions(final String clientID, final Set<Subscription> subscriptions)
{
// Not used
}
}