package util; import com.google.protobuf.InvalidProtocolBufferException; 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 UnsignedBulletinBoardMessage to VoterRegistryMessags * @param messages list * @return List */ public static List ConvertToVoterRegistryMessages(List messages){ return messages.stream().map(VoterRegistryMessage::new).collect(Collectors.toList()); } /** * Gets map of GroupId to basicMessage, where the basicMessages are the last actions for those groups * @param messages List * @return Map{String:VoterRegistryMessage} * @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 (VoterRegistryMessage message : messages) { String groupId = message.GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG); VoterRegistryMessage temp = groupIdToMessage.get(groupId); if (temp != null) { if (temp != message) { if (temp.GetBasicMessageActionTimestamp().before(message.GetBasicMessageActionTimestamp())) { groupIdToMessage.put(groupId, message); } } } } 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<>(); groupIdToMessage.values().stream().filter(VoterRegistryMessage::IsGroupAdding).forEach(message -> { 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()); } }