/** * @return whether this FilteredTopic has a filter to apply or not */ default boolean hasFilter() { return getFilter().isPresent(); }
private static Predicate<FilteredTopic> applyNamespaceFilter(final WithId signal) { return t -> t.getNamespaces().isEmpty() || t.getNamespaces().contains(namespaceFromId(signal)); }
@Test public void fromStringParsesAsExpectedWithOnlyFilter() { final String filterTopicString = "_/_/things/live/events?filter=" + FILTER_EXAMPLE; final FilteredTopic filteredTopic = ImmutableFilteredTopic.fromString(filterTopicString); assertThat(filteredTopic.getNamespaces()).isEmpty(); assertThat(filteredTopic.getTopic()).isEqualTo(Topic.LIVE_EVENTS); assertThat(filteredTopic.getFilter()).contains(FILTER_EXAMPLE); }
@Test public void fromStringParsesAsExpectedWithOnlyNamespace() { final List<String> namespaces = Arrays.asList("this.is.a.namespace", "eat.that", "foo.bar"); final String filterTopicString = "_/_/things/live/commands?namespaces=" + String.join(",", namespaces); final FilteredTopic filteredTopic = ImmutableFilteredTopic.fromString(filterTopicString); assertThat(filteredTopic.getNamespaces()).isEqualTo(namespaces); assertThat(filteredTopic.getTopic()).isEqualTo(Topic.LIVE_COMMANDS); }
private static Predicate<FilteredTopic> applyTopicFilter(final Signal<?> signal) { return t -> t.getTopic().equals(topicFromSignal(signal).orElse(null)); }
@Test public void toStringReturnsExpectedWithFilterAndNamespaces() { final List<String> namespaces = Arrays.asList("foo", "bar"); final FilteredTopic filteredTopic = ImmutableFilteredTopic.of(Topic.TWIN_EVENTS, namespaces, FILTER_EXAMPLE); final String actual = filteredTopic.toString(); assertThat(actual).isEqualTo( "_/_/things/twin/events?namespaces=" + String.join(",", namespaces) + "&filter=" + FILTER_EXAMPLE); }
@Test public void fromStringParsesAsExpected() { final String filterTopicString = "_/_/things/twin/events"; final FilteredTopic filteredTopic = ImmutableFilteredTopic.fromString(filterTopicString); assertThat(filteredTopic.getNamespaces()).isEmpty(); assertThat(filteredTopic.getTopic()).isEqualTo(Topic.TWIN_EVENTS); assertThat(filteredTopic.getFilter()).isEmpty(); }
private static Predicate<FilteredTopic> applyTopicFilter(final Signal<?> signal) { return t -> t.getTopic().equals(topicFromSignal(signal).orElse(null)); }
@Test public void toStringReturnsExpectedWithOnlyNamespace() { final List<String> namespaces = Arrays.asList("this.is.a.namespace", "eat.that", "foo.bar"); final FilteredTopic filteredTopic = ImmutableFilteredTopic.of(Topic.LIVE_MESSAGES, namespaces, null); final String actual = filteredTopic.toString(); assertThat(actual).isEqualTo("_/_/things/live/messages?namespaces=" + String.join(",", namespaces)); }
@Test public void fromStringParsesAsExpectedWithFilterAndNamespaces() { final String filterTopicString = "_/_/things/twin/events?namespaces=foo,bar&filter=" + FILTER_EXAMPLE; final FilteredTopic filteredTopic = ImmutableFilteredTopic.fromString(filterTopicString); assertThat(filteredTopic.getNamespaces()).isEqualTo(Arrays.asList("foo", "bar")); assertThat(filteredTopic.getTopic()).isEqualTo(Topic.TWIN_EVENTS); assertThat(filteredTopic.getFilter()).contains(FILTER_EXAMPLE); }
/** * @return whether this FilteredTopic has a filter to apply or not */ default boolean hasFilter() { return getFilter().isPresent(); }
private static Predicate<FilteredTopic> applyNamespaceFilter(final WithId signal) { return t -> t.getNamespaces().isEmpty() || t.getNamespaces().contains(namespaceFromId(signal)); }
@Test public void toStringReturnsExpected() { final FilteredTopic filteredTopic = ImmutableFilteredTopic.of(Topic.TWIN_EVENTS, Collections.emptyList(), null); final String actual = filteredTopic.toString(); assertThat(actual).isEqualTo("_/_/things/twin/events"); }
private void validateSourceAndTargetAddressesAreNonempty(final Connection connection, final DittoHeaders dittoHeaders) { connection.getSources().forEach(source -> { if (source.getAddresses().isEmpty() || source.getAddresses().contains("")) { final String location = String.format("Source %d of connection <%s>", source.getIndex(), connection.getId()); throw emptyAddressesError(location, dittoHeaders); } }); connection.getTargets().forEach(target -> { if (target.getAddress().isEmpty()) { final String location = String.format("Targets of connection <%s>", connection.getId()); throw emptyAddressesError(location, dittoHeaders); } target.getTopics().forEach(topic -> topic.getFilter().ifPresent(filter -> { // will throw an InvalidRqlExpressionException if the RQL expression was not valid: queryFilterCriteriaFactory.filterCriteria(filter, dittoHeaders); })); }); }
@Test public void toStringReturnsExpectedWithOnlyFilter() { final FilteredTopic filteredTopic = ImmutableFilteredTopic.of(Topic.TWIN_EVENTS, Collections.emptyList(), FILTER_EXAMPLE); final String actual = filteredTopic.toString(); assertThat(actual).isEqualTo("_/_/things/twin/events?filter=" + FILTER_EXAMPLE); }
private void validateSourceAndTargetAddressesAreNonempty(final Connection connection, final DittoHeaders dittoHeaders) { connection.getSources().forEach(source -> { if (source.getAddresses().isEmpty() || source.getAddresses().contains("")) { final String location = String.format("Source %d of connection <%s>", source.getIndex(), connection.getId()); throw emptyAddressesError(location, dittoHeaders); } }); connection.getTargets().forEach(target -> { if (target.getAddress().isEmpty()) { final String location = String.format("Targets of connection <%s>", connection.getId()); throw emptyAddressesError(location, dittoHeaders); } target.getTopics().forEach(topic -> topic.getFilter().ifPresent(filter -> { // will throw an InvalidRqlExpressionException if the RQL expression was not valid: queryFilterCriteriaFactory.filterCriteria(filter, dittoHeaders); })); }); }