
io.molr.commons.domain.ImmutableAgencyState Maven / Gradle / Ivy
package io.molr.commons.domain;
import com.google.common.collect.ImmutableSet;
import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toSet;
public final class ImmutableAgencyState implements AgencyState {
private final Set executableMissions;
private final Set activeMissions;
private ImmutableAgencyState(Set executableMissions, Iterable activeMissions) {
requireNonNull(executableMissions, "availableMissions must not be null");
requireNonNull(activeMissions, "activeMissions must not be null");
this.executableMissions = ImmutableSet.copyOf(executableMissions);
this.activeMissions = ImmutableSet.copyOf(activeMissions);
}
public static ImmutableAgencyState of(Set executableMissions, Iterable activeMissions) {
return new ImmutableAgencyState(executableMissions, activeMissions);
}
@Override
public Set executableMissions() {
return this.executableMissions;
}
@Override
public Set activeMissions() {
return this.activeMissions;
}
public static final AgencyState combine(Object[] states) {
Set availableMissions = Arrays.stream(states).map(s -> (AgencyState) s).flatMap(s -> s.executableMissions().stream()).collect(toSet());
Set instances = Arrays.stream(states).map(s -> (AgencyState) s).flatMap(s -> s.activeMissions().stream()).collect(toSet());
return new ImmutableAgencyState(availableMissions, instances);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ImmutableAgencyState that = (ImmutableAgencyState) o;
return Objects.equals(executableMissions, that.executableMissions) &&
Objects.equals(activeMissions, that.activeMissions);
}
@Override
public int hashCode() {
return Objects.hash(executableMissions, activeMissions);
}
@Override
public String toString() {
return "ImmutableAgencyState{" +
"availableMissions=" + executableMissions +
", activeMissions=" + activeMissions +
'}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy