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

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

package io.scalecube.services;

import static io.scalecube.services.api.DynamicQualifier.isDynamicQualifier;

import io.scalecube.services.api.DynamicQualifier;
import io.scalecube.services.api.Qualifier;
import io.scalecube.services.methods.ServiceMethodDefinition;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;

/**
 * Service reference. This is merge of service method information together with service registration
 * and with service endpoint.
 */
public class ServiceReference {

  private final String endpointId;
  private final String endpointName;
  private final String namespace;
  private final String action;
  private final String qualifier;
  private final DynamicQualifier dynamicQualifier;
  private final Set contentTypes;
  private final Map tags;
  private final Address address;
  private final boolean isSecured;
  private final String restMethod;
  private final List allowedRoles;

  /**
   * Constructor.
   *
   * @param serviceMethodDefinition serviceMethodDefinition
   * @param serviceRegistration serviceRegistration
   * @param serviceEndpoint serviceEndpoint
   */
  public ServiceReference(
      ServiceMethodDefinition serviceMethodDefinition,
      ServiceRegistration serviceRegistration,
      ServiceEndpoint serviceEndpoint) {
    this.endpointId = serviceEndpoint.id();
    this.endpointName = serviceEndpoint.name();
    this.namespace = serviceRegistration.namespace();
    this.action = serviceMethodDefinition.action();
    this.qualifier = Qualifier.asString(namespace, action);
    this.dynamicQualifier = isDynamicQualifier(qualifier) ? DynamicQualifier.from(qualifier) : null;
    this.contentTypes = serviceEndpoint.contentTypes();
    this.tags = mergeTags(serviceMethodDefinition, serviceRegistration, serviceEndpoint);
    this.address = serviceEndpoint.address();
    this.isSecured = serviceMethodDefinition.isSecured();
    this.restMethod = serviceMethodDefinition.restMethod();
    this.allowedRoles = serviceMethodDefinition.allowedRoles();
  }

  public String endpointId() {
    return endpointId;
  }

  public String endpointName() {
    return endpointName;
  }

  public String namespace() {
    return namespace;
  }

  public String action() {
    return action;
  }

  public String qualifier() {
    return qualifier;
  }

  public DynamicQualifier dynamicQualifier() {
    return dynamicQualifier;
  }

  public Set contentTypes() {
    return contentTypes;
  }

  public Map tags() {
    return tags;
  }

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

  public boolean isSecured() {
    return isSecured;
  }

  public String restMethod() {
    return restMethod;
  }

  public List allowedRoles() {
    return allowedRoles;
  }

  public boolean hasAllowedRoles() {
    return allowedRoles.size() > 0;
  }

  private static Map mergeTags(
      ServiceMethodDefinition serviceMethodDefinition,
      ServiceRegistration serviceRegistration,
      ServiceEndpoint serviceEndpoint) {
    Map tags = new HashMap<>();
    tags.putAll(serviceEndpoint.tags());
    tags.putAll(serviceRegistration.tags());
    tags.putAll(serviceMethodDefinition.tags());
    return tags;
  }

  @Override
  public String toString() {
    return new StringJoiner(", ", ServiceReference.class.getSimpleName() + "[", "]")
        .add("endpointId='" + endpointId + "'")
        .add("endpointName='" + endpointName + "'")
        .add("namespace='" + namespace + "'")
        .add("action='" + action + "'")
        .add("qualifier='" + qualifier + "'")
        .add("dynamicQualifier=" + dynamicQualifier)
        .add("contentTypes=" + contentTypes)
        .add("tags=" + tags)
        .add("address=" + address)
        .add("isSecured=" + isSecured)
        .add("restMethod='" + restMethod + "'")
        .add("allowedRoles=" + allowedRoles)
        .toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy