package com.airlock.iam.plugin.framework.misc.exception;

import com.airlock.iam.plugin.api.config.ConfigurationContext;
import com.airlock.iam.plugin.api.config.ConfigurationEnvironment;
import com.airlock.iam.plugin.api.config.PluginConfiguration;
import com.airlock.iam.plugin.api.exception.PropertyConfigurationException;

public final class PropertyConfigurationApplicationException extends PropertyConfigurationException {
   public PropertyConfigurationApplicationException(
      String propertyName, PluginConfiguration pluginConfiguration, ConfigurationEnvironment env, ConfigurationContext configContext, Throwable causeThrowable
   ) {
      super(
         pluginConfiguration,
         env,
         configContext,
         "Cannot apply configuration value to property" + (causeThrowable == null ? "" : " (" + causeThrowable.getMessage() + ")") + ".",
         causeThrowable,
         new String[]{propertyName}
      );
   }

   public PropertyConfigurationApplicationException(
      String propertyName, PluginConfiguration pluginConfiguration, ConfigurationEnvironment env, ConfigurationContext configContext, String message
   ) {
      super(pluginConfiguration, env, configContext, message, new String[]{propertyName});
   }

   public PropertyConfigurationApplicationException(
      String propertyName,
      PluginConfiguration pluginConfiguration,
      ConfigurationEnvironment env,
      ConfigurationContext configContext,
      String message,
      Throwable causeThrowable
   ) {
      super(pluginConfiguration, env, configContext, message, causeThrowable, new String[]{propertyName});
   }

   public PropertyConfigurationApplicationException(
      String propertyName, PluginConfiguration pluginConfiguration, ConfigurationEnvironment env, ConfigurationContext configContext
   ) {
      super(pluginConfiguration, env, configContext, "Cannot apply configuration value to property.", new String[]{propertyName});
   }
}
