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

io.scalecube.services.ServiceEndpoint Maven / Gradle / Ivy

package io.scalecube.services;

import io.scalecube.net.Address;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class ServiceEndpoint {

  private String id;
  private Address address;
  private Set contentTypes;
  private Map tags;
  private Collection serviceRegistrations;
  private ServiceGroup serviceGroup;

  /**
   * Constructor for SerDe.
   *
   * @deprecated exposed only for de/serialization purpose.
   */
  public ServiceEndpoint() {}

  private ServiceEndpoint(Builder builder) {
    this.id = builder.id;
    this.address = builder.address;
    this.contentTypes = Collections.unmodifiableSet(new HashSet<>(builder.contentTypes));
    this.tags = new HashMap<>(builder.tags);
    this.serviceRegistrations =
        Collections.unmodifiableCollection(new ArrayList<>(builder.serviceRegistrations));
    this.serviceGroup = builder.serviceGroup;
  }

  public static Builder builder() {
    return new Builder();
  }

  public String id() {
    return id;
  }

  public Address address() {
    return address;
  }

  public Set contentTypes() {
    return contentTypes;
  }

  public Map tags() {
    return tags;
  }

  public ServiceGroup serviceGroup() {
    return serviceGroup;
  }

  /**
   * Return collection of service registratrions.
   *
   * @return collection of {@link ServiceRegistration}
   */
  public Collection serviceRegistrations() {
    return serviceRegistrations;
  }

  /**
   * Creates collection of service references from this service endpoint.
   *
   * @return collection of {@link ServiceReference}
   */
  public Collection serviceReferences() {
    return serviceRegistrations.stream()
        .flatMap(sr -> sr.methods().stream().map(sm -> new ServiceReference(sm, sr, this)))
        .collect(Collectors.toList());
  }

  @Override
  public String toString() {
    return "ServiceEndpoint{"
        + "id='"
        + id
        + '\''
        + ", address='"
        + address
        + '\''
        + ", tags="
        + tags
        + ", serviceRegistrations="
        + serviceRegistrations
        + '}';
  }

  public static class Builder {

    private String id;
    private Address address;
    private Set contentTypes = Collections.emptySet();
    private Map tags = Collections.emptyMap();
    private Collection serviceRegistrations = new ArrayList<>();
    private ServiceGroup serviceGroup;

    private Builder() {}

    public Builder id(String id) {
      this.id = id;
      return this;
    }

    public Builder address(Address address) {
      this.address = address;
      return this;
    }

    public Builder contentTypes(Set contentTypes) {
      this.contentTypes = contentTypes;
      return this;
    }

    public Builder tags(Map tags) {
      this.tags = tags;
      return this;
    }

    public Builder appendServiceRegistrations(
        Collection serviceRegistrations) {
      this.serviceRegistrations.addAll(serviceRegistrations);
      return this;
    }

    public Builder serviceRegistrations(Collection serviceRegistrations) {
      this.serviceRegistrations = serviceRegistrations;
      return this;
    }

    public Builder serviceGroup(String groupId, int groupSize) {
      this.serviceGroup = new ServiceGroup(groupId, groupSize);
      return this;
    }

    public ServiceEndpoint build() {
      return new ServiceEndpoint(this);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy