From 6812cefe6168c6a6142a9633138c0f07ae135dd5 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 31 Jan 2014 14:55:30 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1288 :    Migrate I18n and logging support to i18n framework and SLF4J

---
 opendj3-server-dev/src/server/org/opends/server/loggers/TraceSettings.java |  322 +++++++++++++++++++++--------------------------------
 1 files changed, 126 insertions(+), 196 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TraceSettings.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TraceSettings.java
index 5a60900..08b315c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TraceSettings.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TraceSettings.java
@@ -26,64 +26,99 @@
  */
 
 package org.opends.server.loggers;
+
+import java.util.ArrayList;
+import java.util.List;
+
 import org.forgerock.i18n.LocalizableMessage;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DebugLogCategory;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.DebugTargetCfg;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.ResultCode;
-import org.opends.server.admin.server.ConfigurationChangeListener;
-import org.opends.server.admin.std.meta.DebugTargetCfgDefn;
-import org.opends.server.admin.std.server.DebugTargetCfg;
-
-import java.util.*;
 
 /**
  * This class encapsulates the trace settings in effect at a given traceing
  * scope.
  */
-public class TraceSettings
-    implements ConfigurationChangeListener<DebugTargetCfg>
+public class TraceSettings implements
+    ConfigurationChangeListener<DebugTargetCfg>
 {
   /** A TraceSettings object representing a fully disabled trace state. */
   public static final TraceSettings DISABLED =
-      new TraceSettings(DebugLogLevel.DISABLED);
+      new TraceSettings(Level.DISABLED);
 
   private static final String STACK_DUMP_KEYWORD = "stack";
   private static final String INCLUDE_CAUSE_KEYWORD = "cause";
   private static final String SUPPRESS_ARG_KEYWORD = "noargs";
   private static final String SUPPRESS_RETVAL_KEYWORD = "noretval";
-  private static final String INCLUDE_CATEGORY_KEYWORD = "category";
-  private static final String LEVEL_KEYWORD = "level";
+  private static final String ENABLED_KEYWORD = "enabled";
+  private static final String EXCEPTIONS_ONLY_KEYWORD = "exceptionsonly";
 
   /**
-   * The log level of this setting.
+   * Represents the level of trace.
    */
-  LogLevel level;
+  enum Level
+  {
+    /** Log nothing. **/
+    DISABLED,
+
+    /** Log only exceptions. **/
+    EXCEPTIONS_ONLY,
+
+    /** Log everything. */
+    ALL;
+
+    /**
+     * Returns the level corresponding to provided options.
+     *
+     * @param isEnabled
+     *          Indicates if tracer is enabled.
+     * @param isDebugExceptionsOnly
+     *          Indicates if tracer should log only exceptions.
+     * @return the level corresponding to options
+     */
+    static Level getLevel(boolean isEnabled, boolean isDebugExceptionsOnly)
+    {
+      if (isEnabled)
+      {
+        if (isDebugExceptionsOnly)
+        {
+          return Level.EXCEPTIONS_ONLY;
+        }
+        else
+        {
+          return Level.ALL;
+        }
+      }
+      return Level.DISABLED;
+    }
+
+  }
 
   /**
-   * The log categories for this setting.
+   * The level of this setting.
    */
-  Set<LogCategory> includeCategories;
+  private Level level;
 
   /**
    * Indicates if method arguments should be logged.
    */
-  boolean noArgs;
+  private boolean noArgs;
 
   /**
    * Indicates if method return values should be logged.
    */
-  boolean noRetVal;
+  private boolean noRetVal;
 
   /**
    * The level of stack frames to include.
    */
-  int stackDepth;
+  private int stackDepth;
 
   /**
    * Indicates if the cause exception is included in exception messages.
    */
-  boolean includeCause;
+  private boolean includeCause;
 
   private DebugTargetCfg currentConfig;
 
@@ -92,69 +127,42 @@
    */
   public TraceSettings()
   {
-    this(DebugLogLevel.VERBOSE, null, false, false, 0, false);
+    this(Level.ALL, false, false, 0, false);
 
   }
 
   /**
-   * Construct new trace settings at the specified log level.
+   * Construct new trace settings at provided level.
    *
-   * @param level the log level for this setting.
+   * @param level
+   *          Level for this settings.
    */
-  public TraceSettings(LogLevel level)
+  public TraceSettings(Level level)
   {
-    this(level, null, false, false, 0, false);
+    this(level, false, false, 0, false);
 
   }
 
   /**
-   * Construct new trace settings at the specified log level and including
-   * the categories.
+   * Construct new trace settings at the specified level. Optionally turn off
+   * arguments, return value in entry and exit messages, and specifying the
+   * depth of stack traces and whether to include the cause of exceptions.
    *
-   * @param level the log level for this setting.
-   * @param includeCategories the categories to include in this setting.
+   * @param level
+   *          the level for this setting.
+   * @param noArgs
+   *          whether to include arguments in the log messages.
+   * @param noRetVal
+   *          whether to include return values in the log messages.
+   * @param stackDepth
+   *          the stack depth to display in log messages.
+   * @param includeCause
+   *          whether to include the cause of exceptions.
    */
-  public TraceSettings(LogLevel level, Set<LogCategory> includeCategories)
-  {
-    this(level, includeCategories, false, false, 0, false);
-
-  }
-
-  /**
-   * Construct new trace settings at the specified log level and including
-   * the categories. Optionally turn off arguments and return value in entry
-   * and exit messages.
-   *
-   * @param level the log level for this setting.
-   * @param includeCategories the categories to include in this setting.
-   * @param noArgs whether to include arguments in the log messages.
-   * @param noRetVal whether to include return values in the log messages.
-   */
-  public TraceSettings(LogLevel level, Set<LogCategory> includeCategories,
-                       boolean noArgs, boolean noRetVal)
-  {
-    this(level, includeCategories, noArgs, noRetVal, 0, false);
-  }
-
-  /**
-   * Construct new trace settings at the specified log level and including
-   * the categories. Optionally turn off arguments, return value in entry
-   * and exit messages, and specifying the depth of stack traces and whether
-   * to include the cause of exceptions.
-   *
-   * @param level the log level for this setting.
-   * @param includeCategories the categories to include in this setting.
-   * @param noArgs whether to include arguments in the log messages.
-   * @param noRetVal whether to include return values in the log messages.
-   * @param stackDepth the stack depth to display in log messages.
-   * @param includeCause whether to include the cause of exceptions.
-   */
-  public TraceSettings(LogLevel level, Set<LogCategory> includeCategories,
-                       boolean noArgs, boolean noRetVal, int stackDepth,
-                       boolean includeCause)
+  public TraceSettings(Level level, boolean noArgs,
+      boolean noRetVal, int stackDepth, boolean includeCause)
   {
     this.level = level;
-    this.includeCategories = includeCategories;
     this.noArgs = noArgs;
     this.noRetVal = noRetVal;
     this.stackDepth = stackDepth;
@@ -164,27 +172,14 @@
   /**
    * Construct a new trace settings from the provided configuration.
    *
-   * @param config The debug target configuration that contains the information
-   *               to use to initialize this trace setting.
+   * @param config
+   *          The debug target configuration that contains the information to
+   *          use to initialize this trace setting.
    */
   public TraceSettings(DebugTargetCfg config)
   {
     this.level =
-        DebugLogLevel.parse(config.getDebugLevel().toString());
-
-    Set<LogCategory> logCategories = null;
-    if(!config.getDebugCategory().isEmpty())
-    {
-      logCategories =
-          new HashSet<LogCategory>(config.getDebugCategory().size());
-      for(DebugTargetCfgDefn.DebugCategory category :
-          config.getDebugCategory())
-      {
-        logCategories.add(DebugLogCategory.parse(category.toString()));
-      }
-    }
-
-    this.includeCategories = logCategories;
+        Level.getLevel(config.isEnabled(), config.isDebugExceptionsOnly());
     this.noArgs = config.isOmitMethodEntryArguments();
     this.noRetVal = config.isOmitMethodReturnValue();
     this.stackDepth = config.getThrowableStackFrames();
@@ -197,9 +192,8 @@
   /**
    * {@inheritDoc}
    */
-  public boolean isConfigurationChangeAcceptable(
-          DebugTargetCfg config,
-          List<LocalizableMessage> unacceptableReasons)
+  public boolean isConfigurationChangeAcceptable(DebugTargetCfg config,
+      List<LocalizableMessage> unacceptableReasons)
   {
     // This should alwas be acceptable. We are assuing that the scope for this
     // trace setting is the same sine its part of the DN.
@@ -214,27 +208,14 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
+    ArrayList<LocalizableMessage> messages =
+        new ArrayList<LocalizableMessage>();
 
     // We can assume that the target scope did not change since its the
     // naming attribute. Changing it would result in a modify DN.
 
     this.level =
-        DebugLogLevel.parse(config.getDebugLevel().toString());
-
-    Set<LogCategory> logCategories = null;
-    if(!config.getDebugCategory().isEmpty())
-    {
-      logCategories =
-          new HashSet<LogCategory>(config.getDebugCategory().size());
-      for(DebugTargetCfgDefn.DebugCategory category :
-          config.getDebugCategory())
-      {
-        logCategories.add(DebugLogCategory.parse(category.toString()));
-      }
-    }
-
-    this.includeCategories = logCategories;
+        Level.getLevel(config.isEnabled(), config.isDebugExceptionsOnly());
     this.noArgs = config.isOmitMethodEntryArguments();
     this.noRetVal = config.isOmitMethodReturnValue();
     this.stackDepth = config.getThrowableStackFrames();
@@ -248,18 +229,17 @@
   /**
    * Parse trace settings from the string representation.
    *
-   * @param value the trace settings string to be parsed.
+   * @param value
+   *          the trace settings string to be parsed.
    * @return the trace settings parsed from the string.
    */
   protected static TraceSettings parseTraceSettings(String value)
   {
     TraceSettings settings = null;
-    if(value != null)
+    if (value != null)
     {
-      //Touch DebugLogLevel and DebugLogCategory so they are statically
-      //initialized or parse will not see all the levels/categories.
-      LogLevel level = DebugLogLevel.ERROR;
-      Set<LogCategory> includeCategories = null;
+      boolean enabled = false;
+      boolean exceptionsOnly = false;
       boolean noArgs = false;
       boolean noRetVal = false;
       int stackDepth = 0;
@@ -267,163 +247,113 @@
 
       String[] keywords = value.split(",");
 
-      for(String keyword : keywords)
+      for (String keyword : keywords)
       {
         //See if stack dump keyword is included
-        if(keyword.startsWith(STACK_DUMP_KEYWORD))
+        if (keyword.startsWith(STACK_DUMP_KEYWORD))
         {
           //See if a stack depth is included
-          if(keyword.length() == STACK_DUMP_KEYWORD.length())
+          if (keyword.length() == STACK_DUMP_KEYWORD.length())
           {
             stackDepth = DebugStackTraceFormatter.COMPLETE_STACK;
           }
           else
           {
-            int depthStart= keyword.indexOf("=", STACK_DUMP_KEYWORD.length());
+            int depthStart = keyword.indexOf("=", STACK_DUMP_KEYWORD.length());
             if (depthStart == STACK_DUMP_KEYWORD.length())
             {
               try
               {
-                stackDepth = Integer.valueOf(keyword.substring(depthStart+1));
+                stackDepth = Integer.valueOf(keyword.substring(depthStart + 1));
               }
-              catch(NumberFormatException nfe)
+              catch (NumberFormatException nfe)
               { // TODO: i18n
-                System.err.println("The keyword " + STACK_DUMP_KEYWORD +
-                    " contains an invalid depth value. The complete stack " +
-                    "will be included.");
+                System.err.println("The keyword " + STACK_DUMP_KEYWORD
+                    + " contains an invalid depth value. The complete stack "
+                    + "will be included.");
               }
             }
           }
         }
         //See if to include cause in exception messages.
-        else if(keyword.equals(INCLUDE_CAUSE_KEYWORD))
+        else if (keyword.equals(INCLUDE_CAUSE_KEYWORD))
         {
           includeCause = true;
         }
         //See if to supress method arguments.
-        else if(keyword.equals(SUPPRESS_ARG_KEYWORD))
+        else if (keyword.equals(SUPPRESS_ARG_KEYWORD))
         {
           noArgs = true;
         }
         //See if to supress return values.
-        else if(keyword.equals(SUPPRESS_RETVAL_KEYWORD))
+        else if (keyword.equals(SUPPRESS_RETVAL_KEYWORD))
         {
           noRetVal = true;
         }
-        else if(keyword.startsWith(INCLUDE_CATEGORY_KEYWORD))
+        else if (keyword.equals(ENABLED_KEYWORD))
         {
-          int categoryStart =
-                keyword.indexOf("=", INCLUDE_CATEGORY_KEYWORD.length());
-
-          if(keyword.length() == INCLUDE_CATEGORY_KEYWORD.length() ||
-              categoryStart != INCLUDE_CATEGORY_KEYWORD.length())
-          { // TODO: i18n
-            System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
-                " does not contain an equal sign to define the set of " +
-                "categories to include. All categories will be included.");
-          }
-          else
-          {
-            String[] categories =
-                keyword.substring(categoryStart+1).split("[|]");
-            includeCategories = new HashSet<LogCategory>();
-            for(String category : categories)
-            {
-              try
-              {
-                includeCategories.add(DebugLogCategory.parse(category));
-              }
-              catch(IllegalArgumentException iae)
-              { // TODO: i18n
-                System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
-                    " contains an invalid debug log category: " +
-                    iae.toString() + ". It will be ignored.");
-              }
-            }
-
-          }
+          enabled = true;
         }
-        else if(keyword.startsWith(LEVEL_KEYWORD))
+        else if (keyword.equals(EXCEPTIONS_ONLY_KEYWORD))
         {
-          int levelStart =
-                keyword.indexOf("=", LEVEL_KEYWORD.length());
-
-          if(keyword.length() == LEVEL_KEYWORD.length() ||
-              levelStart != LEVEL_KEYWORD.length())
-          { // TODO: i18n
-            System.err.println("The keyword " + LEVEL_KEYWORD +
-                " does not contain an equal sign to specify the log level. " +
-                "Default level of " + level.toString() + " will be used.");
-          }
-          else
-          {
-            try
-            {
-              level = LogLevel.parse(keyword.substring(levelStart+1));
-            }
-            catch(IllegalArgumentException iae)
-            {  // TODO: i18n
-              System.err.println("The keyword " + LEVEL_KEYWORD +
-                  " contains an invalid debug log level: " +
-                  iae.toString() + ". Default level of " + level.toString() +
-                  " will be used.");
-            }
-          }
+          exceptionsOnly = true;
         }
-
       }
-      settings = new TraceSettings(level, includeCategories, noArgs, noRetVal,
-                                   stackDepth, includeCause);
+      settings =
+          new TraceSettings(Level.getLevel(enabled, exceptionsOnly),
+              noArgs, noRetVal, stackDepth, includeCause);
     }
 
     return settings;
   }
 
   /**
-   * Get the log level of this setting.
-   * @return the log level of this setting.
+   * Get the level of this setting.
+   *
+   * @return the level of this setting.
    */
-  public LogLevel getLevel() {
+  public Level getLevel()
+  {
     return level;
   }
 
   /**
-   * Get the log categories for this setting.
-   * @return the log categories for this setting.
-   */
-  public Set<LogCategory> getIncludeCategories() {
-    return Collections.unmodifiableSet(includeCategories);
-  }
-
-  /**
    * Get whether method arguments should be logged.
+   *
    * @return if method arguments should be logged.
    */
-  public boolean isNoArgs() {
+  public boolean isNoArgs()
+  {
     return noArgs;
   }
 
   /**
    * Get whether method return values should be logged.
+   *
    * @return if method return values should be logged.
    */
-  public boolean isNoRetVal() {
+  public boolean isNoRetVal()
+  {
     return noRetVal;
   }
 
   /**
    * Get the level of stack frames to include.
+   *
    * @return the level of stack frames to include.
    */
-  public int getStackDepth() {
+  public int getStackDepth()
+  {
     return stackDepth;
   }
 
   /**
    * Get whether the cause exception is included in exception messages.
+   *
    * @return if the cause exception is included in exception messages.
    */
-  public boolean isIncludeCause() {
+  public boolean isIncludeCause()
+  {
     return includeCause;
   }
 }

--
Gitblit v1.10.0