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 org.apache.logging.log4j.core.time.Instant;
20 import org.apache.logging.log4j.core.time.MutableInstant;
21 import org.apache.logging.log4j.status.StatusLogger;
22 import org.apache.logging.log4j.util.Strings;
23
24 import javax.persistence.AttributeConverter;
25 import javax.persistence.Converter;
26
27
28
29
30
31 @Converter(autoApply = false)
32 public class InstantAttributeConverter implements AttributeConverter<Instant, String> {
33 private static final StatusLogger LOGGER = StatusLogger.getLogger();
34
35 @Override
36 public String convertToDatabaseColumn(final Instant instant) {
37 if (instant == null) {
38 return null;
39 }
40 return instant.getEpochSecond() + "," + instant.getNanoOfSecond();
41 }
42
43 @Override
44 public Instant convertToEntityAttribute(final String s) {
45 if (Strings.isEmpty(s)) {
46 return null;
47 }
48
49 int pos = s.indexOf(",");
50 long epochSecond = Long.parseLong(s.substring(0, pos));
51 int nanos = Integer.parseInt(s.substring(pos + 1, s.length()));
52
53 MutableInstant result = new MutableInstant();
54 result.initFromEpochSecond(epochSecond, nanos);
55 return result;
56 }
57 }