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 package gov.nist.secauto.metaschema.schemagen.xml.datatype;
28
29 import org.jdom2.Document;
30 import org.jdom2.Element;
31 import org.jdom2.JDOMException;
32 import org.jdom2.Namespace;
33 import org.jdom2.filter.Filters;
34 import org.jdom2.input.SAXBuilder;
35 import org.jdom2.xpath.XPathExpression;
36 import org.jdom2.xpath.XPathFactory;
37
38 import java.io.IOException;
39 import java.io.InputStream;
40 import java.nio.file.Path;
41 import java.util.Collection;
42 import java.util.List;
43 import java.util.Map;
44 import java.util.stream.Collectors;
45
46 import edu.umd.cs.findbugs.annotations.NonNull;
47 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
48
49 public class JDom2XmlSchemaLoader {
50 @NonNull
51 public static final String NS_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
52
53 @NonNull
54 private final Document document;
55
56 @SuppressWarnings("null")
57 public JDom2XmlSchemaLoader(@NonNull Path path) throws JDOMException, IOException {
58 this(new SAXBuilder().build(path.toFile()));
59 }
60
61 @SuppressWarnings("null")
62 public JDom2XmlSchemaLoader(@NonNull InputStream is) throws JDOMException, IOException {
63 this(new SAXBuilder().build(is));
64 }
65
66 @SuppressFBWarnings("EI_EXPOSE_REP2")
67 public JDom2XmlSchemaLoader(@NonNull Document document) {
68 this.document = document;
69 }
70
71 protected Document getNode() {
72 return document;
73 }
74
75 @SuppressWarnings("null")
76 @NonNull
77 public List<Element> getContent(
78 @NonNull String path,
79 @NonNull Map<String, String> prefixToNamespaceMap) {
80
81 Collection<Namespace> namespaces = prefixToNamespaceMap.entrySet().stream()
82 .map(entry -> Namespace.getNamespace(entry.getKey(), entry.getValue()))
83 .collect(Collectors.toList());
84 XPathExpression<Element> xpath = XPathFactory.instance().compile(path, Filters.element(), null, namespaces);
85 return xpath.evaluate(getNode());
86 }
87 }