2016-01-15 11:41:20 -05:00
|
|
|
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;
|
|
|
|
|
|
|
|
/**
|
2016-01-16 09:00:07 -05:00
|
|
|
* Created by Vladimir Eliezer Tokarev on 1/15/2016.
|
|
|
|
* adds extra functionality to Messages collections
|
2016-01-15 11:41:20 -05:00
|
|
|
*/
|
|
|
|
public abstract class CollectionMessagesUtils {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Converts lost of BasicMessages to VoterRegistryMessags
|
|
|
|
* @param messages list<BasicMessages>
|
|
|
|
* @return List<VoterRegistryMessage>
|
|
|
|
*/
|
|
|
|
public static List<VoterRegistryMessage> ConvertToVoterRegistryMessages(List<ProtobufsMessages.BasicMessage> messages){
|
|
|
|
List<VoterRegistryMessage> voterRegistryMessages = new ArrayList<VoterRegistryMessage>();
|
|
|
|
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<BasicMessages>
|
|
|
|
* @return Map<String, VoterRegistryMessage>
|
|
|
|
* @throws ParseException
|
|
|
|
*/
|
|
|
|
public static Map<String, VoterRegistryMessage> GetLatestGroupsActions(List<VoterRegistryMessage> messages) throws ParseException {
|
|
|
|
|
|
|
|
Map<String, VoterRegistryMessage> groupIdToMessage = new HashMap<String, VoterRegistryMessage>();
|
|
|
|
|
|
|
|
// iterate trough all the messages and put into the map the last updated groups actions
|
|
|
|
|
|
|
|
for (int i = 0; i < messages.size(); i++) {
|
2016-01-22 08:13:32 -05:00
|
|
|
String groupId = messages.get(i).GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG);
|
2016-01-15 11:41:20 -05:00
|
|
|
VoterRegistryMessage temp = groupIdToMessage.get(groupId);
|
|
|
|
|
|
|
|
if (temp != null) {
|
|
|
|
if (temp != messages.get(i)) {
|
2016-01-16 09:00:07 -05:00
|
|
|
if (temp.GetBasicMessageActionTimestamp().before(messages.get(i).GetBasicMessageActionTimestamp())) {
|
2016-01-15 11:41:20 -05:00
|
|
|
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<String, BasicMessage>
|
|
|
|
* @return List<String>
|
|
|
|
*/
|
|
|
|
public static List<String> GetListOfGroupIds(Map<String, VoterRegistryMessage> groupIdToMessage) {
|
|
|
|
List<String> groupsIds = new ArrayList<String>();
|
|
|
|
|
|
|
|
for (VoterRegistryMessage message : groupIdToMessage.values()) {
|
|
|
|
if (message.IsGroupAdding()) {
|
2016-01-22 08:13:32 -05:00
|
|
|
String groupId = message.GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG);
|
2016-01-15 11:41:20 -05:00
|
|
|
groupsIds.add(groupId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return groupsIds;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets all the basic messages from bulletin board messages
|
|
|
|
* @param listOfMessages
|
|
|
|
* @return List<BasicMessage> G
|
|
|
|
* @throws InvalidProtocolBufferException
|
|
|
|
*/
|
|
|
|
public static final List<ProtobufsMessages.BasicMessage> GetBasicMessagesFromBulletinBoardMessages(
|
|
|
|
List<BulletinBoardAPI.BulletinBoardMessage> listOfMessages) throws InvalidProtocolBufferException {
|
|
|
|
|
|
|
|
List<ProtobufsMessages.BasicMessage> basicMessages = new ArrayList<ProtobufsMessages.BasicMessage>();
|
|
|
|
|
|
|
|
for (BulletinBoardAPI.BulletinBoardMessage bulletinBoardMessage : listOfMessages){
|
|
|
|
ProtobufsMessages.BasicMessage.Builder basicMessage =
|
|
|
|
ProtobufsMessages.BasicMessage.newBuilder().mergeFrom(bulletinBoardMessage.getMsg().getData());
|
|
|
|
basicMessages.add(basicMessage.build());
|
|
|
|
}
|
|
|
|
|
|
|
|
return basicMessages;
|
|
|
|
}
|
|
|
|
}
|