@Override protected AggregateFactory<?> getAggregateFactory(Class<?> aggregateType) { AggregateFactory<?> aggregateFactory = super.getAggregateFactory(aggregateType); if (aggregateFactory == null) { Optional<AggregateFactory> factory = applicationContext.getBeansOfType(AggregateFactory.class).values().stream() .filter(af -> Objects.equals(af.getAggregateType(), aggregateType)) .findFirst(); if (!factory.isPresent()) { factory = applicationContext.getBeansOfType(EventSourcingRepository.class).values().stream() .map((Function<EventSourcingRepository, AggregateFactory>) EventSourcingRepository::getAggregateFactory) .filter(af -> Objects.equals(af.getAggregateType(), aggregateType)) .findFirst(); if (factory.isPresent()) { aggregateFactory = factory.get(); registerAggregateFactory(aggregateFactory); } } if (factory.isPresent()) { aggregateFactory = factory.get(); registerAggregateFactory(aggregateFactory); } } return aggregateFactory; }
/** * Initializes a {@link AggregateSnapshotter} as specified through this Builder. * * @return a {@link AggregateSnapshotter} as specified through this Builder */ public AggregateSnapshotter build() { return new AggregateSnapshotter(this); }
@SuppressWarnings("unchecked") @Override protected DomainEventMessage createSnapshot(Class<?> aggregateType, String aggregateIdentifier, DomainEventStream eventStream) { DomainEventMessage firstEvent = eventStream.peek(); AggregateFactory<?> aggregateFactory = getAggregateFactory(aggregateType); if (aggregateFactory == null) { throw new IllegalArgumentException( "Aggregate Type is unknown in this snapshotter: " + aggregateType.getName() ); } aggregateModels.computeIfAbsent(aggregateType, k -> AnnotatedAggregateMetaModelFactory .inspectAggregate(k, parameterResolverFactory, handlerDefinition)); Object aggregateRoot = aggregateFactory.createAggregateRoot(aggregateIdentifier, firstEvent); SnapshotAggregate<Object> aggregate = new SnapshotAggregate(aggregateRoot, aggregateModels.get(aggregateType), repositoryProvider); aggregate.initializeState(eventStream); if (aggregate.isDeleted()) { return null; } return new GenericDomainEventMessage<>(aggregate.type(), aggregate.identifierAsString(), aggregate.version(), aggregate.getAggregateRoot()); }
/** * Initializes a {@link AggregateSnapshotter} as specified through this Builder. * * @return a {@link AggregateSnapshotter} as specified through this Builder */ public AggregateSnapshotter build() { return new AggregateSnapshotter(this); }
@SuppressWarnings("unchecked") @Override protected DomainEventMessage createSnapshot(Class<?> aggregateType, String aggregateIdentifier, DomainEventStream eventStream) { DomainEventMessage firstEvent = eventStream.peek(); AggregateFactory<?> aggregateFactory = getAggregateFactory(aggregateType); if (aggregateFactory == null) { throw new IllegalArgumentException("Aggregate Type is unknown in this snapshotter: " + aggregateType.getName()); } aggregateModels.computeIfAbsent(aggregateType, k -> AnnotatedAggregateMetaModelFactory .inspectAggregate(k, parameterResolverFactory, handlerDefinition)); Object aggregateRoot = aggregateFactory.createAggregateRoot(aggregateIdentifier, firstEvent); SnapshotAggregate<Object> aggregate = new SnapshotAggregate(aggregateRoot, aggregateModels.get(aggregateType), repositoryProvider); aggregate.initializeState(eventStream); if (aggregate.isDeleted()) { return null; } return new GenericDomainEventMessage<>(aggregate.type(), aggregate.identifierAsString(), aggregate.version(), aggregate.getAggregateRoot()); }
@SuppressWarnings("unchecked") @Override protected DomainEventMessage createSnapshot(Class<?> aggregateType, String aggregateIdentifier, DomainEventStream eventStream) { DomainEventMessage firstEvent = eventStream.peek(); AggregateFactory<?> aggregateFactory = getAggregateFactory(aggregateType); if (aggregateFactory == null) { throw new IllegalArgumentException( "Aggregate Type is unknown in this snapshotter: " + aggregateType.getName() ); } aggregateModels.computeIfAbsent(aggregateType, k -> AnnotatedAggregateMetaModelFactory .inspectAggregate(k, parameterResolverFactory, handlerDefinition)); Object aggregateRoot = aggregateFactory.createAggregateRoot(aggregateIdentifier, firstEvent); SnapshotAggregate<Object> aggregate = new SnapshotAggregate(aggregateRoot, aggregateModels.get(aggregateType), repositoryProvider); aggregate.initializeState(eventStream); if (aggregate.isDeleted()) { return null; } return new GenericDomainEventMessage<>(aggregate.type(), aggregate.identifierAsString(), aggregate.version(), aggregate.getAggregateRoot()); }