io.vlingo.lattice.model.projection.BinaryProjectionDispatcherActor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vlingo-lattice Show documentation
Show all versions of vlingo-lattice Show documentation
Tooling for reactive Domain-Driven Design projects that are highly concurrent. Includes compute grid, actor caching, spaces, cross-node cluster messaging, CQRS, and Event Sourcing support.
// Copyright © 2012-2020 VLINGO LABS. All rights reserved.
//
// This Source Code Form is subject to the terms of the
// Mozilla Public License, v. 2.0. If a copy of the MPL
// was not distributed with this file, You can obtain
// one at https://mozilla.org/MPL/2.0/.
package io.vlingo.lattice.model.projection;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import io.vlingo.symbio.Entry;
import io.vlingo.symbio.State;
import io.vlingo.symbio.store.dispatch.Dispatchable;
public class BinaryProjectionDispatcherActor extends ProjectionDispatcherActor, State>
implements ProjectionDispatcher {
public BinaryProjectionDispatcherActor() {
this(Arrays.asList());
}
public BinaryProjectionDispatcherActor(final Collection projectToDescriptions) {
this(projectToDescriptions, MultiConfirming.DefaultExpirationLimit);
}
public BinaryProjectionDispatcherActor(
final Collection projectToDescriptions,
final long multiConfirmationsExpiration) {
super(projectToDescriptions, multiConfirmationsExpiration);
}
@Override
protected boolean requiresDispatchedConfirmation() {
return true;
}
@Override
public void dispatch(final Dispatchable, State> dispatchable) {
dispatchable.state().ifPresent(state-> {
if (hasProjectionsFor(state.metadata.operation)) {
dispatch(dispatchable.id(), new BinaryProjectable(state, dispatchable.entries(), dispatchable.id()));
}
});
final List> entries =
dispatchable.entries().stream()
.filter(entry -> hasProjectionsFor(entry.typeName()))
.collect(Collectors.toList());
if (!entries.isEmpty()) {
dispatch(dispatchable.id(), new BinaryProjectable(dispatchable.state().orElse(null), entries, dispatchable.id()));
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy