Fix issue 2827: Messages constructed from a MessageBuilder should have a sensible category and severity.
Modify the MessageBuilder.toMessage() method so that constructed Messages have a sensible Category and Severity. Now the Category and Severity are based on the first object appended to the MessageBuilder. If that object is a Message then the MessageBuilder will use the Category and Severity of that Message, otherwise it will continue the current default behavior which is to use Category.USER_DEFINED and Severity.INFORMATION.
| | |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Portions Copyright 2007 Sun Microsystems, Inc. |
| | | * Portions Copyright 2007-2008 Sun Microsystems, Inc. |
| | | */ |
| | | |
| | | package org.opends.messages; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | | */ |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Portions Copyright 2007 Sun Microsystems, Inc. |
| | | * Portions Copyright 2007-2008 Sun Microsystems, Inc. |
| | | */ |
| | | |
| | | package org.opends.messages; |
| | |
| | | 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); |
| | | } |
| | | } |