content: package org.sql2o.tools;
  
  /**
   * Detects whether optional sql2o features are available.
   *
   * @author Alden Quimby
   */
  @SuppressWarnings("UnusedDeclaration")
  public final class FeatureDetector {
  
      private FeatureDetector()
      {}
  
      static {
          setCacheUnderscoreToCamelcaseEnabled(true); // enabled by default
      }
  
      private static Boolean jodaTimeAvailable;
      private static Boolean slf4jAvailable;
      private static Boolean oracleAvailable;
      private static boolean cacheUnderscoreToCamelcaseEnabled;
  
      /**
       * @return {@code true} if Joda-Time is available, {@code false} otherwise.
       */
      public static boolean isJodaTimeAvailable() {
          if (jodaTimeAvailable == null) {
              jodaTimeAvailable = ClassUtils.isPresent("org.joda.time.DateTime");
          }
          return jodaTimeAvailable;
      }
  
      /**
       * @return {@code true} if Slf4j is available, {@code false} otherwise.
       */
      public static boolean isSlf4jAvailable() {
          if (slf4jAvailable == null) {
              slf4jAvailable = ClassUtils.isPresent("org.slf4j.Logger");
          }
          return slf4jAvailable;
      }
  
      /**
       * @return {@code true} if oracle.sql is available, {@code false} otherwise.
       */
      public static boolean isOracleAvailable() {
          if (oracleAvailable == null) {
              oracleAvailable = ClassUtils.isPresent("oracle.sql.TIMESTAMP");
          }
          return oracleAvailable;
      }
  
      /**
       *
       * @return {@code true} if caching of underscore to camelcase is enabled.
       */
      public static boolean isCacheUnderscoreToCamelcaseEnabled() {
          return cacheUnderscoreToCamelcaseEnabled;
      }
  
      /**
       * Turn caching of underscore to camelcase on or off.
       */
      public static void setCacheUnderscoreToCamelcaseEnabled(boolean cacheUnderscoreToCamelcaseEnabled) {
          FeatureDetector.cacheUnderscoreToCamelcaseEnabled = cacheUnderscoreToCamelcaseEnabled;
      }
  }