I added "with" with String values since the existing "put" method takes String values.
And as far as I can see, MapMessage looks like this: private final SortedMap<String, String> data; On Tue, Oct 27, 2015 at 12:01 AM, Matt Sicker <[email protected]> wrote: > That seems reasonable. > > > On Monday, 26 October 2015, Remko Popma <[email protected]> wrote: > >> I don't see the point: >> 1. there is no casting currenty that would be avoided by introducing >> generics >> 2. at the end of the ride, Message.getFormattedMessage turns the map >> contents into a String anyway, so there is no difference to client code >> calling mapMessage.with(objKey, objValue) and >> mapMessage.with(objKey.toString(), objValue.toString()) >> >> We could add a convenience method "with(Object, Object)" to help make >> client code a bit shorter, but generics would not come into play, no? >> >> >> On Tue, Oct 27, 2015 at 2:52 AM, Matt Sicker <[email protected]> wrote: >> >>> MapMessage can use Objects, not just Strings for its values. >>> >>> On 26 October 2015 at 10:45, Mikael Ståldal <[email protected]> >>> wrote: >>> >>>> Generics for what? To avoid putting the "with" method in subclasses? I >>>> don't think so, but I would be happy to be proven wrong. >>>> >>>> On Fri, Oct 23, 2015 at 6:11 PM, Gary Gregory <[email protected]> >>>> wrote: >>>> >>>>> Can generics be used to here? >>>>> >>>>> Gary >>>>> >>>>> >>>>> -------- Original message -------- >>>>> From: [email protected] >>>>> Date: 10/23/2015 06:19 (GMT-08:00) >>>>> To: [email protected] >>>>> Subject: [1/3] logging-log4j2 git commit: Builder like pattern in >>>>> MapMessage >>>>> >>>>> Repository: logging-log4j2 >>>>> Updated Branches: >>>>> refs/heads/master 9c3af7114 -> 66bbf4ddf >>>>> >>>>> >>>>> Builder like pattern in MapMessage >>>>> >>>>> >>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>>> Commit: >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/990a97c0 >>>>> Tree: >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/990a97c0 >>>>> Diff: >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/990a97c0 >>>>> >>>>> Branch: refs/heads/master >>>>> Commit: 990a97c0b5688ee9512544edfa6596de9ee939fc >>>>> Parents: f08c62c >>>>> Author: Mikael St��ldal <[email protected]> >>>>> Authored: Thu Oct 15 17:33:55 2015 +0200 >>>>> Committer: Mikael St��ldal <[email protected]> >>>>> Committed: Thu Oct 15 17:33:55 2015 +0200 >>>>> >>>>> ---------------------------------------------------------------------- >>>>> .../org/apache/logging/log4j/message/MapMessage.java | 5 +++++ >>>>> .../logging/log4j/message/StructuredDataMessage.java | 5 +++++ >>>>> .../apache/logging/log4j/message/MapMessageTest.java | 11 +++++++++++ >>>>> .../log4j/message/StructuredDataMessageTest.java | 14 >>>>> +++++++++++++- >>>>> 4 files changed, 34 insertions(+), 1 deletion(-) >>>>> ---------------------------------------------------------------------- >>>>> >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/990a97c0/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java >>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java >>>>> index 6172fee..1012d0e 100644 >>>>> --- >>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java >>>>> +++ >>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java >>>>> @@ -109,6 +109,11 @@ public class MapMessage implements >>>>> MultiformatMessage { >>>>> data.clear(); >>>>> } >>>>> >>>>> + public MapMessage withValue(final String key, final String value) >>>>> { >>>>> + put(key, value); >>>>> + return this; >>>>> + } >>>>> + >>>>> /** >>>>> * Add an item to the data Map. >>>>> * @param key The name of the data item. >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/990a97c0/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java >>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java >>>>> index 97d7204..abacce2 100644 >>>>> --- >>>>> a/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java >>>>> +++ >>>>> b/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java >>>>> @@ -130,6 +130,11 @@ public class StructuredDataMessage extends >>>>> MapMessage { >>>>> >>>>> } >>>>> >>>>> + public StructuredDataMessage withValue(final String key, final >>>>> String value) { >>>>> + put(key, value); >>>>> + return this; >>>>> + } >>>>> + >>>>> /** >>>>> * Returns the supported formats. >>>>> * @return An array of the supported format names. >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/990a97c0/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java >>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java >>>>> index 1ee688e..7f43027 100644 >>>>> --- >>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java >>>>> +++ >>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java >>>>> @@ -37,6 +37,17 @@ public class MapMessageTest { >>>>> } >>>>> >>>>> @Test >>>>> + public void testBuilder() { >>>>> + final String testMsg = "Test message {}"; >>>>> + final MapMessage msg = new MapMessage() >>>>> + .withValue("message", testMsg) >>>>> + .withValue("project", "Log4j"); >>>>> + final String result = msg.getFormattedMessage(); >>>>> + final String expected = "message=\"Test message {}\" >>>>> project=\"Log4j\""; >>>>> + assertEquals(expected, result); >>>>> + } >>>>> + >>>>> + @Test >>>>> public void testXML() { >>>>> final String testMsg = "Test message {}"; >>>>> final MapMessage msg = new MapMessage(); >>>>> >>>>> >>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/990a97c0/log4j-api/src/test/java/org/apache/logging/log4j/message/StructuredDataMessageTest.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git >>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/message/StructuredDataMessageTest.java >>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/message/StructuredDataMessageTest.java >>>>> index d741f35..ce9ad9b 100644 >>>>> --- >>>>> a/log4j-api/src/test/java/org/apache/logging/log4j/message/StructuredDataMessageTest.java >>>>> +++ >>>>> b/log4j-api/src/test/java/org/apache/logging/log4j/message/StructuredDataMessageTest.java >>>>> @@ -37,7 +37,19 @@ public class StructuredDataMessageTest { >>>>> assertEquals(expected, result); >>>>> } >>>>> >>>>> - @Test(expected=IllegalArgumentException.class) >>>>> + @Test >>>>> + public void testBuilder() { >>>>> + final String testMsg = "Test message {}"; >>>>> + final StructuredDataMessage msg = new >>>>> StructuredDataMessage("MsgId@12345", testMsg, "Alert") >>>>> + .withValue("message", testMsg) >>>>> + .withValue("project", "Log4j") >>>>> + .withValue("memo", "This is a very long test memo to >>>>> prevent regression of LOG4J2-114"); >>>>> + final String result = msg.getFormattedMessage(); >>>>> + final String expected = "Alert [MsgId@12345 memo=\"This is a >>>>> very long test memo to prevent regression of LOG4J2-114\" message=\"Test >>>>> message {}\" project=\"Log4j\"] Test message {}"; >>>>> + assertEquals(expected, result); >>>>> + } >>>>> + >>>>> + @Test(expected = IllegalArgumentException.class) >>>>> public void testMsgWithKeyTooLong() { >>>>> final String testMsg = "Test message {}"; >>>>> final StructuredDataMessage msg = new >>>>> StructuredDataMessage("MsgId@12345", testMsg, "Alert"); >>>>> >>>>> >>>> >>>> >>>> -- >>>> [image: MagineTV] >>>> >>>> *Mikael Ståldal* >>>> Senior software developer >>>> >>>> *Magine TV* >>>> [email protected] >>>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>>> >>>> Privileged and/or Confidential Information may be contained in this >>>> message. If you are not the addressee indicated in this message >>>> (or responsible for delivery of the message to such a person), you may >>>> not copy or deliver this message to anyone. In such case, >>>> you should destroy this message and kindly notify the sender by reply >>>> email. >>>> >>> >>> >>> >>> -- >>> Matt Sicker <[email protected]> >>> >> >> > > -- > Matt Sicker <[email protected]> > -- [image: MagineTV] *Mikael Ståldal* Senior software developer *Magine TV* [email protected] Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com Privileged and/or Confidential Information may be contained in this message. If you are not the addressee indicated in this message (or responsible for delivery of the message to such a person), you may not copy or deliver this message to anyone. In such case, you should destroy this message and kindly notify the sender by reply email.
