From c54b35c79c6ab69492ef4af6e2ce90abf7acb06d Mon Sep 17 00:00:00 2001 From: andsel Date: Fri, 3 Aug 2012 17:08:18 +0200 Subject: [PATCH] Introduced trivial tokenization of topic --- .../spi/impl/SubscriptionsStore.java | 42 ++++++++++++++++ .../spi/impl/SubscriptionsStoreTest.java | 50 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java diff --git a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java index 2f41b89f..6ea8a179 100644 --- a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java +++ b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java @@ -9,6 +9,39 @@ import java.util.List; * @author andrea */ public class SubscriptionsStore { + + protected static class Token { + + @Override + public int hashCode() { + int hash = 7; + hash = 29 * hash + (this.name != null ? this.name.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Token other = (Token) obj; + if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) { + return false; + } + return true; + } + String name; + protected Token(String s) { + name = s; + } + + protected String name() { + return name; + } + } private List subscriptions = new ArrayList(); @@ -36,4 +69,13 @@ public class SubscriptionsStore { public int size() { return subscriptions.size(); } + + protected List splitTopic(String topic) { + List res = new ArrayList(); + for (String s : topic.split("/")) { + res.add(new Token(s)); + } + + return res; + } } diff --git a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java new file mode 100644 index 00000000..82be8551 --- /dev/null +++ b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java @@ -0,0 +1,50 @@ +package org.dna.mqtt.moquette.messaging.spi.impl; + +import java.util.Arrays; +import java.util.List; +import org.dna.mqtt.moquette.messaging.spi.impl.SubscriptionsStore.Token; +import org.junit.Test; +import static org.junit.Assert.*; +import org.junit.Before; + +/** + * + * @author andrea + */ +public class SubscriptionsStoreTest { + + private SubscriptionsStore store; + + public SubscriptionsStoreTest() { + } + + @Before + public void setUp() { + store = new SubscriptionsStore(); + } + + @Test + public void testSplitTopic() { + List result = store.splitTopic("finance/stock/ibm"); + assertEqualsSeq(asArray("finance", "stock", "ibm"), result); + } + + private static Token[] asArray(Object... l) { + Token[] tokens = new Token[l.length]; + for (int i = 0; i < l.length; i++) { + Object o = l[i]; + if (o instanceof Token) { + tokens[i] = (Token)o; + } else { + tokens[i] = new Token(o.toString()); + } + } + + return tokens; + } + + private void assertEqualsSeq(Token[] exptected, List result) { + List expectedList = Arrays.asList(exptected); + assertEquals(expectedList, result); + } +}