From 8ad64526ae23f5b3992dab4e8c7a96b5e8376d2f Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Tue, 15 Jan 2008 14:25:18 +0000
Subject: [PATCH] Fix issue 2827: Messages constructed from a MessageBuilder should have a sensible category and severity.

---
 opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java |   41 ++++++++++++++++++++
 opends/src/messages/src/org/opends/messages/MessageBuilder.java                       |   21 ++++++++--
 2 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/opends/src/messages/src/org/opends/messages/MessageBuilder.java b/opends/src/messages/src/org/opends/messages/MessageBuilder.java
index e462f2d..5e44f69 100644
--- a/opends/src/messages/src/org/opends/messages/MessageBuilder.java
+++ b/opends/src/messages/src/org/opends/messages/MessageBuilder.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.messages;
@@ -259,8 +259,13 @@
   }
 
   /**
-   * Returns a raw message representation of the appended
-   * content.
+   * Returns a raw message representation of the appended content.
+   * <p>
+   * If the first object appended to this <code>MessageBuilder</code>
+   * was a <code>Message</code> then the returned message will
+   * inherit its category and severity. Otherwise the returned message
+   * will have category {@link Category#USER_DEFINED} and severity
+   * {@link Severity#INFORMATION}.
    *
    * @return Message raw message representing builder content
    */
@@ -269,7 +274,15 @@
     for (int i = 0; i < messages.size(); i++) {
       fmtString.append("%s");
     }
-    return Message.raw(fmtString, messages.toArray());
+
+    if (messages.isEmpty()) {
+      return Message.raw(fmtString, messages.toArray());
+    } else {
+      // Inherit the category and severity of the first message.
+      MessageDescriptor md = messages.get(0).getDescriptor();
+      return Message.raw(md.getCategory(), md.getSeverity(), fmtString,
+          messages.toArray());
+    }
   }
 
   /**
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java
index a9a85af..e22ff1b 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.messages;
@@ -201,4 +201,43 @@
     assertTrue(result.equals(m.toString(locale)));
   }
 
+
+
+  @DataProvider(name = "toMessageData2")
+  public Object[][] toMessageData2() {
+    return new Object[][] {
+        {
+            CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get(),
+            CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1),
+            CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.getCategory(),
+            CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.getSeverity()
+        },
+        {
+            Message.raw(Category.JEB, Severity.FATAL_ERROR, "test message"),
+            CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1),
+            Category.JEB,
+            Severity.FATAL_ERROR
+        },
+        {
+            Message.raw("test message"),
+            CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1),
+            Category.USER_DEFINED,
+            Severity.INFORMATION
+        }
+    };
+  }
+
+
+
+  @Test(dataProvider = "toMessageData2")
+  public void testToMessage2(Message m1, Message m2, Category c, Severity s) {
+    MessageBuilder mb = new MessageBuilder();
+
+    mb.append(m1);
+    mb.append(m2);
+    Message m = mb.toMessage();
+
+    assertEquals(m.getDescriptor().getCategory(), c);
+    assertEquals(m.getDescriptor().getSeverity(), s);
+  }
 }

--
Gitblit v1.10.0