/** * */ package com.meidusa.amoeba.mongodb.handler.merge; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.bson.BSONObject; import com.meidusa.amoeba.mongodb.packet.RequestMongodbPacket; import com.meidusa.amoeba.mongodb.packet.ResponseMongodbPacket; /** * * @author Struct * */ public class NameSpacesFunctionMerge implements FunctionMerge{ @Override public ResponseMongodbPacket mergeResponse(RequestMongodbPacket requestPacket, List<ResponseMongodbPacket> multiResponsePacket) { ResponseMongodbPacket result = new ResponseMongodbPacket(); Map<String,BSONObject> dbMap = new HashMap<String,BSONObject>(); for(ResponseMongodbPacket response :multiResponsePacket){ if(response.numberReturned > 0){ for(BSONObject info: response.documents){ String name = (String)info.get("name"); BSONObject source = dbMap.get(name); if(source == null){ dbMap.put(name, info); } } } } result.documents = new ArrayList<BSONObject>(); for(BSONObject bson : dbMap.values()){ result.documents.add(bson); } result.responseTo = requestPacket.requestID; result.numberReturned = (result.documents == null?0:result.documents.size()); return result; } }