From 7399fdb018d2248ec36edb30f5339cdcafbe2e98 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 13 Jan 2010 17:19:12 +0000
Subject: [PATCH] Fix for issues https://opends.dev.java.net/issues/show_bug.cgi?id=4484 and https://opends.dev.java.net/issues/show_bug.cgi?id=4485.

---
 opends/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java |  131 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 129 insertions(+), 2 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
index 921d525..e4b4d14 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -31,9 +31,18 @@
 
 import java.awt.Component;
 import java.awt.GridBagConstraints;
+import java.awt.Insets;
 
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
+
+import org.opends.guitools.controlpanel.browser.BasicNodeError;
+import org.opends.guitools.controlpanel.browser.ReferralLimitExceededException;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import org.opends.quicksetup.util.Utils;
+import org.opends.server.types.LDAPURL;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -52,7 +61,16 @@
   {
     super();
     GridBagConstraints gbc = new GridBagConstraints();
-    addErrorPane(gbc);
+    gbc.gridx = 0;
+    gbc.gridy = 0;
+    gbc.gridwidth = 1;
+    gbc.gridheight = 1;
+    gbc.weightx = 1.0;
+    gbc.anchor = GridBagConstraints.CENTER;
+    gbc.fill = GridBagConstraints.BOTH;
+    gbc.insets = new Insets(20, 20, 0, 20);
+    createErrorPane();
+    add(errorPane, gbc);
     errorPane.setVisible(true);
   }
 
@@ -109,4 +127,113 @@
     updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
         details, ColorAndFontConstants.defaultFont);
   }
+
+  /**
+   * Sets the error to be displayed in the panel.
+   * @param dn the DN of the local entry.
+   * @param referrals the list of referrals defined in the entry.
+   * @param error the error that occurred resolving the referral.
+   */
+  public void setReferralError(String dn, String[] referrals,
+      BasicNodeError error)
+  {
+    Message title = INFO_CTRL_PANEL_ERROR_RESOLVING_REFERRAL_TITLE.get();
+    MessageBuilder details = new MessageBuilder();
+    StringBuilder sb = new StringBuilder();
+    for (String ref: referrals)
+    {
+      if (sb.length() > 0)
+      {
+        sb.append("<br>");
+      }
+      sb.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+ref);
+    }
+    details.append(INFO_CTRL_PANEL_ERROR_RESOLVING_REFERRAL_MSG.get(dn, sb));
+    Exception ex = error.getException();
+    if (ex instanceof NamingException)
+    {
+      Object arg = error.getArg();
+      Message msg = null;
+      if (arg != null)
+      {
+        // Maybe is the LDAPURL
+        try
+        {
+          LDAPURL url = LDAPURL.decode(arg.toString(), false);
+          if (url.getHost() != null)
+          {
+            String hostPort = url.getHost()+":"+url.getPort();
+            if (ex instanceof ReferralLimitExceededException)
+            {
+              msg = Message.raw(ex.getLocalizedMessage());
+            }
+            else if (ex instanceof NameNotFoundException)
+            {
+              msg =
+                ERR_CTRL_PANEL_COULD_NOT_FIND_PROVIDED_ENTRY_IN_REFERRAL.get(
+                    arg.toString(), hostPort);
+            }
+            else
+            {
+              msg = Utils.getMessageForException((NamingException)ex, hostPort);
+            }
+          }
+          else
+          {
+            if (ex instanceof ReferralLimitExceededException)
+            {
+              msg = Message.raw(ex.getLocalizedMessage());
+            }
+            else if (ex instanceof NameNotFoundException)
+            {
+              msg =
+           ERR_CTRL_PANEL_COULD_NOT_FIND_PROVIDED_ENTRY_IN_REFERRAL_NO_HOST.get(
+                    arg.toString());
+            }
+            else
+            {
+              msg = Utils.getMessageForException((NamingException)ex);
+            }
+          }
+        }
+        catch (Throwable t)
+        {
+        }
+      }
+
+      if (msg == null)
+      {
+        if (ex instanceof ReferralLimitExceededException)
+        {
+          msg = Message.raw(ex.getLocalizedMessage());
+        }
+        else
+        {
+          msg = Utils.getMessageForException((NamingException)ex);
+        }
+      }
+      if (arg != null)
+      {
+        details.append("<br><br>"+
+            ERR_CTRL_PANEL_RESOLVING_REFERRAL_DETAILS.get(arg.toString(),
+                msg));
+      }
+      else
+      {
+        details.append("<br><br>"+INFO_CTRL_PANEL_DETAILS_THROWABLE.get(msg));
+      }
+    }
+    else if (ex != null)
+    {
+      String msg = ex.getLocalizedMessage();
+      if (msg == null)
+      {
+        msg = ex.toString();
+      }
+      details.append("<br><br>"+INFO_CTRL_PANEL_DETAILS_THROWABLE.get(msg));
+    }
+    details.append("<br><br>"+INFO_CTRL_PANEL_HOW_TO_EDIT_REFERRALS.get());
+    updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
+        details.toMessage(), ColorAndFontConstants.defaultFont);
+  }
 }

--
Gitblit v1.10.0