diff --git a/src/main/java/org/apache/gossip/GossipService.java b/src/main/java/org/apache/gossip/GossipService.java index 866dc03..b149719 100644 --- a/src/main/java/org/apache/gossip/GossipService.java +++ b/src/main/java/org/apache/gossip/GossipService.java @@ -63,8 +63,7 @@ public class GossipService { gossipManager = RandomGossipManager.newBuilder() .withId(id) .cluster(cluster) - .address(ipAddress) - .port(port) + .uri(uri) .settings(settings) .gossipMembers(gossipMembers) .listener(listener) diff --git a/src/main/java/org/apache/gossip/manager/random/RandomGossipManager.java b/src/main/java/org/apache/gossip/manager/random/RandomGossipManager.java index 7aa4435..1d2075e 100644 --- a/src/main/java/org/apache/gossip/manager/random/RandomGossipManager.java +++ b/src/main/java/org/apache/gossip/manager/random/RandomGossipManager.java @@ -26,9 +26,77 @@ import org.apache.gossip.manager.impl.OnlyProcessReceivedPassiveGossipThread; import java.net.URI; import java.util.List; +import java.util.ArrayList; +import java.util.List; + public class RandomGossipManager extends GossipManager { - public RandomGossipManager(String cluster, URI uri, String id, - GossipSettings settings, List gossipMembers, GossipListener listener) { + + public static ManagerBuilder newBuilder() { + return new ManagerBuilder(); + } + + public static final class ManagerBuilder { + private String cluster; + private URI uri; + private String id; + private GossipSettings settings; + private List gossipMembers; + private GossipListener listener; + + private ManagerBuilder() {} + + private void checkArgument(boolean check, String msg) { + if (!check) { + throw new IllegalArgumentException(msg); + } + } + + public ManagerBuilder cluster(String cluster) { + this.cluster = cluster; + return this; + } + + public ManagerBuilder withId(String id) { + this.id = id; + return this; + } + + public ManagerBuilder settings(GossipSettings settings) { + this.settings = settings; + return this; + } + + public ManagerBuilder gossipMembers(List members) { + this.gossipMembers = members; + return this; + } + + public ManagerBuilder listener(GossipListener listener) { + this.listener = listener; + return this; + } + + public ManagerBuilder uri(URI uri){ + this.uri = uri; + return this; + } + + public RandomGossipManager build() { + checkArgument(id != null, "You must specify an id"); + checkArgument(cluster != null, "You must specify a cluster name"); + checkArgument(settings != null, "You must specify gossip settings"); + checkArgument(uri != null, "You must specify a uri"); + + if (this.gossipMembers == null) { + this.gossipMembers = new ArrayList<>(); + } + + return new RandomGossipManager(cluster, uri, id, settings, gossipMembers, listener); + } + } + + private RandomGossipManager(String cluster, URI uri, String id, GossipSettings settings, + List gossipMembers, GossipListener listener) { super(OnlyProcessReceivedPassiveGossipThread.class, RandomActiveGossipThread.class, cluster, uri, id, settings, gossipMembers, listener); } diff --git a/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java b/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java index 38b8ab4..d753676 100644 --- a/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java +++ b/src/test/java/org/apache/gossip/manager/RandomGossipManagerBuilderTest.java @@ -28,6 +28,9 @@ import org.junit.Test; import javax.management.Notification; import javax.management.NotificationListener; + +import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; @@ -63,12 +66,11 @@ public class RandomGossipManagerBuilderTest { } @Test - public void createMembersListIfNull() { + public void createMembersListIfNull() throws URISyntaxException { RandomGossipManager gossipManager = RandomGossipManager.newBuilder() .withId("id") .cluster("aCluster") - .port(8080) - .address("localhost") + .uri(new URI("udp://localhost:2000")) .settings(new GossipSettings()) .gossipMembers(null).build(); @@ -76,19 +78,17 @@ public class RandomGossipManagerBuilderTest { } @Test - public void useMemberListIfProvided() { - LocalGossipMember member = new LocalGossipMember("aCluster", "localhost", 2000, "aGossipMember", + public void useMemberListIfProvided() throws URISyntaxException { + LocalGossipMember member = new LocalGossipMember("aCluster", new URI("udp://localhost:2000"), "aGossipMember", System.currentTimeMillis(), new TestNotificationListener(), 60000); - List memberList = new ArrayList<>(); memberList.add(member); - RandomGossipManager gossipManager = RandomGossipManager.newBuilder() .withId("id") .cluster("aCluster") .settings(new GossipSettings()) + .uri(new URI("udp://localhost:8000")) .gossipMembers(memberList).build(); - Assert.assertEquals(1, gossipManager.getMemberList().size()); Assert.assertEquals(member.getId(), gossipManager.getMemberList().get(0).getId()); }