package com.airlock.iam.base.api.domain.model.exception;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;

public final class ServiceConfigurationException extends FailureException {
   public ServiceConfigurationException(String message) {
      super(message);
   }

   public ServiceConfigurationException(String message, Throwable cause) {
      super(message, cause);
   }

   public static <T> T checkNotNull(T reference) throws ServiceConfigurationException {
      return checkNotNull(reference, "A non-null object is required");
   }

   public static <T> T checkNotNull(T reference, String errorMessage) throws ServiceConfigurationException {
      if (reference == null) {
         throw new ServiceConfigurationException(errorMessage);
      } else {
         return reference;
      }
   }

   public static <T> T checkPresent(Optional<T> reference, String errorMessage) throws ServiceConfigurationException {
      return reference.orElseThrow(() -> new ServiceConfigurationException(errorMessage));
   }

   @SuppressFBWarnings(value = "HSM_HIDING_METHOD", justification = "Never used on an instance, always with fully qualified reference.")
   public static void checkTrue(boolean condition, String errorMessage) throws ServiceConfigurationException {
      if (!condition) {
         throw new ServiceConfigurationException(errorMessage);
      }
   }
}
