1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.field;
35
36 import info.magnolia.ui.field.factory.DateFieldFactory;
37
38 import java.time.LocalDateTime;
39 import java.time.format.DateTimeFormatter;
40 import java.time.temporal.Temporal;
41 import java.util.Optional;
42
43
44
45
46 @FieldType("dateField")
47 public class DateFieldDefinition extends ConfiguredFieldDefinition<Object> {
48
49 public static final String NOW = "now";
50
51 private boolean time = false;
52
53 private String dateFormat = "yyyy-MM-dd";
54
55 private String timeFormat = "HH:mm";
56
57 public DateFieldDefinition() {
58 setFactoryClass(DateFieldFactory.class);
59 setType(Temporal.class);
60 }
61
62 public void init() {
63 Optional.ofNullable(super.getDefaultValue())
64 .map(String::valueOf)
65 .flatMap(this::asTemporal).ifPresent(this::setDefaultValue);
66 }
67
68 public boolean isTime() {
69 return time;
70 }
71
72 public void setTime(boolean time) {
73 this.time = time;
74 }
75
76 public String getDateFormat() {
77 return dateFormat;
78 }
79
80 public void setDateFormat(String dateFormat) {
81 this.dateFormat = dateFormat;
82 }
83
84 public String getTimeFormat() {
85 return timeFormat;
86 }
87
88 public void setTimeFormat(String timeFormat) {
89 this.timeFormat = timeFormat;
90 }
91
92 private Optional<Temporal> asTemporal(String defaultValue) {
93 if (NOW.equalsIgnoreCase(defaultValue)) {
94 return Optional.of(LocalDateTime.now());
95 }
96
97 String pattern = isTime() ? getDateFormat() : getDateFormat() + " " + getTimeFormat();
98 return Optional.of(LocalDateTime.parse(defaultValue, DateTimeFormatter.ofPattern(pattern)));
99 }
100 }