package com.bagri.client.hazelcast.serialize.model; import static com.bagri.support.util.CollectionUtils.*; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl; import com.bagri.core.model.QueryResult; import com.bagri.support.util.CollectionUtils; import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import com.hazelcast.nio.serialization.StreamSerializer; public class QueryResultSerializer implements StreamSerializer<QueryResult> { @Override public void destroy() { } @Override public int getTypeId() { return DataSerializationFactoryImpl.cli_XDMResults; } @Override public QueryResult read(ObjectDataInput in) throws IOException { int size = in.readInt(); Map<String, Object> params = null; if (size > 0) { params = new HashMap<String, Object>(size); for (int i=0; i < size; i++) { params.put(in.readUTF(), in.readObject()); } } size = in.readInt(); Map<Long, String> docKeys = new HashMap<Long, String>(size); for (int i=0; i < size; i++) { docKeys.put(in.readLong(), in.readUTF()); } size = in.readInt(); List<Object> results = new ArrayList<>(size); for (int i=0; i < size; i++) { results.add(in.readObject()); } return new QueryResult(params, docKeys, results); } @Override public void write(ObjectDataOutput out, QueryResult xreslts) throws IOException { if (xreslts.getParams() == null) { out.writeInt(0); } else { out.writeInt(xreslts.getParams().size()); for (Map.Entry<String, Object> e: xreslts.getParams().entrySet()) { out.writeUTF(e.getKey()); out.writeObject(e.getValue()); } } out.writeInt(xreslts.getDocKeys().size()); for (Map.Entry<Long, String> e: xreslts.getDocKeys().entrySet()) { out.writeLong(e.getKey()); out.writeUTF(e.getValue()); } out.writeInt(xreslts.getResults().size()); for (Object o: xreslts.getResults()) { out.writeObject(o); } } }