From 6647ad0e697eda6be838de47ee8596eda0ccd500 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 17 Aug 2015 08:56:29 +0000
Subject: [PATCH] Code cleanup Fix a bug in RootDSEBackend.getRootDSE().

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/task/Task.java |  309 ++++++++++++---------------------------------------
 1 files changed, 74 insertions(+), 235 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/task/Task.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/task/Task.java
index 8609830..2901f8c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/task/Task.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/task/Task.java
@@ -40,6 +40,7 @@
 import javax.mail.MessagingException;
 
 import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ModificationType;
@@ -62,23 +63,16 @@
  * This class defines a task that may be executed by the task backend within the
  * Directory Server.
  */
-public abstract class Task
-       implements Comparable<Task>
+public abstract class Task implements Comparable<Task>
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
-
-
   /** The DN for the task entry. */
   private DN taskEntryDN;
-
   /** The entry that actually defines this task. */
   private Entry taskEntry;
 
-  /**
-   * The action to take if one of the dependencies for this task does not
-   * complete successfully.
-   */
+  /** The action to take if one of the dependencies for this task does not complete successfully. */
   private FailedDependencyAction failedDependencyAction;
 
   /** The counter used for log messages associated with this task. */
@@ -95,7 +89,7 @@
    * a way that the information could be reparsed from its
    * string value.
    */
-  private LinkedList<String> logMessages;
+  private List<String> logMessages;
 
   /**
    * The set of e-mail addresses of the users to notify when the task is done
@@ -111,10 +105,8 @@
 
   /** The time that processing actually started for this task. */
   private long actualStartTime;
-
   /** The time that actual processing ended for this task. */
   private long completionTime;
-
   /** The time that this task was scheduled to start processing. */
   private long scheduledStartTime;
 
@@ -126,16 +118,12 @@
 
   /** The unique ID assigned to this task. */
   private String taskID;
-
   /** The task backend with which this task is associated. */
   private TaskBackend taskBackend;
-
   /** The current state of this task. */
   private TaskState taskState;
-
   /** The task state that may be set when the task is interrupted. */
   private TaskState taskInterruptState;
-
   /** The scheduler with which this task is associated. */
   private TaskScheduler taskScheduler;
 
@@ -204,7 +192,6 @@
 
     taskBackend       = taskScheduler.getTaskBackend();
 
-
     // Get the task ID and recurring task ID values.  At least one of them must
     // be provided.  If it's a recurring task and there is no task ID, then
     // generate one on the fly.
@@ -216,13 +203,9 @@
       {
         throw new InitializationException(ERR_TASK_MISSING_ATTR.get(taskEntry.getName(), ATTR_TASK_ID));
       }
-      else
-      {
-        taskID = UUID.randomUUID().toString();
-      }
+      taskID = UUID.randomUUID().toString();
     }
 
-
     // Get the current state from the task.  If there is none, then assume it's
     // a new task.
     String stateString = getAttributeValue(ATTR_TASK_STATE, false);
@@ -240,102 +223,16 @@
       }
     }
 
-
     // Get the scheduled start time for the task, if there is one.  It may be
     // in either UTC time (a date followed by a 'Z') or in the local time zone
     // (not followed by a 'Z').
-    scheduledStartTime = -1;
-    String timeString = getAttributeValue(ATTR_TASK_SCHEDULED_START_TIME,
-                                          false);
-    if (timeString != null)
-    {
-      SimpleDateFormat dateFormat;
-      if (timeString.endsWith("Z"))
-      {
-        dateFormat = new SimpleDateFormat(DATE_FORMAT_GMT_TIME);
-        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
-      }
-      else
-      {
-        dateFormat = new SimpleDateFormat(DATE_FORMAT_COMPACT_LOCAL_TIME);
-      }
-
-      try
-      {
-        scheduledStartTime = dateFormat.parse(timeString).getTime();
-      }
-      catch (Exception e)
-      {
-        logger.traceException(e);
-
-        LocalizableMessage message =
-            ERR_TASK_CANNOT_PARSE_SCHEDULED_START_TIME.get(timeString, taskDN);
-        throw new InitializationException(message, e);
-      }
-    }
-
+    scheduledStartTime = getTime(taskDN, ATTR_TASK_SCHEDULED_START_TIME, ERR_TASK_CANNOT_PARSE_SCHEDULED_START_TIME);
 
     // Get the actual start time for the task, if there is one.
-    actualStartTime = -1;
-    timeString = getAttributeValue(ATTR_TASK_ACTUAL_START_TIME, false);
-    if (timeString != null)
-    {
-      SimpleDateFormat dateFormat;
-      if (timeString.endsWith("Z"))
-      {
-        dateFormat = new SimpleDateFormat(DATE_FORMAT_GMT_TIME);
-        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
-      }
-      else
-      {
-        dateFormat = new SimpleDateFormat(DATE_FORMAT_COMPACT_LOCAL_TIME);
-      }
-
-      try
-      {
-        actualStartTime = dateFormat.parse(timeString).getTime();
-      }
-      catch (Exception e)
-      {
-        logger.traceException(e);
-
-        LocalizableMessage message =
-            ERR_TASK_CANNOT_PARSE_ACTUAL_START_TIME.get(timeString, taskDN);
-        throw new InitializationException(message, e);
-      }
-    }
-
+    actualStartTime = getTime(taskDN, ATTR_TASK_ACTUAL_START_TIME, ERR_TASK_CANNOT_PARSE_ACTUAL_START_TIME);
 
     // Get the completion time for the task, if there is one.
-    completionTime = -1;
-    timeString = getAttributeValue(ATTR_TASK_COMPLETION_TIME, false);
-    if (timeString != null)
-    {
-      SimpleDateFormat dateFormat;
-      if (timeString.endsWith("Z"))
-      {
-        dateFormat = new SimpleDateFormat(DATE_FORMAT_GMT_TIME);
-        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
-      }
-      else
-      {
-        dateFormat = new SimpleDateFormat(DATE_FORMAT_COMPACT_LOCAL_TIME);
-      }
-
-      try
-      {
-        completionTime = dateFormat.parse(timeString).getTime();
-      }
-      catch (Exception e)
-      {
-        logger.traceException(e);
-
-        LocalizableMessage message =
-            ERR_TASK_CANNOT_PARSE_COMPLETION_TIME.get(timeString, taskDN);
-        throw new InitializationException(message, e);
-      }
-    }
-
+    completionTime = getTime(taskDN, ATTR_TASK_COMPLETION_TIME, ERR_TASK_CANNOT_PARSE_COMPLETION_TIME);
 
     // Get information about any dependencies that the task might have.
     dependencyIDs = getAttributeValues(ATTR_TASK_DEPENDENCY_IDS);
@@ -352,13 +249,10 @@
       }
     }
 
-
-    // Get the information about the e-mail addresses to use for notification
-    // purposes.
+    // Get the information about the e-mail addresses to use for notification purposes
     notifyOnCompletion = getAttributeValues(ATTR_TASK_NOTIFY_ON_COMPLETION);
     notifyOnError      = getAttributeValues(ATTR_TASK_NOTIFY_ON_ERROR);
 
-
     // Get the log messages for the task.
     logMessages  = getAttributeValues(ATTR_TASK_LOG_MESSAGES);
     if (logMessages != null) {
@@ -366,7 +260,35 @@
     }
   }
 
+  private long getTime(String taskDN, String attrName, Arg2<Object, Object> errorMsg) throws InitializationException
+  {
+    String timeString = getAttributeValue(attrName, false);
+    if (timeString != null)
+    {
+      SimpleDateFormat dateFormat;
+      if (timeString.endsWith("Z"))
+      {
+        dateFormat = new SimpleDateFormat(DATE_FORMAT_GMT_TIME);
+        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+      }
+      else
+      {
+        dateFormat = new SimpleDateFormat(DATE_FORMAT_COMPACT_LOCAL_TIME);
+      }
 
+      try
+      {
+        return dateFormat.parse(timeString).getTime();
+      }
+      catch (Exception e)
+      {
+        logger.traceException(e);
+
+        throw new InitializationException(errorMsg.get(timeString, taskDN), e);
+      }
+    }
+    return -1;
+  }
 
   /**
    * Retrieves the single value for the requested attribute as a string.
@@ -422,8 +344,6 @@
     return value.toString();
   }
 
-
-
   /**
    * Retrieves the values for the requested attribute as a list of strings.
    *
@@ -437,11 +357,9 @@
    *                                   requested attribute in the entry with
    *                                   different sets of options.
    */
-  private LinkedList<String> getAttributeValues(String attributeName)
-          throws InitializationException
+  private LinkedList<String> getAttributeValues(String attributeName) throws InitializationException
   {
     LinkedList<String> valueStrings = new LinkedList<>();
-
     List<Attribute> attrList = taskEntry.getAttribute(attributeName.toLowerCase());
     if (attrList == null || attrList.isEmpty())
     {
@@ -460,8 +378,6 @@
     return valueStrings;
   }
 
-
-
   /**
    * Retrieves the DN of the entry containing the definition for this task.
    *
@@ -472,8 +388,6 @@
     return taskEntryDN;
   }
 
-
-
   /**
    * Retrieves the entry containing the definition for this task.
    *
@@ -484,8 +398,6 @@
     return taskEntry;
   }
 
-
-
   /**
    * Retrieves the operation used to create this task in the server.  Note that
    * this will only be available when the task is first added to the scheduler,
@@ -502,8 +414,6 @@
     return operation;
   }
 
-
-
   /**
    * Specifies the operation used to create this task in the server.
    *
@@ -514,8 +424,6 @@
     this.operation = operation;
   }
 
-
-
   /**
    * Retrieves the unique identifier assigned to this task.
    *
@@ -526,8 +434,6 @@
     return taskID;
   }
 
-
-
   /**
    * Retrieves the unique identifier assigned to the recurring task that is
    * associated with this task, if there is one.
@@ -541,8 +447,6 @@
     return recurringTaskID;
   }
 
-
-
   /**
    * Retrieves the current state for this task.
    *
@@ -577,8 +481,6 @@
       TaskState.isCancelled(taskInterruptState);
   }
 
-
-
   /**
    * Sets the state for this task and updates the associated task entry as
    * necessary.  It does not automatically persist the updated task information
@@ -610,7 +512,6 @@
     }
   }
 
-
   /**
    * Sets a state for this task that is the result of a call to
    * {@link #interruptTask(TaskState, LocalizableMessage)}.
@@ -624,7 +525,6 @@
     this.taskInterruptState = state;
   }
 
-
   /**
    * Gets the interrupt state for this task that was set as a
    * result of a call to {@link #interruptTask(TaskState, LocalizableMessage)}.
@@ -636,7 +536,6 @@
     return this.taskInterruptState;
   }
 
-
   /**
    * Returns a state for this task after processing has completed.
    * If the task was interrupted with a call to
@@ -650,17 +549,13 @@
    */
   protected TaskState getFinalTaskState()
   {
-    if (this.taskInterruptState == null)
-    {
-      return TaskState.COMPLETED_SUCCESSFULLY;
-    }
-    else
+    if (this.taskInterruptState != null)
     {
       return this.taskInterruptState;
     }
+    return TaskState.COMPLETED_SUCCESSFULLY;
   }
 
-
   /**
    * Replaces an attribute values of the task entry.
    *
@@ -699,7 +594,6 @@
     }
   }
 
-
   /**
    * Retrieves the scheduled start time for this task, if there is one.  The
    * value returned will be in the same format as the return value for
@@ -714,8 +608,6 @@
     return scheduledStartTime;
   }
 
-
-
   /**
    * Retrieves the time that this task actually started running, if it has
    * started.  The value returned will be in the same format as the return value
@@ -729,8 +621,6 @@
     return actualStartTime;
   }
 
-
-
   /**
    * Sets the actual start time for this task and updates the associated task
    * entry as necessary.  It does not automatically persist the updated task
@@ -764,8 +654,6 @@
     }
   }
 
-
-
   /**
    * Retrieves the time that this task completed all of its associated
    * processing (regardless of whether it was successful), if it has completed.
@@ -780,8 +668,6 @@
     return completionTime;
   }
 
-
-
   /**
    * Sets the completion time for this task and updates the associated task
    * entry as necessary.  It does not automatically persist the updated task
@@ -817,8 +703,6 @@
     }
   }
 
-
-
   /**
    * Retrieves the set of task IDs for any tasks on which this task is
    * dependent.  This list must not be directly modified by the caller.
@@ -830,8 +714,6 @@
     return dependencyIDs;
   }
 
-
-
   /**
    * Retrieves the action that should be taken if any of the dependencies for
    * this task do not complete successfully.
@@ -844,8 +726,6 @@
     return failedDependencyAction;
   }
 
-
-
   /**
    * Retrieves the set of e-mail addresses for the users that should receive a
    * notification message when processing for this task has completed.  This
@@ -862,8 +742,6 @@
     return notifyOnCompletion;
   }
 
-
-
   /**
    * Retrieves the set of e-mail addresses for the users that should receive a
    * notification message if processing for this task does not complete
@@ -994,8 +872,6 @@
     }
   }
 
-
-
   /**
    * Compares this task with the provided task for the purposes of ordering in a
    * sorted list.  Any completed task will always be ordered before an
@@ -1018,29 +894,7 @@
   {
     if (completionTime > 0)
     {
-      if (task.completionTime > 0)
-      {
-        // They have both completed, so order by completion time.
-        if (completionTime < task.completionTime)
-        {
-          return -1;
-        }
-        else if (completionTime > task.completionTime)
-        {
-          return 1;
-        }
-        else
-        {
-          // They have the same completion time, so order by task ID.
-          return taskID.compareTo(task.taskID);
-        }
-      }
-      else
-      {
-        // Completed tasks are always ordered before those that haven't
-        // completed.
-        return -1;
-      }
+      return compareTimes(task, completionTime, task.completionTime);
     }
     else if (task.completionTime > 0)
     {
@@ -1050,28 +904,7 @@
 
     if (actualStartTime > 0)
     {
-      if (task.actualStartTime > 0)
-      {
-        // They are both running, so order by actual start time.
-        if (actualStartTime < task.actualStartTime)
-        {
-          return -1;
-        }
-        else if (actualStartTime > task.actualStartTime)
-        {
-          return 1;
-        }
-        else
-        {
-          // They have the same actual start time, so order by task ID.
-          return taskID.compareTo(task.taskID);
-        }
-      }
-      else
-      {
-        // Running tasks are always ordered before those that haven't started.
-        return -1;
-      }
+      return compareTimes(task, actualStartTime, task.actualStartTime);
     }
     else if (task.actualStartTime > 0)
     {
@@ -1079,7 +912,6 @@
       return 1;
     }
 
-
     // Neither task has started, so order by scheduled start time, or if nothing
     // else by task ID.
     if (scheduledStartTime < task.scheduledStartTime)
@@ -1096,7 +928,33 @@
     }
   }
 
-
+  private int compareTimes(Task task, long time1, long time2)
+  {
+    if (time2 > 0)
+    {
+      // They are both running, so order by actual start time.
+      // OR they have both completed, so order by completion time.
+      if (time1 < time2)
+      {
+        return -1;
+      }
+      else if (time1 > time2)
+      {
+        return 1;
+      }
+      else
+      {
+        // They have the same actual start/completion time, so order by task ID.
+        return taskID.compareTo(task.taskID);
+      }
+    }
+    else
+    {
+      // Running tasks are always ordered before those that haven't started.
+      // OR completed tasks are always ordered before those that haven't completed.
+      return -1;
+    }
+  }
 
   /**
    * Begins execution for this task.  This is a wrapper around the
@@ -1111,26 +969,18 @@
     setTaskState(TaskState.RUNNING);
     taskScheduler.writeState();
 
-    TaskState taskState = this.taskState;
-
     try
     {
-      taskState = runTask();
+      return runTask();
     }
     catch (Exception e)
     {
       logger.traceException(e);
-
-      taskState = TaskState.STOPPED_BY_ERROR;
-
       logger.error(ERR_TASK_EXECUTE_FAILED, taskEntry.getName(), stackTraceToSingleLineString(e));
+      return TaskState.STOPPED_BY_ERROR;
     }
-
-    return taskState;
   }
 
-
-
   /**
    * If appropriate, send an e-mail message with information about the
    * completed task.
@@ -1183,8 +1033,6 @@
     }
   }
 
-
-
   /**
    * Performs any task-specific initialization that may be required before
    * processing can start.  This default implementation does not do anything,
@@ -1201,8 +1049,6 @@
     // No action is performed by default.
   }
 
-
-
   /**
    * Performs the actual core processing for this task.  This method should not
    * return until all processing associated with this task has completed.
@@ -1211,15 +1057,13 @@
    */
   protected abstract TaskState runTask();
 
-
-
   /**
    * Performs any necessary processing to prematurely interrupt the execution of
    * this task.  By default no action is performed, but if it is feasible to
    * gracefully interrupt a task, then subclasses should override this method to
    * do so.
    *
-   * Implementations of this method are exprected to call
+   * Implementations of this method are expected to call
    * {@link #setTaskInterruptState(TaskState)} if the interruption is accepted
    * by this task.
    *
@@ -1231,20 +1075,15 @@
   {
     // No action is performed by default.
 
-    // NOTE:  if you implement this make sure to override isInterruptable
-    //        to return 'true'
+    // NOTE:  if you implement this make sure to override isInterruptable() to return 'true'
   }
 
-
-
   /**
-   * Indicates whether or not this task is interruptable or not.
+   * Indicates whether or not this task is interruptible or not.
    *
    * @return boolean where true indicates that this task can be interrupted.
    */
   public boolean isInterruptable() {
     return false;
   }
-
 }
-

--
Gitblit v1.10.0