package util; import com.google.protobuf.InvalidProtocolBufferException; import meerkat.ProtobufsMessages; import meerkat.VoterRegistryMessage; import meerkat.protobuf.BulletinBoardAPI; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Created by Vladimir Eliezer Tokarev on 1/15/2016. * adds extra functionality to Messages collections */ public abstract class CollectionMessagesUtils { /** * Converts lost of BasicMessages to VoterRegistryMessags * @param messages list * @return List */ public static List ConvertToVoterRegistryMessages(List messages){ List voterRegistryMessages = new ArrayList(); for (ProtobufsMessages.BasicMessage message : messages){ voterRegistryMessages.add(new VoterRegistryMessage(message)); } return voterRegistryMessages; } /** * Gets map of GroupId to basicMessage, where the basicMessages are the last actions for those groups * @param messages List * @return Map * @throws ParseException */ public static Map GetLatestGroupsActions(List messages) throws ParseException { Map groupIdToMessage = new HashMap(); // iterate trough all the messages and put into the map the last updated groups actions for (int i = 0; i < messages.size(); i++) { String groupId = messages.get(i).GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG); VoterRegistryMessage temp = groupIdToMessage.get(groupId); if (temp != null) { if (temp != messages.get(i)) { if (temp.GetBasicMessageActionTimestamp().before(messages.get(i).GetBasicMessageActionTimestamp())) { groupIdToMessage.put(groupId, messages.get(i)); } } } } return groupIdToMessage; } /** * Gets list of groups ids of the basicMessages that carried the adding to group tag * @param groupIdToMessage Map * @return List */ public static List GetListOfGroupIds(Map groupIdToMessage) { List groupsIds = new ArrayList(); for (VoterRegistryMessage message : groupIdToMessage.values()) { if (message.IsGroupAdding()) { String groupId = message.GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG); groupsIds.add(groupId); } } return groupsIds; } /** * Gets all the basic messages from bulletin board messages * @param listOfMessages list of bulletin board messages * @return List * @throws InvalidProtocolBufferException */ public static List GetUnsignedBulletinBoardMessages( List listOfMessages) throws InvalidProtocolBufferException { return listOfMessages.stream().map(BulletinBoardAPI.BulletinBoardMessage::getMsg).collect(Collectors.toList()); } }