From 72650d4cc41c64136d064967d7fec3726d850fee Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 14 Oct 2010 11:52:28 +0000
Subject: [PATCH] Multiple enhancements and bug fixes to the SDK (update from OpenDS by matthew_swift):
---
sdk/src/com/sun/opends/sdk/util/StaticUtils.java | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 107 insertions(+), 1 deletions(-)
diff --git a/sdk/src/com/sun/opends/sdk/util/StaticUtils.java b/sdk/src/com/sun/opends/sdk/util/StaticUtils.java
index e40902c..64cdabb 100644
--- a/sdk/src/com/sun/opends/sdk/util/StaticUtils.java
+++ b/sdk/src/com/sun/opends/sdk/util/StaticUtils.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2009 Sun Microsystems, Inc.
+ * Copyright 2009-2010 Sun Microsystems, Inc.
*/
package com.sun.opends.sdk.util;
@@ -35,6 +35,10 @@
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.util.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.DataFormatException;
@@ -67,6 +71,10 @@
private static final TimeZone TIME_ZONE_UTC_OBJ = TimeZone
.getTimeZone(TIME_ZONE_UTC);
+ private static ScheduledExecutorService defaultScheduler = null;
+
+ private static final Object DEFAULT_SCHEDULER_LOCK = new Object();
+
/**
@@ -1394,6 +1402,27 @@
/**
+ * Returns the default scheduler which should be used by the SDK.
+ *
+ * @return The default scheduler.
+ */
+ public static ScheduledExecutorService getDefaultScheduler()
+ {
+ synchronized (DEFAULT_SCHEDULER_LOCK)
+ {
+ if (defaultScheduler == null)
+ {
+ final ThreadFactory factory = newThreadFactory(null,
+ "OpenDS SDK Default Scheduler", true);
+ defaultScheduler = Executors.newSingleThreadScheduledExecutor(factory);
+ }
+ }
+ return defaultScheduler;
+ }
+
+
+
+ /**
* Retrieves the best human-readable message for the provided exception. For
* exceptions defined in the OpenDS project, it will attempt to use the
* message (combining it with the message ID if available). For some
@@ -1711,6 +1740,83 @@
/**
+ * Returns a string whose content is the string representation of the objects
+ * contained in the provided collection concatenated together using the
+ * provided separator.
+ *
+ * @param c
+ * The collection whose elements are to be joined.
+ * @param separator
+ * The separator string.
+ * @return A string whose content is the string representation of the objects
+ * contained in the provided collection concatenated together using
+ * the provided separator.
+ * @throws NullPointerException
+ * If {@code c} or {@code separator} were {@code null}.
+ */
+ public static String joinCollection(Collection<?> c, String separator)
+ throws NullPointerException
+ {
+ Validator.ensureNotNull(c, separator);
+
+ switch (c.size())
+ {
+ case 0:
+ return "";
+ case 1:
+ return String.valueOf(c.iterator().next());
+ default:
+ StringBuilder builder = new StringBuilder();
+ Iterator<?> i = c.iterator();
+ builder.append(i.next());
+ while (i.hasNext())
+ {
+ builder.append(separator);
+ builder.append(i.next());
+ }
+ String s = builder.toString();
+ return s;
+ }
+ }
+
+
+
+
+ /**
+ * Creates a new thread factory which will create threads using the specified
+ * thread group, naming template, and daemon status.
+ *
+ * @param group
+ * The thread group, which may be {@code null}.
+ * @param nameTemplate
+ * The thread name format string which may contain a "%d" format
+ * option which will be substituted with the thread count.
+ * @param isDaemon
+ * Indicates whether or not threads should be daemon threads.
+ * @return The new thread factory.
+ */
+ public static ThreadFactory newThreadFactory(final ThreadGroup group,
+ final String nameTemplate, final boolean isDaemon)
+ {
+ return new ThreadFactory()
+ {
+ private final AtomicInteger count = new AtomicInteger();
+
+
+
+ public Thread newThread(Runnable r)
+ {
+ final String name = String
+ .format(nameTemplate, count.getAndIncrement());
+ final Thread t = new Thread(group, r, name);
+ t.setDaemon(isDaemon);
+ return t;
+ }
+ };
+ }
+
+
+ /**
* Returns a string representation of the contents of the provided byte
* sequence using hexadecimal characters and a space between each byte.
*
--
Gitblit v1.10.0