20
20
import java .util .LinkedHashMap ;
21
21
import java .util .List ;
22
22
import java .util .Map ;
23
+ import java .util .Optional ;
24
+
23
25
import org .apache .logging .log4j .Level ;
24
26
import org .apache .logging .log4j .core .config .Configuration ;
25
27
import org .apache .logging .log4j .core .config .builder .api .Component ;
@@ -57,43 +59,51 @@ public DefaultComponentBuilder(final CB builder, final String name, final String
57
59
this .value = value ;
58
60
}
59
61
62
+ /** {@inheritDoc} */
60
63
@ Override
61
64
public T addAttribute (final String key , final boolean value ) {
62
65
return put (key , Boolean .toString (value ));
63
66
}
64
67
68
+ /** {@inheritDoc} */
65
69
@ Override
66
70
public T addAttribute (final String key , final Enum <?> value ) {
67
- return put (key , value . name ( ));
71
+ return put (key , Optional . ofNullable ( value ). map ( Enum :: name ). orElse ( null ));
68
72
}
69
73
74
+ /** {@inheritDoc} */
70
75
@ Override
71
76
public T addAttribute (final String key , final int value ) {
72
77
return put (key , Integer .toString (value ));
73
78
}
74
79
80
+ /** {@inheritDoc} */
75
81
@ Override
76
82
public T addAttribute (final String key , final Level level ) {
77
- return put (key , level . toString ( ));
83
+ return put (key , Optional . ofNullable ( level ). map ( Level :: toString ). orElse ( null ));
78
84
}
79
85
86
+ /** {@inheritDoc} */
80
87
@ Override
81
88
public T addAttribute (final String key , final Object value ) {
82
- return put (key , value . toString ( ));
89
+ return put (key , Optional . ofNullable ( value ). map ( Object :: toString ). orElse ( null ));
83
90
}
84
91
92
+ /** {@inheritDoc} */
85
93
@ Override
86
94
public T addAttribute (final String key , final String value ) {
87
95
return put (key , value );
88
96
}
89
97
98
+ /** {@inheritDoc} */
90
99
@ Override
91
100
@ SuppressWarnings ("unchecked" )
92
101
public T addComponent (final ComponentBuilder <?> builder ) {
93
102
components .add (builder .build ());
94
103
return (T ) this ;
95
104
}
96
105
106
+ /** {@inheritDoc} */
97
107
@ Override
98
108
public Component build () {
99
109
final Component component = new Component (type , name , value );
@@ -102,19 +112,37 @@ public Component build() {
102
112
return component ;
103
113
}
104
114
115
+ /** {@inheritDoc} */
105
116
@ Override
106
117
public CB getBuilder () {
107
118
return builder ;
108
119
}
109
120
121
+ /** {@inheritDoc} */
110
122
@ Override
111
123
public String getName () {
112
124
return name ;
113
125
}
114
126
127
+ /**
128
+ * Puts the given key/value pair to the attribute map.
129
+ * <p>
130
+ * If the value is {@code null} the component attribute with the given {@code key} will
131
+ * instead be removed from the map.
132
+ * </p>
133
+ * @param key the key
134
+ * @param value the value
135
+ * @return this builder (for chaining)
136
+ */
115
137
@ SuppressWarnings ("unchecked" )
116
138
protected T put (final String key , final String value ) {
117
- attributes .put (key , value );
139
+
140
+ if (value != null ) {
141
+ attributes .put (key , value );
142
+ } else {
143
+ attributes .remove (key );
144
+ }
145
+
118
146
return (T ) this ;
119
147
}
120
148
}
0 commit comments