diff --git a/core/src/main/java/io/bisq/core/network/AbstractImmutableSetDecorator.java b/core/src/main/java/io/bisq/core/network/AbstractImmutableSetDecorator.java new file mode 100644 index 0000000000..551c548ed2 --- /dev/null +++ b/core/src/main/java/io/bisq/core/network/AbstractImmutableSetDecorator.java @@ -0,0 +1,27 @@ +package io.bisq.core.network; + +import com.google.common.collect.ImmutableSet; +import org.jetbrains.annotations.NotNull; + +import java.util.AbstractSet; +import java.util.Iterator; +import java.util.Set; + +class AbstractImmutableSetDecorator extends AbstractSet { + private final Set delegate; + + AbstractImmutableSetDecorator(Set delegate) { + this.delegate = ImmutableSet.copyOf(delegate); + } + + @NotNull + @Override + public Iterator iterator() { + return delegate.iterator(); + } + + @Override + public int size() { + return delegate.size(); + } +} diff --git a/core/src/main/java/io/bisq/core/network/NodeAddressLookup.java b/core/src/main/java/io/bisq/core/network/NodeAddressLookup.java index fd8520af57..4e489a5cb9 100644 --- a/core/src/main/java/io/bisq/core/network/NodeAddressLookup.java +++ b/core/src/main/java/io/bisq/core/network/NodeAddressLookup.java @@ -53,20 +53,7 @@ class NodeAddressLookup { } log.debug("We received banned seed nodes={}, seedNodeAddresses={}", bannedHosts, allNodeAddresses); - return allNodeAddresses.toSet(); - } - - private NodeAddresses getAllAddresses() { - NodeAddresses nodeAddresses = Optional.ofNullable(seedNodes) - .map(nodes -> NodeAddresses.fromString(seedNodes)) - .orElse(new NodeAddresses(Collections.emptySet())); - - if (nodeAddresses.isEmpty()) { - Set delegate = isLocalHostUsed ? DEFAULT_LOCALHOST_SEED_NODE_ADDRESSES - : DEFAULT_TOR_SEED_NODE_ADDRESSES; - nodeAddresses = NodeAddresses.fromSet(delegate, networkId); - } - return nodeAddresses; + return allNodeAddresses; } private Set getBannedHosts() { @@ -75,4 +62,27 @@ class NodeAddressLookup { .map(hosts -> (Set) hosts) .orElse(Collections.emptySet()); } + + private NodeAddresses getAllAddresses() { + NodeAddresses nodeAddresses = Optional.ofNullable(seedNodes) + .map(nodes -> NodeAddresses.fromString(seedNodes)) + .orElse(new NodeAddresses(Collections.emptySet())); + + if (nodeAddresses.isEmpty()) { + Set delegate = isLocalHostUsed + ? DEFAULT_LOCALHOST_SEED_NODE_ADDRESSES + : DEFAULT_TOR_SEED_NODE_ADDRESSES; + nodeAddresses = delegate.stream() + .filter(address -> isAddressFromNetwork(address, networkId)) + .collect(NodeAddresses.collector()); + } + return nodeAddresses; + } + + private static boolean isAddressFromNetwork(NodeAddress address, int networkId) { + String suffix = "0" + networkId; + int port = address.getPort(); + String portAsString = String.valueOf(port); + return portAsString.endsWith(suffix); + } } diff --git a/core/src/main/java/io/bisq/core/network/NodeAddresses.java b/core/src/main/java/io/bisq/core/network/NodeAddresses.java index 05134c3323..21fdd12413 100644 --- a/core/src/main/java/io/bisq/core/network/NodeAddresses.java +++ b/core/src/main/java/io/bisq/core/network/NodeAddresses.java @@ -1,73 +1,43 @@ package io.bisq.core.network; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; import io.bisq.network.p2p.NodeAddress; import org.apache.commons.lang3.StringUtils; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import java.util.stream.Collector; import java.util.stream.Collectors; -// TODO to many methods -class NodeAddresses { - private final Set delegate; - +class NodeAddresses extends AbstractImmutableSetDecorator { static NodeAddresses fromString(String seedNodes) { String trimmed = StringUtils.deleteWhitespace(seedNodes); String[] nodes = trimmed.split(","); - Set addresses = Arrays.stream(nodes) + return Arrays.stream(nodes) .map(NodeAddress::new) - .collect(Collectors.toSet()); - return new NodeAddresses(addresses); - } - - static NodeAddresses fromSet(Set addresses, int networkId) { - Set delegate = addresses.stream() - .filter(address -> isAddressFromNetwork(address, networkId)) - .collect(Collectors.toSet()); - return new NodeAddresses(delegate); + .collect(collector()); } NodeAddresses(Set delegate) { - this.delegate = delegate; - } - - private static boolean isAddressFromNetwork(NodeAddress address, int networkId) { - String suffix = "0" + networkId; - int port = address.getPort(); - String portAsString = String.valueOf(port); - return portAsString.endsWith(suffix); + super(delegate); } NodeAddresses excludeByHost(Set hosts) { - Set addresses = new HashSet<>(delegate); - addresses.removeIf(address -> { + Set copy = new HashSet<>(this); + copy.removeIf(address -> { String hostName = address.getHostName(); return !hosts.contains(hostName); }); - return new NodeAddresses(addresses); + return new NodeAddresses(copy); } NodeAddresses excludeByFullAddress(String fullAddress) { - Set addresses = new HashSet<>(delegate); - addresses.removeIf(address -> fullAddress.equals(address.getFullAddress())); - return new NodeAddresses(delegate); + Set copy = new HashSet<>(this); + copy.removeIf(address -> fullAddress.equals(address.getFullAddress())); + return new NodeAddresses(copy); } - boolean isEmpty() { - return delegate.isEmpty(); - } - - Set toSet() { - return ImmutableSet.copyOf(delegate); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("delegate", delegate) - .toString(); + static Collector collector() { + return Collectors.collectingAndThen(Collectors.toSet(), NodeAddresses::new); } }