private static Optional<Topic> topicFromSignal(final Signal<?> signal) { // only things as group supported final TopicPath.Group group = signal instanceof WithThingId ? TopicPath.Group.THINGS : null; final TopicPath.Channel channel = signal.getDittoHeaders() .getChannel() .flatMap(TopicPath.Channel::forName) .orElse(TopicPath.Channel.TWIN); final TopicPath.Criterion criterion = getCriterionOfSignal(signal); if (TopicPath.Group.THINGS.equals(group)) { if (TopicPath.Channel.TWIN.equals(channel)) { if (EVENTS.equals(criterion)) { return Optional.of(Topic.TWIN_EVENTS); } } else if (TopicPath.Channel.LIVE.equals(channel) && criterion != null) { switch (criterion) { case COMMANDS: return Optional.of(Topic.LIVE_COMMANDS); case EVENTS: return Optional.of(Topic.LIVE_EVENTS); case MESSAGES: return Optional.of(Topic.LIVE_MESSAGES); default: return Optional.empty(); } } } return Optional.empty(); }
private static Optional<Topic> topicFromSignal(final Signal<?> signal) { // only things as group supported final TopicPath.Group group = signal instanceof WithThingId ? TopicPath.Group.THINGS : null; final TopicPath.Channel channel = signal.getDittoHeaders() .getChannel() .flatMap(TopicPath.Channel::forName) .orElse(TopicPath.Channel.TWIN); final TopicPath.Criterion criterion = getCriterionOfSignal(signal); if (TopicPath.Group.THINGS.equals(group)) { if (TopicPath.Channel.TWIN.equals(channel)) { if (EVENTS.equals(criterion)) { return Optional.of(Topic.TWIN_EVENTS); } } else if (TopicPath.Channel.LIVE.equals(channel) && criterion != null) { switch (criterion) { case COMMANDS: return Optional.of(Topic.LIVE_COMMANDS); case EVENTS: return Optional.of(Topic.LIVE_EVENTS); case MESSAGES: return Optional.of(Topic.LIVE_MESSAGES); default: return Optional.empty(); } } } return Optional.empty(); }
@Override public Signal<?> fromAdaptable(final Adaptable adaptable) { final TopicPath topicPath = adaptable.getTopicPath(); if (TopicPath.Group.THINGS.equals(topicPath.getGroup())) { // /things final TopicPath.Channel channel = topicPath.getChannel(); if (channel.equals(TopicPath.Channel.LIVE)) { // /things/live return fromLiveAdaptable(adaptable); } else if (channel.equals(TopicPath.Channel.TWIN)) { // /things/twin return fromTwinAdaptable(adaptable); } } throw UnknownTopicPathException.newBuilder(topicPath).build(); }
@Override public Signal<?> fromAdaptable(final Adaptable adaptable) { final TopicPath topicPath = adaptable.getTopicPath(); if (TopicPath.Group.THINGS.equals(topicPath.getGroup())) { // /things final TopicPath.Channel channel = topicPath.getChannel(); if (channel.equals(TopicPath.Channel.LIVE)) { // /things/live return fromLiveAdaptable(adaptable); } else if (channel.equals(TopicPath.Channel.TWIN)) { // /things/twin return fromTwinAdaptable(adaptable); } } throw UnknownTopicPathException.newBuilder(topicPath).build(); }