Skip to content

Commit 6e9a998

Browse files
S-furiDanySK
authored andcommitted
fix(implementation-base): merge conditions into single observable source
1 parent 431b0a1 commit 6e9a998

1 file changed

Lines changed: 18 additions & 13 deletions

File tree

alchemist-implementationbase/src/main/java/it/unibo/alchemist/model/reactions/AbstractReaction.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,15 @@
2424
import it.unibo.alchemist.model.TimeDistribution;
2525
import it.unibo.alchemist.model.observation.Disposable;
2626
import it.unibo.alchemist.model.observation.EventObservable;
27+
import it.unibo.alchemist.model.observation.MutableObservable;
28+
import it.unibo.alchemist.model.observation.Observable;
29+
import it.unibo.alchemist.model.observation.ObservableExtensions;
30+
import it.unibo.alchemist.model.observation.ObservableMutableSet;
2731
import it.unibo.alchemist.model.observation.lifecycle.Lifecycle;
2832
import it.unibo.alchemist.model.observation.lifecycle.LifecycleOwner;
2933
import it.unibo.alchemist.model.observation.lifecycle.LifecycleOwnerKt;
3034
import it.unibo.alchemist.model.observation.lifecycle.LifecycleRegistry;
3135
import it.unibo.alchemist.model.observation.lifecycle.LifecycleState;
32-
import it.unibo.alchemist.model.observation.MutableObservable;
33-
import it.unibo.alchemist.model.observation.Observable;
34-
import it.unibo.alchemist.model.observation.ObservableExtensions;
3536
import kotlin.Unit;
3637
import org.danilopianini.util.ArrayListSet;
3738
import org.danilopianini.util.Hashes;
@@ -49,6 +50,7 @@
4950
import java.util.List;
5051
import java.util.Objects;
5152
import java.util.function.Supplier;
53+
import java.util.stream.Collectors;
5254
import java.util.stream.Stream;
5355

5456
import static arrow.core.OptionKt.getOrElse;
@@ -362,15 +364,18 @@ protected final void initializeObservableConditions() {
362364
subscriptions.clear();
363365
validity.dispose();
364366

365-
conditions.forEach(condition -> {
366-
final var merged = ObservableExtensions.ObservableSetExtensions.mergeObservables(
367-
condition.observeInboundDependencies()
368-
);
369-
subscriptions.add(LifecycleOwnerKt.bindTo(merged, this, it -> {
370-
rescheduleRequest.emit();
371-
return Unit.INSTANCE;
372-
}));
373-
});
367+
final var allDependencies = conditions.stream()
368+
.flatMap(it -> it.observeInboundDependencies().toSet().stream())
369+
.collect(Collectors.toSet());
370+
371+
final Observable<?> merged = ObservableExtensions.ObservableSetExtensions.mergeObservables(
372+
ObservableMutableSet.Companion.toObservableSet(allDependencies)
373+
);
374+
375+
subscriptions.add(LifecycleOwnerKt.bindTo(merged, this, it -> {
376+
rescheduleRequest.emit();
377+
return Unit.INSTANCE;
378+
}));
374379

375380
if (!conditions.isEmpty()) {
376381
validity = ObservableExtensions.INSTANCE.combineLatest(
@@ -406,7 +411,7 @@ protected final void setOutputContext(final Context c) {
406411

407412
/**
408413
* @return the default implementation returns a String in the form
409-
* className@timeScheduled[Conditions]-rate-&gt;[Actions]
414+
* className@timeScheduled[Conditions]-rate-&gt;[Actions]
410415
*/
411416
@Override
412417
public String toString() {

0 commit comments

Comments
 (0)