package com.bagri.server.hazelcast.predicate;
import static com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl.cli_DocsAwarePredicate;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.Map.Entry;
import com.bagri.core.DataKey;
import com.bagri.core.model.Elements;
import com.bagri.core.query.PathExpression;
import com.bagri.support.util.CollectionUtils;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
@SuppressWarnings("serial")
public class DocsAwarePredicate extends QueryPredicate {
private Set<Long> docIds = new HashSet<>();
public DocsAwarePredicate() {
super();
}
public DocsAwarePredicate(PathExpression pex, Object value, Set<Long> docIds) {
super(pex, value);
this.docIds.addAll(docIds);
}
@Override
public int getId() {
return cli_DocsAwarePredicate;
}
@Override
public boolean apply(Entry<DataKey, Elements> xdmEntry) {
if (docIds.contains(xdmEntry.getKey().getDocumentKey())) {
return super.apply(xdmEntry);
}
return false;
}
@Override
public void readData(ObjectDataInput in) throws IOException {
super.readData(in);
CollectionUtils.fromLongArray(in.readLongArray(), docIds);
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
super.writeData(out);
out.writeLongArray(CollectionUtils.toLongArray(docIds));
}
}