|
86 | 86 | import org.eclipse.ditto.connectivity.service.messaging.validation.ConnectionValidator;
|
87 | 87 | import org.eclipse.ditto.connectivity.service.util.ConnectivityMdcEntryKey;
|
88 | 88 | import org.eclipse.ditto.edge.service.headers.DittoHeadersValidator;
|
| 89 | +import org.eclipse.ditto.edge.service.placeholders.EntityIdPlaceholder; |
| 90 | +import org.eclipse.ditto.edge.service.placeholders.FeaturePlaceholder; |
89 | 91 | import org.eclipse.ditto.edge.service.placeholders.ThingJsonPlaceholder;
|
| 92 | +import org.eclipse.ditto.edge.service.placeholders.ThingPlaceholder; |
90 | 93 | import org.eclipse.ditto.internal.models.signalenrichment.SignalEnrichmentFacade;
|
91 | 94 | import org.eclipse.ditto.internal.utils.config.ScopedConfig;
|
92 | 95 | import org.eclipse.ditto.internal.utils.pekko.controlflow.AbstractGraphActor;
|
|
99 | 102 | import org.eclipse.ditto.json.JsonPointer;
|
100 | 103 | import org.eclipse.ditto.json.JsonValue;
|
101 | 104 | import org.eclipse.ditto.placeholders.ExpressionResolver;
|
| 105 | +import org.eclipse.ditto.placeholders.HeadersPlaceholder; |
102 | 106 | import org.eclipse.ditto.placeholders.PipelineElement;
|
103 | 107 | import org.eclipse.ditto.placeholders.PlaceholderFactory;
|
104 | 108 | import org.eclipse.ditto.placeholders.PlaceholderResolver;
|
@@ -138,9 +142,13 @@ public final class OutboundMappingProcessorActor
|
138 | 142 |
|
139 | 143 | private static final DittoProtocolAdapter DITTO_PROTOCOL_ADAPTER = DittoProtocolAdapter.newInstance();
|
140 | 144 | private static final TopicPathPlaceholder TOPIC_PATH_PLACEHOLDER = TopicPathPlaceholder.getInstance();
|
| 145 | + private static final EntityIdPlaceholder ENTITY_ID_PLACEHOLDER = EntityIdPlaceholder.getInstance(); |
| 146 | + private static final ThingPlaceholder THING_PLACEHOLDER = ThingPlaceholder.getInstance(); |
| 147 | + private static final FeaturePlaceholder FEATURE_PLACEHOLDER = FeaturePlaceholder.getInstance(); |
141 | 148 | private static final ResourcePlaceholder RESOURCE_PLACEHOLDER = ResourcePlaceholder.getInstance();
|
142 | 149 | private static final TimePlaceholder TIME_PLACEHOLDER = TimePlaceholder.getInstance();
|
143 | 150 | private static final ThingJsonPlaceholder THING_JSON_PLACEHOLDER = ThingJsonPlaceholder.getInstance();
|
| 151 | + private static final HeadersPlaceholder HEADERS_PLACEHOLDER = PlaceholderFactory.newHeadersPlaceholder(); |
144 | 152 |
|
145 | 153 | private final ActorRef clientActor;
|
146 | 154 | private final Connection connection;
|
@@ -787,22 +795,33 @@ private Collection<OutboundSignalWithSender> applyFilter(final OutboundSignalWit
|
787 | 795 | final TopicPath topicPath = DITTO_PROTOCOL_ADAPTER.toTopicPath(signal);
|
788 | 796 | final PlaceholderResolver<TopicPath> topicPathPlaceholderResolver = PlaceholderFactory
|
789 | 797 | .newPlaceholderResolver(TOPIC_PATH_PLACEHOLDER, topicPath);
|
| 798 | + final PlaceholderResolver<EntityId> entityIdPlaceholderResolver = PlaceholderFactory |
| 799 | + .newPlaceholderResolver(ENTITY_ID_PLACEHOLDER, |
| 800 | + (signal instanceof WithEntityId withEntityId) ? withEntityId.getEntityId() : null); |
| 801 | + final PlaceholderResolver<EntityId> thingPlaceholderResolver = PlaceholderFactory |
| 802 | + .newPlaceholderResolver(THING_PLACEHOLDER, |
| 803 | + (signal instanceof WithEntityId withEntityId) ? withEntityId.getEntityId() : null); |
| 804 | + final PlaceholderResolver<Signal<?>> featurePlaceholderResolver = PlaceholderFactory |
| 805 | + .newPlaceholderResolver(FEATURE_PLACEHOLDER, signal); |
790 | 806 | final PlaceholderResolver<WithResource> resourcePlaceholderResolver = PlaceholderFactory
|
791 | 807 | .newPlaceholderResolver(RESOURCE_PLACEHOLDER, signal);
|
792 | 808 | final PlaceholderResolver<Object> timePlaceholderResolver = PlaceholderFactory
|
793 | 809 | .newPlaceholderResolver(TIME_PLACEHOLDER, new Object());
|
794 | 810 | final DittoHeaders dittoHeaders = signal.getDittoHeaders();
|
795 | 811 | final Criteria criteria = QueryFilterCriteriaFactory.modelBased(RqlPredicateParser.getInstance(),
|
796 |
| - topicPathPlaceholderResolver, resourcePlaceholderResolver, timePlaceholderResolver |
| 812 | + topicPathPlaceholderResolver, entityIdPlaceholderResolver, thingPlaceholderResolver, |
| 813 | + featurePlaceholderResolver, resourcePlaceholderResolver, timePlaceholderResolver |
797 | 814 | ).filterCriteria(filter.get(), dittoHeaders);
|
798 | 815 | return outboundSignalWithExtra.getExtra()
|
799 | 816 | .flatMap(extra -> ThingEventToThingConverter
|
800 | 817 | .mergeThingWithExtraFields(signal, extraFields.get(), extra)
|
801 | 818 | .filter(thing -> {
|
802 |
| - final PlaceholderResolver<Thing> thingPlaceholderResolver = PlaceholderFactory |
| 819 | + final PlaceholderResolver<Thing> thingJsonPlaceholderResolver = PlaceholderFactory |
803 | 820 | .newPlaceholderResolver(THING_JSON_PLACEHOLDER, thing);
|
804 | 821 | return ThingPredicateVisitor.apply(criteria, topicPathPlaceholderResolver,
|
805 |
| - resourcePlaceholderResolver, timePlaceholderResolver, thingPlaceholderResolver) |
| 822 | + entityIdPlaceholderResolver, thingPlaceholderResolver, |
| 823 | + featurePlaceholderResolver, resourcePlaceholderResolver, |
| 824 | + timePlaceholderResolver, thingJsonPlaceholderResolver) |
806 | 825 | .test(thing);
|
807 | 826 | })
|
808 | 827 | .map(thing -> outboundSignalWithExtra))
|
|
0 commit comments