HazelcastMessageSearcher.java

  1. package net.morimekta.providence.storage.hazelcast;

  2. import com.hazelcast.core.IMap;
  3. import com.hazelcast.query.Predicate;
  4. import net.morimekta.providence.PMessage;
  5. import net.morimekta.providence.PMessageBuilder;
  6. import net.morimekta.providence.storage.MessageSearcher;

  7. import javax.annotation.Nonnull;
  8. import java.util.List;
  9. import java.util.function.Function;
  10. import java.util.stream.Collectors;
  11. import java.util.stream.Stream;

  12. public class HazelcastMessageSearcher<Q, Key, M extends PMessage<M>, B extends PMessageBuilder<M>>
  13.         implements MessageSearcher<Q, M> {
  14.     private final IMap<Key, B> hazelcastMap;
  15.     private final Function<Q, Predicate<Key, B>> makePredicate;

  16.     public HazelcastMessageSearcher(Function<Q, Predicate<Key, B>> makePredicate,
  17.                                     IMap<Key, B> hazelcastMap) {
  18.         this.makePredicate = makePredicate;
  19.         this.hazelcastMap = hazelcastMap;
  20.     }

  21.     @Nonnull
  22.     @Override
  23.     public List<M> search(@Nonnull Q query) {
  24.         return stream(query).collect(Collectors.toList());
  25.     }

  26.     @Override
  27.     public Stream<M> stream(@Nonnull Q query) {
  28.         return hazelcastMap.values(makePredicate.apply(query))
  29.                            .stream()
  30.                            .map(PMessageBuilder::build);
  31.     }
  32. }