1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.html;
16
17 import java.time.LocalDateTime;
18 import java.time.format.DateTimeFormatter;
19 import java.time.format.DateTimeParseException;
20 import java.util.Map;
21
22 import org.apache.commons.lang3.StringUtils;
23 import org.htmlunit.BrowserVersion;
24 import org.htmlunit.SgmlPage;
25
26
27
28
29
30
31
32
33 public class HtmlDateTimeLocalInput extends HtmlInput implements LabelableElement {
34
35 private static final DateTimeFormatter FORMATTER_ = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
36
37
38
39
40
41
42
43
44 HtmlDateTimeLocalInput(final String qualifiedName, final SgmlPage page,
45 final Map<String, DomAttr> attributes) {
46 super(qualifiedName, page, attributes);
47 }
48
49
50
51
52 @Override
53 public void setDefaultChecked(final boolean defaultChecked) {
54
55 }
56
57
58
59
60 @Override
61 public void setValue(final String newValue) {
62 try {
63 if (StringUtils.isNotEmpty(newValue)) {
64 FORMATTER_.parse(newValue);
65 }
66 super.setValue(newValue);
67 }
68 catch (final DateTimeParseException ignored) {
69
70 }
71 }
72
73
74
75
76 @Override
77 public boolean isValid() {
78 return super.isValid() && isMaxValid() && isMinValid();
79 }
80
81
82
83
84
85
86
87
88 private boolean isMinValid() {
89 if (!getMin().isEmpty()) {
90 try {
91 final LocalDateTime dateValue = LocalDateTime.parse(getRawValue(), FORMATTER_);
92 final LocalDateTime minDate = LocalDateTime.parse(getMin(), FORMATTER_);
93 return minDate.isEqual(dateValue) || minDate.isBefore(dateValue);
94 }
95 catch (final DateTimeParseException ignored) {
96
97 }
98 }
99 return true;
100 }
101
102
103
104
105
106
107
108
109 private boolean isMaxValid() {
110 if (!getMax().isEmpty()) {
111 try {
112 final LocalDateTime dateValue = LocalDateTime.parse(getRawValue(), FORMATTER_);
113 final LocalDateTime maxDate = LocalDateTime.parse(getMax(), FORMATTER_);
114 return maxDate.isEqual(dateValue) || maxDate.isAfter(dateValue);
115 }
116 catch (final DateTimeParseException ignored) {
117
118 }
119 }
120 return true;
121 }
122
123 @Override
124 protected void adjustValueAfterTypeChange(final HtmlInput oldInput, final BrowserVersion browserVersion) {
125 setValue("");
126 }
127 }