From 3711cef73dac69815f93c82324ead507ee1cc230 Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Tue, 18 Feb 2014 14:05:45 +0000
Subject: [PATCH] Checkpoint OPENDJ-1343 Migrate dsconfig / OPENDJ-1303 "opendj-cli" - Added methods to ConsoleApplication which are going to be used by the server. - Added APPLICATION_ERROR to ReturnCode. - Added methods to Utils (used by opendj3)
---
opendj-cli/src/main/java/com/forgerock/opendj/cli/Utils.java | 107 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 92 insertions(+), 15 deletions(-)
diff --git a/opendj-cli/src/main/java/com/forgerock/opendj/cli/Utils.java b/opendj-cli/src/main/java/com/forgerock/opendj/cli/Utils.java
index 0ee1a38..df5da38 100644
--- a/opendj-cli/src/main/java/com/forgerock/opendj/cli/Utils.java
+++ b/opendj-cli/src/main/java/com/forgerock/opendj/cli/Utils.java
@@ -26,12 +26,10 @@
*/
package com.forgerock.opendj.cli;
-import static com.forgerock.opendj.cli.CliMessages.ERR_INCOMPATIBLE_JAVA_VERSION;
-import static com.forgerock.opendj.cli.CliMessages.INFO_TIME_IN_DAYS_HOURS_MINUTES_SECONDS;
-import static com.forgerock.opendj.cli.CliMessages.INFO_TIME_IN_HOURS_MINUTES_SECONDS;
-import static com.forgerock.opendj.cli.CliMessages.INFO_TIME_IN_MINUTES_SECONDS;
-import static com.forgerock.opendj.cli.CliMessages.INFO_TIME_IN_SECONDS;
+import static com.forgerock.opendj.cli.CliMessages.*;
+
import com.forgerock.opendj.util.OperatingSystem;
+
import static com.forgerock.opendj.util.StaticUtils.EOL;
import java.io.File;
@@ -39,11 +37,19 @@
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.TimeZone;
+import javax.naming.AuthenticationException;
+import javax.naming.CommunicationException;
+import javax.naming.NamingException;
+import javax.naming.NamingSecurityException;
+import javax.naming.NoPermissionException;
+import javax.net.ssl.SSLHandshakeException;
+
import org.forgerock.i18n.LocalizableMessage;
/**
@@ -52,7 +58,7 @@
final public class Utils {
/** Platform appropriate line separator. */
- static public final String LINE_SEPARATOR = System.getProperty("line.separator");
+ public static final String LINE_SEPARATOR = System.getProperty("line.separator");
/**
* The value used to display arguments that must be obfuscated (such as passwords). This does not require
@@ -61,11 +67,28 @@
public final static String OBFUSCATED_VALUE = "******";
/**
+ * The maximum number of times we try to confirm.
+ */
+ public final static int CONFIRMATION_MAX_TRIES = 5;
+
+ /**
* The date format string that will be used to construct and parse dates represented using generalized time. It is
* assumed that the provided date formatter will be set to UTC.
*/
public static final String DATE_FORMAT_LOCAL_TIME = "dd/MMM/yyyy:HH:mm:ss Z";
+ /**
+ * Returns the message to be displayed in the file with the equivalent command-line with information about the
+ * current time.
+ *
+ * @return the message to be displayed in the file with the equivalent command-line with information about the
+ * current time.
+ */
+ public static String getCurrentOperationDateMessage() {
+ String date = formatDateTimeStringForEquivalentCommand(new Date());
+ return INFO_OPERATION_START_TIME_MESSAGE.get(date).toString();
+ }
+
private static final String COMMENT_SHELL_UNIX = "# ";
private static final String COMMENT_BATCH_WINDOWS = "rem ";
@@ -79,8 +102,7 @@
* The column at which to wrap long lines of output in the command-line
* tools.
*/
- static public final int MAX_LINE_WIDTH;
-
+ public static final int MAX_LINE_WIDTH;
static {
int columns = 80;
try {
@@ -98,18 +120,18 @@
* Formats a Date to String representation in "dd/MMM/yyyy:HH:mm:ss Z".
*
* @param date
- * to format; null if <code>date</code> is null
- * @return string representation of the date
+ * The date to format; null if <code>date</code> is null.
+ * @return A string representation of the date.
*/
- public String formatDateTimeStringForEquivalentCommand(Date date) {
- String timeStr = null;
+ public static String formatDateTimeStringForEquivalentCommand(final Date date) {
if (date != null) {
- SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_LOCAL_TIME);
+ final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_LOCAL_TIME);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- timeStr = dateFormat.format(date);
+ return dateFormat.format(date);
}
- return timeStr;
+ return null;
}
+
/**
* Filters the provided value to ensure that it is appropriate for use as an
* exit code. Exit code values are generally only allowed to be between 0
@@ -412,6 +434,61 @@
return "";
}
+ /**
+ * Tells whether the provided Throwable was caused because of a problem with a certificate while trying to establish
+ * a connection.
+ *
+ * @param t
+ * The Throwable to analyze.
+ * @return <CODE>true</CODE> if the provided Throwable was caused because of a problem with a certificate while
+ * trying to establish a connection and <CODE>false</CODE> otherwise.
+ */
+ public static boolean isCertificateException(Throwable t) {
+ boolean returnValue = false;
+
+ while (!returnValue && (t != null)) {
+ returnValue = (t instanceof SSLHandshakeException) || (t instanceof GeneralSecurityException);
+ t = t.getCause();
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * Returns a message object for the given NamingException.
+ *
+ * @param ne
+ * The NamingException.
+ * @param hostPort
+ * The hostPort representation of the server we were contacting when the NamingException occurred.
+ * @return A message object for the given NamingException.
+ */
+ public static LocalizableMessage getMessageForException(NamingException ne, String hostPort) {
+ LocalizableMessage msg;
+ String arg;
+ if (ne.getLocalizedMessage() != null) {
+ arg = ne.getLocalizedMessage();
+ } else if (ne.getExplanation() != null) {
+ arg = ne.getExplanation();
+ } else {
+ arg = ne.toString(true);
+ }
+ if (Utils.isCertificateException(ne)) {
+ msg = INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER.get(hostPort, arg);
+ } else if (ne instanceof AuthenticationException) {
+ msg = INFO_CANNOT_CONNECT_TO_REMOTE_AUTHENTICATION.get(hostPort, arg);
+ } else if (ne instanceof NoPermissionException) {
+ msg = INFO_CANNOT_CONNECT_TO_REMOTE_PERMISSIONS.get(hostPort, arg);
+ } else if (ne instanceof NamingSecurityException) {
+ msg = INFO_CANNOT_CONNECT_TO_REMOTE_PERMISSIONS.get(hostPort, arg);
+ } else if (ne instanceof CommunicationException) {
+ msg = ERR_CANNOT_CONNECT_TO_REMOTE_COMMUNICATION.get(hostPort, arg);
+ } else {
+ msg = INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC.get(hostPort, arg);
+ }
+ return msg;
+ }
+
// Prevent instantiation.
private Utils() {
// Do nothing.
--
Gitblit v1.10.0