1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.db.jpa.converter;
18
19 import javax.persistence.AttributeConverter;
20 import javax.persistence.Converter;
21
22 import org.apache.logging.log4j.Marker;
23 import org.apache.logging.log4j.MarkerManager;
24 import org.apache.logging.log4j.core.helpers.Strings;
25
26
27
28
29
30 @Converter(autoApply = false)
31 public class MarkerAttributeConverter implements AttributeConverter<Marker, String> {
32 @Override
33 public String convertToDatabaseColumn(final Marker marker) {
34 if (marker == null) {
35 return null;
36 }
37
38 final StringBuilder builder = new StringBuilder(marker.getName());
39 Marker parent = marker.getParent();
40 int levels = 0;
41 boolean hasParent = false;
42 while (parent != null) {
43 levels++;
44 hasParent = true;
45 builder.append("[ ").append(parent.getName());
46 parent = parent.getParent();
47 }
48 for (int i = 0; i < levels; i++) {
49 builder.append(" ]");
50 }
51 if (hasParent) {
52 builder.append(" ]");
53 }
54 return builder.toString();
55 }
56
57 @Override
58 public Marker convertToEntityAttribute(final String s) {
59 if (Strings.isEmpty(s)) {
60 return null;
61 }
62
63 final int bracket = s.indexOf("[");
64
65 return bracket < 1 ? MarkerManager.getMarker(s) : MarkerManager.getMarker(s.substring(0, bracket));
66 }
67 }