/** * */ package com.meidusa.amoeba.mongodb.handler.merge; import java.util.ArrayList; import java.util.List; import org.bson.BSONObject; import com.meidusa.amoeba.mongodb.packet.RequestMongodbPacket; import com.meidusa.amoeba.mongodb.packet.ResponseMongodbPacket; /** * * @author Struct * */ public class CountFunctionMerge implements FunctionMerge{ @Override public ResponseMongodbPacket mergeResponse(RequestMongodbPacket requestPacket, List<ResponseMongodbPacket> multiResponsePacket) { ResponseMongodbPacket result = new ResponseMongodbPacket(); BSONObject cmdResult = null; for(ResponseMongodbPacket response :multiResponsePacket){ if(response.numberReturned > 0){ if(cmdResult == null){ cmdResult = response.documents.get(0); }else{ Number value = (Number)cmdResult.get("n"); Number add = (Number)response.documents.get(0).get("n"); if(value != null && add != null){ value = value.longValue() + add.longValue(); cmdResult.put("n", value.doubleValue()); }else{ if(add != null){ cmdResult.put("n", add.doubleValue()); } } } } } result.documents = new ArrayList<BSONObject>(); if(cmdResult != null){ result.documents.add(cmdResult); } result.responseTo = requestPacket.requestID; result.numberReturned = (result.documents == null?0:result.documents.size()); return result; } }