package org.infinispan.query.impl.externalizers;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Collections;
import java.util.Set;
import org.apache.lucene.search.TopDocs;
import org.infinispan.commons.io.UnsignedNumeric;
import org.infinispan.commons.marshall.AbstractExternalizer;
import org.infinispan.query.clustered.NodeTopDocs;
public class ClusteredTopDocsExternalizer extends AbstractExternalizer<NodeTopDocs> {
@Override
public Set<Class<? extends NodeTopDocs>> getTypeClasses() {
return Collections.singleton(NodeTopDocs.class);
}
@Override
public NodeTopDocs readObject(final ObjectInput input) throws IOException, ClassNotFoundException {
final int keysNumber = UnsignedNumeric.readUnsignedInt(input);
final Object[] keys = new Object[keysNumber];
for (int i=0; i<keysNumber; i++) {
keys[i] = input.readObject();
}
final TopDocs innerTopDocs = (TopDocs) input.readObject();
return new NodeTopDocs(innerTopDocs, keys);
}
@Override
public void writeObject(final ObjectOutput output, final NodeTopDocs topDocs) throws IOException {
final Object[] keys = topDocs.keys;
int size = keys == null ? 0 : keys.length;
UnsignedNumeric.writeUnsignedInt(output, size);
for (int i = 0; i < size; i++) {
output.writeObject(keys[i]);
}
output.writeObject(topDocs.topDocs);
}
@Override
public Integer getId() {
return ExternalizerIds.CLUSTERED_QUERY_TOPDOCS;
}
}