package com.bagri.server.hazelcast.predicate; import static com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl.cli_ResultsQueryPredicate; import static com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl.factoryId; import static com.bagri.support.util.CollectionUtils.*; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import java.util.Map.Entry; import java.util.Set; import com.bagri.core.model.QueryResult; import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import com.hazelcast.nio.serialization.IdentifiedDataSerializable; import com.hazelcast.query.Predicate; public class ResultsQueryPredicate implements Predicate<Long, QueryResult>, IdentifiedDataSerializable { /** * */ private static final long serialVersionUID = 3453742834708403277L; private Set<Integer> queryIds = new HashSet<>(); public ResultsQueryPredicate() { // for de-serialization } public ResultsQueryPredicate(Collection<Integer> queryIds) { this.queryIds.addAll(queryIds); } @Override public int getFactoryId() { return factoryId; } @Override public int getId() { return cli_ResultsQueryPredicate; } @Override public boolean apply(Entry<Long, QueryResult> resEntry) { long resultKey = resEntry.getKey(); Integer queryKey = (int) (resultKey >> 32); return queryIds.contains(queryKey); } @Override public void readData(ObjectDataInput in) throws IOException { queryIds.addAll(toIntList(in.readIntArray())); } @Override public void writeData(ObjectDataOutput out) throws IOException { out.writeIntArray(toIntArray(queryIds)); } }