1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.gpx;
18
19 import jakarta.xml.bind.JAXBContext;
20 import jakarta.xml.bind.Marshaller;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.List;
24 import org.bremersee.gpx.model.ExtensionsType;
25 import org.bremersee.xml.XmlDocumentBuilder;
26 import org.w3c.dom.Element;
27
28
29
30
31
32
33 public interface ExtensionsTypeBuilder {
34
35
36
37
38
39
40
41 ExtensionsTypeBuilder use(XmlDocumentBuilder documentBuilder);
42
43
44
45
46
47
48
49 ExtensionsTypeBuilder addElement(Element extensionElement);
50
51
52
53
54
55
56
57
58 ExtensionsTypeBuilder addElement(Object extensionElement, JAXBContext jaxbContext);
59
60
61
62
63
64
65
66
67 ExtensionsTypeBuilder addElement(Object extensionElement, Marshaller marshaller);
68
69
70
71
72
73
74
75 ExtensionsType build(boolean returnNullIfEmpty);
76
77
78
79
80
81
82 static ExtensionsTypeBuilder newInstance() {
83 return new DefaultBuilder();
84 }
85
86
87
88
89
90
91
92 static ExtensionsTypeBuilder newInstance(Collection<? extends Element> extensionElements) {
93 return new DefaultBuilder(extensionElements);
94 }
95
96
97
98
99
100
101
102 static ExtensionsTypeBuilder newInstance(ExtensionsType extensionsType) {
103 return new DefaultBuilder(extensionsType);
104 }
105
106
107
108
109 class DefaultBuilder implements ExtensionsTypeBuilder {
110
111 private final List<Element> anies = new ArrayList<>();
112
113 private XmlDocumentBuilder documentBuilder = XmlDocumentBuilder.newInstance();
114
115
116
117
118 DefaultBuilder() {
119 }
120
121
122
123
124
125
126 DefaultBuilder(Collection<? extends Element> extensionElements) {
127 if (extensionElements != null) {
128 anies.addAll(extensionElements);
129 }
130 }
131
132
133
134
135
136
137 DefaultBuilder(ExtensionsType extensionsType) {
138 if (extensionsType != null) {
139 anies.addAll(extensionsType.getAnies());
140 }
141 }
142
143 @Override
144 public ExtensionsTypeBuilder use(XmlDocumentBuilder documentBuilder) {
145 if (documentBuilder != null) {
146 this.documentBuilder = documentBuilder;
147 }
148 return this;
149 }
150
151 @Override
152 public ExtensionsTypeBuilder addElement(Element extensionElement) {
153 if (extensionElement != null) {
154 anies.add(extensionElement);
155 }
156 return this;
157 }
158
159 @Override
160 public ExtensionsTypeBuilder addElement(Object extensionElement, JAXBContext jaxbContext) {
161 if (extensionElement == null) {
162 return this;
163 }
164 return addElement(
165 documentBuilder.buildDocument(extensionElement, jaxbContext).getDocumentElement());
166 }
167
168 @Override
169 public ExtensionsTypeBuilder addElement(Object extensionElement, Marshaller marshaller) {
170 if (extensionElement == null) {
171 return this;
172 }
173 return addElement(
174 documentBuilder.buildDocument(extensionElement, marshaller).getDocumentElement());
175 }
176
177 @Override
178 public ExtensionsType build(boolean returnNullIfEmpty) {
179 if (returnNullIfEmpty && anies.isEmpty()) {
180 return null;
181 }
182 final ExtensionsType extensionsType = new ExtensionsType();
183 extensionsType.getAnies().addAll(anies);
184 return extensionsType;
185 }
186
187 }
188 }