package com.sun.identity.saml2.logging;

import com.sun.identity.plugin.log.LogException;
import com.sun.identity.plugin.log.LogManager;
import com.sun.identity.plugin.log.Logger;
import com.sun.identity.saml2.common.SAML2Utils;
import java.util.Map;
import java.util.logging.Level;

public class LogUtil {
   public static final String INVALID_SP = "INVALID_SP";
   public static final String INVALID_IDP = "INVALID_IDP";
   public static final String SP_METADATA_ERROR = "SP_METADATA_ERROR";
   public static final String IDP_METADATA_ERROR = "IDP_METADATA_ERROR";
   public static final String SSO_NOT_FOUND = "SSO_NOT_FOUND";
   public static final String SLO_NOT_FOUND = "SLO_NOT_FOUND";
   public static final String REDIRECT_TO_SP = "REDIRECT_TO_SP";
   public static final String REDIRECT_TO_IDP = "REDIRECT_TO_IDP";
   public static final String REDIRECT_TO_SP_OR_IDP = "REDIRECT_TO_SP_OR_IDP";
   public static final String RESPONSE_NOT_FOUND_FROM_CACHE = "RESPONSE_NOT_FOUND_FROM_CACHE";
   public static final String MISSING_ARTIFACT = "MISSING_ARTIFACT";
   public static final String RECEIVED_ARTIFACT = "RECEIVED_ARTIFACT";
   public static final String IDP_META_NOT_FOUND = "IDP_META_NOT_FOUND";
   public static final String CANNOT_CREATE_ARTIFACT_RESOLVE = "CANNOT_CREATE_ARTIFACT_RESOLVE";
   public static final String CANNOT_GET_SOAP_RESPONSE = "CANNOT_GET_SOAP_RESPONSE";
   public static final String GOT_RESPONSE_FROM_ARTIFACT = "GOT_RESPONSE_FROM_ARTIFACT";
   public static final String IDP_NOT_FOUND = "IDP_NOT_FOUND";
   public static final String ARTIFACT_RESOLUTION_URL_NOT_FOUND = "ARTIFACT_RESOLUTION_URL_NOT_FOUND";
   public static final String SOAP_ERROR = "SOAP_ERROR";
   public static final String CANNOT_INSTANTIATE_ARTIFACT_RESPONSE = "CANNOT_INSTANTIATE_ARTIFACT_RESPONSE";
   public static final String MISSING_ARTIFACT_RESPONSE = "MISSING_ARTIFACT_RESPONSE";
   public static final String ARTIFACT_RESPONSE_INVALID_SIGNATURE = "ARTIFACT_RESPONSE_INVALID_SIGNATURE";
   public static final String ARTIFACT_RESPONSE_INVALID_INRESPONSETO = "ARTIFACT_RESPONSE_INVALID_INRESPONSETO";
   public static final String ARTIFACT_RESPONSE_INVALID_ISSUER = "ARTIFACT_RESPONSE_INVALID_ISSUER";
   public static final String ARTIFACT_RESPONSE_INVALID_STATUS_CODE = "ARTIFACT_RESPONSE_INVALID_STATUS_CODE";
   public static final String CANNOT_INSTANTIATE_RESPONSE_ARTIFACT = "CANNOT_INSTANTIATE_RESPONSE_ARTIFACT";
   public static final String MISSING_SAML_RESPONSE_FROM_POST = "MISSING_SAML_RESPONSE_FROM_POST";
   public static final String CANNOT_INSTANTIATE_RESPONSE_POST = "CANNOT_INSTANTIATE_RESPONSE_POST";
   public static final String CANNOT_DECODE_RESPONSE = "CANNOT_DECODE_RESPONSE";
   public static final String GOT_RESPONSE_FROM_POST = "GOT_RESPONSE_FROM_POST";
   public static final String SUCCESS_FED_SSO = "SUCCESS_FED_SSO";
   public static final String FED_INFO_WRITTEN = "FED_INFO_WRITTEN";
   public static final String INVALID_INRESPONSETO_RESPONSE = "INVALID_INRESPONSETO_RESPONSE";
   public static final String INVALID_ISSUER_RESPONSE = "INVALID_ISSUER_RESPONSE";
   public static final String INVALID_ISSUER_REQUEST = "INVALID_ISSUER_REQUEST";
   public static final String WRONG_STATUS_CODE = "WRONG_STATUS_CODE";
   public static final String ASSERTION_NOT_ENCRYPTED = "ASSERTION_NOT_ENCRYPTED";
   public static final String MISSING_ASSERTION = "MISSING_ASSERTION";
   public static final String INVALID_ISSUER_ASSERTION = "INVALID_ISSUER_ASSERTION";
   public static final String MISMATCH_ISSUER_ASSERTION = "MISMATCH_ISSUER_ASSERTION";
   public static final String INVALID_SIGNATURE_ASSERTION = "INVALID_SIGNATURE_ASSERTION";
   public static final String MISSING_SUBJECT_COMFIRMATION_DATA = "MISSING_SUBJECT_COMFIRMATION_DATA";
   public static final String MISSING_RECIPIENT = "MISSING_RECIPIENT";
   public static final String WRONG_RECIPIENT = "WRONG_RECIPIENT";
   public static final String INVALID_TIME_SUBJECT_CONFIRMATION_DATA = "INVALID_TIME_SUBJECT_CONFIRMATION_DATA";
   public static final String CONTAINED_NOT_BEFORE = "CONTAINED_NOT_BEFORE";
   public static final String WRONG_INRESPONSETO_ASSERTION = "WRONG_INRESPONSETO_ASSERTION";
   public static final String MISSING_CONDITIONS = "MISSING_CONDITIONS";
   public static final String MISSING_AUDIENCE_RESTRICTION = "MISSING_AUDIENCE_RESTRICTION";
   public static final String FOUND_AUTHN_ASSERTION = "FOUND_AUTHN_ASSERTION";
   public static final String NO_ACS_URL = "NO_ACS_URL";
   public static final String NO_RETURN_BINDING = "NO_RETURN_BINDING";
   public static final String POST_TO_TARGET_FAILED = "POST_TO_TARGET_FAILED";
   public static final String CANNOT_CREATE_ARTIFACT = "CANNOT_CREATE_ARTIFACT";
   public static final String RECEIVED_AUTHN_REQUEST = "RECEIVED_AUTHN_REQUEST";
   public static final String POST_RESPONSE = "POST_RESPONSE";
   public static final String SEND_ARTIFACT = "SEND_ARTIFACT";
   public static final String SEND_ECP_RESPONSE = "SEND_ECP_RESPONSE";
   public static final String SEND_ECP_RESPONSE_FAILED = "SEND_ECP_RESPONSE_FAILED";
   public static final String RECEIVED_AUTHN_REQUEST_ECP = "RECEIVED_AUTHN_REQUEST_ECP";
   public static final String INVALID_SOAP_MESSAGE = "INVALID_SOAP_MESSAGE";
   public static final String ARTIFACT_RESPONSE = "ARTIFACT_RESPONSE";
   public static final String GOT_ENTITY_DESCRIPTOR = "GOT_ENTITY_DESCRIPTOR";
   public static final String GOT_INVALID_ENTITY_DESCRIPTOR = "GOT_INVALID_ENTITY_DESCRIPTOR";
   public static final String CONFIG_ERROR_GET_ENTITY_DESCRIPTOR = "CONFIG_ERROR_GET_ENTITY_DESCRIPTOR";
   public static final String GOT_ENTITY_CONFIG = "GOT_ENTITY_CONFIG";
   public static final String GOT_INVALID_ENTITY_CONFIG = "GOT_INVALID_ENTITY_CONFIG";
   public static final String CONFIG_ERROR_GET_ENTITY_CONFIG = "CONFIG_ERROR_GET_ENTITY_CONFIG";
   public static final String CONFIG_ERROR_GET_ALL_HOSTED_ENTITIES = "CONFIG_ERROR_GET_ALL_HOSTED_ENTITIES";
   public static final String GOT_ALL_HOSTED_ENTITIES = "GOT_ALL_HOSTED_ENTITIES";
   public static final String CONFIG_ERROR_GET_ALL_REMOTE_ENTITIES = "CONFIG_ERROR_GET_ALL_REMOTE_ENTITIES";
   public static final String GOT_ALL_REMOTE_ENTITIES = "GOT_ALL_REMOTE_ENTITIES";
   public static final String CONFIG_ERROR_GET_ALL_ENTITIES = "CONFIG_ERROR_GET_ALL_ENTITIES";
   public static final String GOT_ALL_ENTITIES = "GOT_ALL_ENTITIES";
   public static final String NAME_ID = "NameID";
   public static final String POST_RESPONSE_INVALID_SIGNATURE = "POST_RESPONSE_INVALID_SIGNATURE";
   private static final String SAML2_LOG = "SAML2";
   private static Logger logger;

   public static void access(Level level, String msgid, String[] data) {
      access(level, msgid, data, null, null);
   }

   public static void access(Level level, String msgid, String[] data, Object session) {
      access(level, msgid, data, session, null);
   }

   public static void access(Level level, String msgid, String[] data, Object session, Map<String, String> props) {
      if (logger != null) {
         try {
            logger.access(level, msgid, data, session, props);
         } catch (LogException le) {
            SAML2Utils.DEBUG.error("LogUtil.access: Couldn't write log:", le);
         }
      }
   }

   public static void error(Level level, String msgid, String[] data) {
      error(level, msgid, data, null, null);
   }

   public static void error(Level level, String msgid, String[] data, Object session) {
      error(level, msgid, data, session, null);
   }

   public static void error(Level level, String msgid, String[] data, Object session, Map<String, String> props) {
      if (logger != null) {
         try {
            logger.error(level, msgid, data, session, props);
         } catch (LogException le) {
            SAML2Utils.DEBUG.error("LogUtil.error:Couldn't write log:", le);
         }
      }
   }

   public boolean isLogEnabled() {
      return logger == null ? false : logger.isLogEnabled();
   }

   public static boolean isAccessLoggable(Level level) {
      return logger == null ? false : logger.isAccessLoggable(level);
   }

   public static boolean isErrorLoggable(Level level) {
      return logger == null ? false : logger.isErrorLoggable(level);
   }

   static {
      try {
         logger = LogManager.getLogger("SAML2");
      } catch (LogException le) {
         SAML2Utils.DEBUG.error("LogUtil.static: Error getting logger:", le);
      }
   }
}
