Extracted AbstractImmutableSetDecorator class

This commit is contained in:
Sergey Rozhnov 2018-02-15 16:26:44 +04:00
parent 180eb6bf9f
commit 9889144d90
3 changed files with 64 additions and 57 deletions

View file

@ -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<T> extends AbstractSet<T> {
private final Set<T> delegate;
AbstractImmutableSetDecorator(Set<T> delegate) {
this.delegate = ImmutableSet.copyOf(delegate);
}
@NotNull
@Override
public Iterator<T> iterator() {
return delegate.iterator();
}
@Override
public int size() {
return delegate.size();
}
}

View file

@ -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<NodeAddress> delegate = isLocalHostUsed ? DEFAULT_LOCALHOST_SEED_NODE_ADDRESSES
: DEFAULT_TOR_SEED_NODE_ADDRESSES;
nodeAddresses = NodeAddresses.fromSet(delegate, networkId);
}
return nodeAddresses;
return allNodeAddresses;
}
private Set<String> getBannedHosts() {
@ -75,4 +62,27 @@ class NodeAddressLookup {
.map(hosts -> (Set<String>) 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<NodeAddress> 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);
}
}

View file

@ -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<NodeAddress> delegate;
class NodeAddresses extends AbstractImmutableSetDecorator<NodeAddress> {
static NodeAddresses fromString(String seedNodes) {
String trimmed = StringUtils.deleteWhitespace(seedNodes);
String[] nodes = trimmed.split(",");
Set<NodeAddress> addresses = Arrays.stream(nodes)
return Arrays.stream(nodes)
.map(NodeAddress::new)
.collect(Collectors.toSet());
return new NodeAddresses(addresses);
}
static NodeAddresses fromSet(Set<NodeAddress> addresses, int networkId) {
Set<NodeAddress> delegate = addresses.stream()
.filter(address -> isAddressFromNetwork(address, networkId))
.collect(Collectors.toSet());
return new NodeAddresses(delegate);
.collect(collector());
}
NodeAddresses(Set<NodeAddress> 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<String> hosts) {
Set<NodeAddress> addresses = new HashSet<>(delegate);
addresses.removeIf(address -> {
Set<NodeAddress> 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<NodeAddress> addresses = new HashSet<>(delegate);
addresses.removeIf(address -> fullAddress.equals(address.getFullAddress()));
return new NodeAddresses(delegate);
Set<NodeAddress> copy = new HashSet<>(this);
copy.removeIf(address -> fullAddress.equals(address.getFullAddress()));
return new NodeAddresses(copy);
}
boolean isEmpty() {
return delegate.isEmpty();
}
Set<NodeAddress> toSet() {
return ImmutableSet.copyOf(delegate);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("delegate", delegate)
.toString();
static Collector<NodeAddress, ?, NodeAddresses> collector() {
return Collectors.collectingAndThen(Collectors.toSet(), NodeAddresses::new);
}
}