added # filter topic handling
This commit is contained in:
parent
74d4f84a7d
commit
4babb07fd6
@ -34,10 +34,15 @@ public class MqttTopicFilterFactory {
|
|||||||
}
|
}
|
||||||
return filters.computeIfAbsent(topicFilter, filter -> {
|
return filters.computeIfAbsent(topicFilter, filter -> {
|
||||||
if (filter.contains("+") || filter.contains("#")) {
|
if (filter.contains("+") || filter.contains("#")) {
|
||||||
String regex = filter
|
String regex;
|
||||||
|
if (filter.equals("#")) {
|
||||||
|
regex = filter.replace("#", "^(?!/).+");
|
||||||
|
} else {
|
||||||
|
regex = filter
|
||||||
.replace("\\", "\\\\")
|
.replace("\\", "\\\\")
|
||||||
.replace("+", "[^/]+")
|
.replace("+", "[^/]+")
|
||||||
.replace("/#", "($|/.*)");
|
.replace("/#", "($|/.*)");
|
||||||
|
}
|
||||||
log.debug("Converting [{}] to [{}]", filter, regex);
|
log.debug("Converting [{}] to [{}]", filter, regex);
|
||||||
return new RegexTopicFilter(regex);
|
return new RegexTopicFilter(regex);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.runners.MockitoJUnitRunner;
|
import org.mockito.runners.MockitoJUnitRunner;
|
||||||
|
|
||||||
import javax.script.ScriptException;
|
import javax.script.ScriptException;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@ -32,6 +31,9 @@ public class MqttTopicFilterFactoryTest {
|
|||||||
private static String TEST_STR_2 = "Sensor/Temperature";
|
private static String TEST_STR_2 = "Sensor/Temperature";
|
||||||
private static String TEST_STR_3 = "Sensor/Temperature2/House/48";
|
private static String TEST_STR_3 = "Sensor/Temperature2/House/48";
|
||||||
|
|
||||||
|
private static String TEST_STR_4 = String.format("%s%n%s", "/Sensor/Temperature", "/House/48");
|
||||||
|
private static String TEST_STR_5 = "/" + TEST_STR_1;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void metadataCanBeUpdated() throws ScriptException {
|
public void metadataCanBeUpdated() throws ScriptException {
|
||||||
MqttTopicFilter filter = MqttTopicFilterFactory.toFilter("Sensor/Temperature/House/+");
|
MqttTopicFilter filter = MqttTopicFilterFactory.toFilter("Sensor/Temperature/House/+");
|
||||||
@ -51,6 +53,13 @@ public class MqttTopicFilterFactoryTest {
|
|||||||
assertTrue(filter.filter(TEST_STR_1));
|
assertTrue(filter.filter(TEST_STR_1));
|
||||||
assertTrue(filter.filter(TEST_STR_2));
|
assertTrue(filter.filter(TEST_STR_2));
|
||||||
assertFalse(filter.filter(TEST_STR_3));
|
assertFalse(filter.filter(TEST_STR_3));
|
||||||
|
|
||||||
|
filter = MqttTopicFilterFactory.toFilter("#");
|
||||||
|
assertTrue(filter.filter(TEST_STR_1));
|
||||||
|
assertTrue(filter.filter(TEST_STR_2));
|
||||||
|
assertTrue(filter.filter(TEST_STR_3));
|
||||||
|
assertFalse(filter.filter(TEST_STR_4));
|
||||||
|
assertFalse(filter.filter(TEST_STR_5));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user