All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.scalecube.cluster.Member Maven / Gradle / Ivy

There is a newer version: 2.7.1
Show newest version
package io.scalecube.cluster;

import static com.google.common.base.Preconditions.checkArgument;

import io.scalecube.transport.Address;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

import javax.annotation.concurrent.Immutable;

/**
 * Cluster member which represents node in the cluster and contains its id, address and metadata.
 *
 * @author Anton Kharenko
 */
@Immutable
public final class Member {

  private final String id;
  private final Address address;
  private final Map metadata;

  /**
   * Create instance of cluster member with given id, address and empty metadata.
   *
   * @param id member id
   * @param address address on which given member listens for incoming messages
   */
  public Member(String id, Address address) {
    this(id, address, Collections.emptyMap());
  }

  /**
   * Create instance of cluster member with given parameters.
   *
   * @param id member id
   * @param address address on which given member listens for incoming messages
   * @param metadata member's metadata
   */
  public Member(String id, Address address, Map metadata) {
    checkArgument(id != null);
    checkArgument(address != null);
    this.id = id;
    this.address = address;
    this.metadata = metadata != null ? new HashMap<>(metadata) : Collections.emptyMap();
  }

  public String id() {
    return id;
  }

  public Address address() {
    return address;
  }

  public Map metadata() {
    return Collections.unmodifiableMap(metadata);
  }

  @Override
  public boolean equals(Object that) {
    if (this == that) {
      return true;
    }
    if (that == null || getClass() != that.getClass()) {
      return false;
    }
    Member member = (Member) that;
    return Objects.equals(id, member.id)
        && Objects.equals(address, member.address)
        && Objects.equals(metadata, member.metadata);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, address, metadata);
  }

  @Override
  public String toString() {
    return id + "@" + address + (metadata.isEmpty() ? "" : metadata);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy