Removed the voterRegistryMessage and swaped the usage of it to BulletinBoardMessage
parent
5169c935bf
commit
87420a9d7d
Binary file not shown.
|
@ -11,7 +11,7 @@ public interface MessageValidator<T>
|
|||
* @param object object which will be checked
|
||||
* @return T object
|
||||
*/
|
||||
T validate(T object) throws ValidationError ;
|
||||
T validate(T object) throws ValidationError;
|
||||
|
||||
class ValidationError extends Exception {
|
||||
public ValidationError(String message) {
|
||||
|
|
|
@ -38,13 +38,13 @@ public class BooleanCallBack implements ClientCallback<Boolean>, MessageValidato
|
|||
*/
|
||||
@Override
|
||||
public void handleFailure(Throwable t) {
|
||||
callback.HandleResult(false);
|
||||
callback.HandleFailure(t);
|
||||
}
|
||||
|
||||
/**
|
||||
* always return true because there no need to check boolean
|
||||
* always return true because there no n
|
||||
* @param object object which will be checked
|
||||
* @return
|
||||
* @return alwyas true
|
||||
* @throws ValidationError
|
||||
*/
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
package meerkat.Registry;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.VoterRegistryMessage;
|
||||
import meerkat.protobuf.BulletinBoardAPI.BulletinBoardMessage;
|
||||
import meerkat.protobuf.BulletinBoardAPI.FilterType;
|
||||
import meerkat.protobuf.BulletinBoardAPI.MessageFilter;
|
||||
import meerkat.protobuf.BulletinBoardAPI.MessageFilterList;
|
||||
import meerkat.protobuf.BulletinBoardAPI.*;
|
||||
import meerkat.protobuf.VoterRegistry;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.*;
|
||||
|
@ -31,33 +28,54 @@ public abstract class CollectionMessagesUtils {
|
|||
* @param messages list<VoterRegistryMessage>
|
||||
* @return List<VoterRegistryMessage>
|
||||
*/
|
||||
public static List<VoterRegistryMessage> ConvertToVoterRegistryMessages(List<BulletinBoardMessage> messages){
|
||||
List<VoterRegistryMessage> voterMessages = new ArrayList<>();
|
||||
public static List<UnsignedBulletinBoardMessage> ConvertToVoterRegistryMessages(List<BulletinBoardMessage> messages){
|
||||
List<UnsignedBulletinBoardMessage> voterMessages = new ArrayList<>();
|
||||
for (int i = 0 ; i < messages.size() ; i++)
|
||||
{
|
||||
voterMessages.add(new VoterRegistryMessage(messages.get(i)));
|
||||
voterMessages.add(messages.get(i).getMsg());
|
||||
}
|
||||
return voterMessages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if message1 was created before message 2
|
||||
* @param message1 BulletinBoardMessage object
|
||||
* @param message2 BulletinBoardMessage object
|
||||
* @return boolean
|
||||
* @throws InvalidProtocolBufferException
|
||||
*/
|
||||
private static boolean FirstBeforeSecond(BulletinBoardMessage message1, BulletinBoardMessage message2)
|
||||
throws InvalidProtocolBufferException {
|
||||
try {
|
||||
long firstCreationTime = VoterRegistry.VoterRegistryMessage.newBuilder()
|
||||
.mergeFrom(message1.getMsg().getData()).build().getCreationMiliseconds();
|
||||
long secondCreationTime = VoterRegistry.VoterRegistryMessage.newBuilder()
|
||||
.mergeFrom(message2.getMsg().getData()).build().getCreationMiliseconds();
|
||||
return firstCreationTime < secondCreationTime;
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets map of GroupId to basicMessage, where the basicMessages are the last actions for those groups
|
||||
* @param messages List<VoterRegistryMessage>
|
||||
* @return Map{String:VoterRegistryMessage}
|
||||
* @throws ParseException
|
||||
*/
|
||||
public static Map<String, VoterRegistryMessage> GetLatestGroupsActions(List<VoterRegistryMessage> messages)
|
||||
public static Map<String, BulletinBoardMessage> GetLatestGroupsActions(List<BulletinBoardMessage> messages)
|
||||
throws ParseException, InvalidProtocolBufferException {
|
||||
Map<String, VoterRegistryMessage> groupIdToMessage = new HashMap<>();
|
||||
Map<String, BulletinBoardMessage> groupIdToMessage = new HashMap<>(messages.size());
|
||||
|
||||
// iterate trough all the messages and put into the map the last updated groups actions
|
||||
for (int i = 0 ; i < messages.size() ; i++) {
|
||||
VoterRegistryMessage message = messages.get(i);
|
||||
String groupId = message.GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG);
|
||||
VoterRegistryMessage temp = groupIdToMessage.get(groupId);
|
||||
BulletinBoardMessage message = messages.get(i);
|
||||
String groupId = GetTagByName(message.getMsg().getTagList(), RegistryTags.GROUP_ID_TAG);
|
||||
BulletinBoardMessage temp = groupIdToMessage.get(groupId);
|
||||
|
||||
if (temp != null && temp != message) {
|
||||
if (temp.GetCreationTime() < message.GetCreationTime()) {
|
||||
if (FirstBeforeSecond(temp, message)) {
|
||||
groupIdToMessage.put(groupId, message);
|
||||
}
|
||||
}
|
||||
|
@ -71,13 +89,14 @@ public abstract class CollectionMessagesUtils {
|
|||
* @param groupIdToMessage Map<String, VoterRegistryMessage>
|
||||
* @return List<String>
|
||||
*/
|
||||
public static List<String> GetListOfGroupIds(Map<String, VoterRegistryMessage> groupIdToMessage) {
|
||||
List<String> groupsIds = new ArrayList<>();
|
||||
public static List<String> GetListOfGroupIds(Map<String, BulletinBoardMessage> groupIdToMessage) {
|
||||
List<String> groupsIds = new ArrayList<>(groupIdToMessage.size());
|
||||
Iterator entries = groupIdToMessage.entrySet().iterator();
|
||||
while (entries.hasNext()) {
|
||||
Map.Entry tuple = (Map.Entry) entries.next();
|
||||
VoterRegistryMessage message = (VoterRegistryMessage) tuple.getValue();
|
||||
String groupId = message.GetWantedTagFromBasicMessage(RegistryTags.GROUP_ID_TAG);
|
||||
BulletinBoardMessage message = (BulletinBoardMessage) tuple.getValue();
|
||||
String groupId = GetTagByName(message.getMsg().getTagList(), RegistryTags.GROUP_ID_TAG);
|
||||
groupId.replace(RegistryTags.GROUP_ID_TAG, "");
|
||||
groupsIds.add(groupId);
|
||||
}
|
||||
return groupsIds;
|
||||
|
@ -90,22 +109,39 @@ public abstract class CollectionMessagesUtils {
|
|||
* @throws ParseException
|
||||
* @throws EmptyListException
|
||||
*/
|
||||
public static VoterRegistryMessage GetLatestMessage(List<VoterRegistryMessage> messages)
|
||||
public static BulletinBoardMessage GetLatestMessage(List<BulletinBoardMessage> messages)
|
||||
throws ParseException, EmptyListException, InvalidProtocolBufferException {
|
||||
System.out.print("1");
|
||||
if (messages.size() == 0 ){
|
||||
throw new EmptyListException("The list of messages passed to GetLatestMessage is empty.");
|
||||
}
|
||||
VoterRegistryMessage LatestMessage = messages.get(0);
|
||||
BulletinBoardMessage LatestMessage = messages.get(0);
|
||||
for (int i = 0 ; i < messages.size() ; i++) {
|
||||
VoterRegistryMessage message = messages.get(i);
|
||||
if (message.GetCreationTime() < LatestMessage.GetCreationTime()) {
|
||||
BulletinBoardMessage message = messages.get(i);
|
||||
if (FirstBeforeSecond(message, LatestMessage)) {
|
||||
LatestMessage = message;
|
||||
}
|
||||
}
|
||||
return LatestMessage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the wanted tag from given basic message
|
||||
*
|
||||
* @param content the name of the tag
|
||||
* @param tags the list of tags
|
||||
* @return string
|
||||
*/
|
||||
public static String GetTagByName(List<String> tags, String content) {
|
||||
for (int i = 0 ; i < tags.size() ; i++) {
|
||||
String tag = tags.get(i);
|
||||
if (tag.startsWith(content) || tag.endsWith(content)) {
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets messages that have the wanted id tag and have or the ADD_TO_GROUP_TAG or REMOVE_FROM_GROUP_TAG
|
||||
*
|
||||
|
|
|
@ -3,7 +3,6 @@ package meerkat.Registry;
|
|||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.MessageValidator;
|
||||
import meerkat.VoterRegistry.RegistryCallBack;
|
||||
import meerkat.VoterRegistryMessage;
|
||||
import meerkat.bulletinboard.BulletinBoardClient.ClientCallback;
|
||||
import meerkat.crypto.DigitalSignature;
|
||||
import meerkat.protobuf.BulletinBoardAPI;
|
||||
|
@ -35,7 +34,6 @@ public class RelevantDataCallBack implements ClientCallback<List<BulletinBoardMe
|
|||
protected Crypto.Signature signature;
|
||||
protected InputStream certificateStream;
|
||||
|
||||
|
||||
/**
|
||||
* Init BooleanCallBack
|
||||
* @param callback voter registry callback object
|
||||
|
@ -79,19 +77,16 @@ public class RelevantDataCallBack implements ClientCallback<List<BulletinBoardMe
|
|||
@Override
|
||||
public void handleCallback(List<BulletinBoardMessage> msg) {
|
||||
try {
|
||||
List<VoterRegistryMessage> messages = ConvertToVoterRegistryMessages(validate(msg));
|
||||
|
||||
if(isAddToGroupsList(msg)) {
|
||||
Map<String, VoterRegistryMessage> map = GetLatestGroupsActions(messages);
|
||||
Map<String, BulletinBoardMessage> map = GetLatestGroupsActions(msg);
|
||||
List<String> groupsOfUser = GetListOfGroupIds(map);
|
||||
callback.HandleResult(groupsOfUser);
|
||||
}
|
||||
else {
|
||||
callback.HandleResult(GetLatestMessage(messages));
|
||||
callback.HandleResult(GetLatestMessage(msg));
|
||||
}
|
||||
} catch (ValidationError | ParseException | EmptyListException
|
||||
| InvalidProtocolBufferException validationError) {
|
||||
callback.HandleResult(null);
|
||||
} catch (ParseException | EmptyListException | InvalidProtocolBufferException validationError) {
|
||||
callback.HandleFailure(validationError);
|
||||
validationError.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -102,7 +97,7 @@ public class RelevantDataCallBack implements ClientCallback<List<BulletinBoardMe
|
|||
*/
|
||||
@Override
|
||||
public void handleFailure(Throwable t) {
|
||||
callback.HandleResult(null);
|
||||
callback.HandleFailure(t);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,9 +11,11 @@ public interface VoterRegistry {
|
|||
/**
|
||||
* Created by Vladimir Eliezer Tokarev on 1/22/2016.
|
||||
* This interface will handle the end of methods of RegistryInstance
|
||||
* in case of exception the handleFailure will be called
|
||||
*/
|
||||
interface RegistryCallBack<T> {
|
||||
void HandleResult(T result);
|
||||
void HandleFailure(Throwable throwable);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
package meerkat;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import meerkat.protobuf.BulletinBoardAPI.BulletinBoardMessage;
|
||||
import meerkat.protobuf.BulletinBoardAPI.UnsignedBulletinBoardMessage;
|
||||
import meerkat.protobuf.VoterRegistry;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: add logging
|
||||
*/
|
||||
|
||||
/**
|
||||
* Created by Vladimir Eliezer Tokarev on 1/15.2016
|
||||
* this class wraps BasicMessage and gives the ability to find wanted tags
|
||||
*/
|
||||
public class VoterRegistryMessage {
|
||||
|
||||
public UnsignedBulletinBoardMessage base;
|
||||
|
||||
public VoterRegistryMessage(BulletinBoardMessage message) {
|
||||
UnsignedBulletinBoardMessage.Builder unsignedBase =
|
||||
UnsignedBulletinBoardMessage.newBuilder().addAllTag(message.getMsg().getTagList());
|
||||
unsignedBase.setData(message.getMsg().getData());
|
||||
base = unsignedBase.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the wanted tag from given basic message
|
||||
*
|
||||
* @param tagName the name of the tag
|
||||
* @return string
|
||||
*/
|
||||
public String GetWantedTagFromBasicMessage(String tagName) {
|
||||
List<String> tags = base.getTagList();
|
||||
for (int i = 0 ; i < tags.size() ; i++) {
|
||||
String tag = tags.get(i);
|
||||
if (tag.contains(tagName)) {
|
||||
return tag;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the creation time milliseconds of the tag adding
|
||||
* @return long that represent the creation time
|
||||
*/
|
||||
public long GetCreationTime() throws InvalidProtocolBufferException {
|
||||
try {
|
||||
VoterRegistry.VoterRegistryMessage wrapper = VoterRegistry.VoterRegistryMessage.parseFrom(base.getData());
|
||||
return wrapper.getCreationMiliseconds();
|
||||
} catch (InvalidProtocolBufferException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,7 +3,6 @@ import junit.framework.TestCase;
|
|||
import meerkat.Registry.CollectionMessagesUtils;
|
||||
import meerkat.Registry.RegistryTags;
|
||||
import meerkat.SimpleRegistry;
|
||||
import meerkat.VoterRegistryMessage;
|
||||
import meerkat.bulletinboard.BulletinBoardClient;
|
||||
import meerkat.bulletinboard.ThreadedBulletinBoardClient;
|
||||
import meerkat.crypto.concrete.ECDSASignature;
|
||||
|
@ -23,8 +22,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.concurrent.Semaphore;
|
||||
|
||||
import static meerkat.Registry.CollectionMessagesUtils.ConvertToVoterRegistryMessages;
|
||||
|
||||
/**
|
||||
* TODO: add logs prints for the tests to be clear what they are
|
||||
*/
|
||||
|
@ -62,6 +59,10 @@ public class SimpleRegistryTest extends TestCase {
|
|||
data = result;
|
||||
jobSemaphore.release();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void HandleFailure(Throwable throwable) {
|
||||
}
|
||||
}
|
||||
|
||||
public class DummyBulletinBoardCallBackHandler implements BulletinBoardClient.ClientCallback<List<BulletinBoardMessage>> {
|
||||
|
@ -76,7 +77,6 @@ public class SimpleRegistryTest extends TestCase {
|
|||
|
||||
@Override
|
||||
public void handleFailure(Throwable t){
|
||||
System.out.println(t);
|
||||
messages = null;
|
||||
jobSemaphore.release();
|
||||
}
|
||||
|
@ -139,17 +139,17 @@ public class SimpleRegistryTest extends TestCase {
|
|||
* @param tags List<RegistryTags>
|
||||
* @return integer that represent the amount of messages with wanted tags
|
||||
*/
|
||||
private int countMessagesWithTags(List<VoterRegistryMessage> messages, List<String> tags)
|
||||
private int countMessagesWithTags(List<BulletinBoardMessage> messages, List<String> tags)
|
||||
{
|
||||
int counter = 0 ;
|
||||
|
||||
for (int i = 0 ; i < messages.size() ; i++) {
|
||||
VoterRegistryMessage message = messages.get(i);
|
||||
BulletinBoardMessage message = messages.get(i);
|
||||
int wantedTagsCounter = 0;
|
||||
|
||||
for (int j = 0 ;j < tags.size() ; j++) {
|
||||
String tag = tags.get(j);
|
||||
if(message.GetWantedTagFromBasicMessage(tag)!=null){
|
||||
if(CollectionMessagesUtils.GetTagByName(message.getMsg().getTagList(), tag)!=null){
|
||||
wantedTagsCounter++;
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ public class SimpleRegistryTest extends TestCase {
|
|||
|
||||
tags.add(id);
|
||||
|
||||
int counter = countMessagesWithTags(ConvertToVoterRegistryMessages(bulletinHandler.messages), tags);
|
||||
int counter = countMessagesWithTags(bulletinHandler.messages, tags);
|
||||
assert counter == 1 : "The server don't have the new user data.";
|
||||
}
|
||||
|
||||
|
@ -214,7 +214,7 @@ public class SimpleRegistryTest extends TestCase {
|
|||
jobSemaphore.acquire();
|
||||
|
||||
tags.add(id);
|
||||
int counter = countMessagesWithTags(ConvertToVoterRegistryMessages(bulletinHandler.messages), tags);
|
||||
int counter = countMessagesWithTags(bulletinHandler.messages, tags);
|
||||
assert counter == 1 : "The server don't have the new user id.";
|
||||
}
|
||||
|
||||
|
@ -246,7 +246,7 @@ public class SimpleRegistryTest extends TestCase {
|
|||
tags.add(voterId);
|
||||
tags.add(groupId);
|
||||
|
||||
int counter = countMessagesWithTags(ConvertToVoterRegistryMessages(bulletinHandler.messages), tags);
|
||||
int counter = countMessagesWithTags(bulletinHandler.messages, tags);
|
||||
assert counter == 1 : "The server don't have the new user added to group.";
|
||||
}
|
||||
|
||||
|
@ -298,13 +298,14 @@ public class SimpleRegistryTest extends TestCase {
|
|||
jobSemaphore.acquire();
|
||||
assertEquals(1, handler.counter );
|
||||
|
||||
DummyRegistryCallBackHandler<VoterRegistryMessage> personalHandler = new DummyRegistryCallBackHandler<>();
|
||||
DummyRegistryCallBackHandler<BulletinBoardMessage> personalHandler = new DummyRegistryCallBackHandler<>();
|
||||
registry.GetPersonIDDetails(VoterID.newBuilder().setId(id).build(), personalHandler);
|
||||
|
||||
jobSemaphore.acquire(1);
|
||||
assertEquals(RegistryTags.ID_TAG + id,
|
||||
personalHandler.data.GetWantedTagFromBasicMessage(RegistryTags.ID_TAG));
|
||||
assertTrue(personalHandler.data.GetWantedTagFromBasicMessage(RegistryTags.VOTER_DATA_TAG).contains(data));
|
||||
assertEquals(RegistryTags.ID_TAG + id, CollectionMessagesUtils.GetTagByName(personalHandler
|
||||
.data.getMsg().getTagList(), RegistryTags.ID_TAG));
|
||||
assertTrue(CollectionMessagesUtils.GetTagByName(personalHandler.data.getMsg().getTagList(),
|
||||
RegistryTags.VOTER_DATA_TAG).contains(data));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue