/** * Initiates a new AnnotatedChildEntity instance that uses the provided {@code entityModel} to delegate command * and event handling to an annotated child entity. * * @param entityModel A {@link EntityModel} describing the entity. * @param forwardCommands Flag indicating whether commands should be forwarded to the entity. * @param commandTargetResolver Resolver for command handler methods on the target. * @param eventTargetResolver Resolver for event handler methods on the target. */ @SuppressWarnings("unchecked") public AnnotatedChildEntity(EntityModel<C> entityModel, boolean forwardCommands, BiFunction<CommandMessage<?>, P, C> commandTargetResolver, BiFunction<EventMessage<?>, P, Stream<C>> eventTargetResolver) { this.entityModel = entityModel; this.eventTargetResolver = eventTargetResolver; this.commandHandlers = new ArrayList<>(); if (forwardCommands) { entityModel.commandHandlers() .stream() .filter(eh -> eh.unwrap(CommandMessageHandlingMember.class).isPresent()) .forEach( (childHandler) -> commandHandlers .add(new ChildForwardingCommandMessageHandlingMember<>( entityModel.commandHandlerInterceptors(), childHandler, commandTargetResolver))); } }
/** * Initiates a new AnnotatedChildEntity instance that uses the provided {@code entityModel} to delegate command * and event handling to an annotated child entity. * * @param entityModel A {@link EntityModel} describing the entity. * @param forwardCommands Flag indicating whether commands should be forwarded to the entity. * @param commandTargetResolver Resolver for command handler methods on the target. * @param eventTargetResolver Resolver for event handler methods on the target. */ @SuppressWarnings("unchecked") public AnnotatedChildEntity(EntityModel<C> entityModel, boolean forwardCommands, BiFunction<CommandMessage<?>, P, C> commandTargetResolver, BiFunction<EventMessage<?>, P, Stream<C>> eventTargetResolver) { this.entityModel = entityModel; this.eventTargetResolver = eventTargetResolver; this.commandHandlers = new ArrayList<>(); if (forwardCommands) { entityModel.commandHandlers() .stream() .filter(eh -> eh.unwrap(CommandMessageHandlingMember.class).isPresent()) .forEach( (childHandler) -> commandHandlers .add(new ChildForwardingCommandMessageHandlingMember<>( entityModel.commandHandlerInterceptors(), childHandler, commandTargetResolver))); } }