}); Stream<? extends DomainEventMessage<?>> stream = upcastResult.map(ir -> { SerializedMessage<?> serializedMessage = new SerializedMessage<>(ir.getMessageIdentifier(), new LazyDeserializingObject<>( ir::getData, ir.getType(), serializer), ir.getMetaData()); if (ir.getTrackingToken().isPresent()) { return new GenericTrackedDomainEventMessage<>(ir.getTrackingToken().get(), ir.getAggregateType().get(), ir.getAggregateIdentifier().get(), ir.getSequenceNumber().get(), serializedMessage, ir::getTimestamp); } else { return new GenericDomainEventMessage<>(ir.getAggregateType().get(), ir.getAggregateIdentifier().get(), ir.getSequenceNumber().get(), serializedMessage, ir::getTimestamp);
@Override @SuppressWarnings("unchecked") public SerializedObject<T> getData() { SerializedObject<?> serializedInput = converter.convert(source.getData(), requiredType); return new SimpleSerializedObject<>(upcastFunction.apply((T) serializedInput.getData()), requiredType, getType()); }
@Override public Instant getTimestamp() { return source.getTimestamp(); }
private static Stream<IntermediateEventRepresentation> upcastAndDeserialize( Stream<? extends EventData<?>> eventEntryStream, Serializer serializer, EventUpcaster upcasterChain, boolean skipUnknownTypes, Function<EventData<?>, IntermediateEventRepresentation> entryConverter) { Stream<IntermediateEventRepresentation> upcastResult = upcasterChain.upcast(eventEntryStream.map(entryConverter)); if (skipUnknownTypes) { upcastResult = upcastResult.map(ir -> { try { serializer.classForType(ir.getType()); return ir; } catch (UnknownSerializedTypeException e) { return ir.upcast(SerializedType.emptyType(), byte[].class, u -> EMPTY_BYTES, Function.identity()); } }); } return upcastResult; } }
@Override public LazyDeserializingObject<MetaData> getMetaData() { if (metaData == null) { metaData = new LazyDeserializingObject<>(metaDataUpcastFunction.apply(source.getMetaData().getObject())); } return metaData; } }
@Override public Optional<String> getAggregateType() { return source.getAggregateType(); }
@Override public String getMessageIdentifier() { return source.getMessageIdentifier(); }
@Override public Optional<Long> getSequenceNumber() { return source.getSequenceNumber(); }
@Override public Optional<TrackingToken> getTrackingToken() { return source.getTrackingToken(); }
@Override public Optional<String> getAggregateIdentifier() { return source.getAggregateIdentifier(); }
/** * Upcast the serialized payload of the event (leaving other aspects of the event the same). * * @param outputType The output type of the event after upcasting * @param expectedRepresentationType The type of the serialized payload required by the upcast function * @param upcastFunction The upcast function for the event's payload * @param <T> The expected payload type before and after upcasting * @return The intermediate representation of the event after upcasting */ default <T> IntermediateEventRepresentation upcastPayload(SerializedType outputType, Class<T> expectedRepresentationType, Function<T, T> upcastFunction) { return upcast(outputType, expectedRepresentationType, upcastFunction, Function.identity()); }
@Override public LazyDeserializingObject<MetaData> getMetaData() { if (metaData == null) { metaData = new LazyDeserializingObject<>(metaDataUpcastFunction.apply(source.getMetaData().getObject())); } return metaData; } }
@Override public Optional<String> getAggregateType() { return source.getAggregateType(); }
@Override public String getMessageIdentifier() { return source.getMessageIdentifier(); }
@Override public Optional<Long> getSequenceNumber() { return source.getSequenceNumber(); }
@Override public Optional<TrackingToken> getTrackingToken() { return source.getTrackingToken(); }
@Override public Optional<String> getAggregateIdentifier() { return source.getAggregateIdentifier(); }
/** * Upcast the serialized payload of the event (leaving other aspects of the event the same). * * @param outputType The output type of the event after upcasting * @param expectedRepresentationType The type of the serialized payload required by the upcast function * @param upcastFunction The upcast function for the event's payload * @param <T> The expected payload type before and after upcasting * @return The intermediate representation of the event after upcasting */ default <T> IntermediateEventRepresentation upcastPayload(SerializedType outputType, Class<T> expectedRepresentationType, Function<T, T> upcastFunction) { return upcast(outputType, expectedRepresentationType, upcastFunction, Function.identity()); }
entry -> new InitialEventRepresentation(entry, serializer)); return upcastResult.map(ir -> { SerializedMessage<?> serializedMessage = new SerializedMessage<>(ir.getMessageIdentifier(), new LazyDeserializingObject<>( ir::getData, ir.getType(), serializer), ir.getMetaData()); if (ir.getAggregateIdentifier().isPresent()) { return new GenericTrackedDomainEventMessage<>(ir.getTrackingToken().get(), ir.getAggregateType().orElse(null), ir.getAggregateIdentifier().get(), ir.getSequenceNumber().get(), serializedMessage, ir::getTimestamp); } else { return new GenericTrackedEventMessage<>(ir.getTrackingToken().get(), serializedMessage, ir::getTimestamp);
@Override public LazyDeserializingObject<MetaData> getMetaData() { if (metaData == null) { metaData = new LazyDeserializingObject<>(metaDataUpcastFunction.apply(source.getMetaData().getObject())); } return metaData; } }