1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.mycore.mets.iiif;
20
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Objects;
25 import java.util.stream.Collectors;
26
27 import org.jdom2.Element;
28 import org.jdom2.Text;
29 import org.jdom2.filter.Filters;
30 import org.jdom2.xpath.XPathExpression;
31 import org.jdom2.xpath.XPathFactory;
32 import org.mycore.common.MCRConstants;
33 import org.mycore.iiif.presentation.model.attributes.MCRIIIFMetadata;
34
35 public class MCRMetsIIIFModsMetadataExtractor implements MCRMetsIIIFMetadataExtractor {
36
37 @Override
38 public List<MCRIIIFMetadata> extractModsMetadata(Element xmlData) {
39 Map<String, String> elementLabelMap = new HashMap<>();
40
41 elementLabelMap.put("title", "mods:mods/mods:titleInfo/mods:title/text()");
42 elementLabelMap.put("genre", "mods:mods/mods:genre/text()");
43
44
45 return elementLabelMap.entrySet().stream().map(entry -> {
46 XPathExpression<Text> pathExpression = XPathFactory.instance().compile(entry.getValue(), Filters.text(),
47 null, MCRConstants.MODS_NAMESPACE);
48 List<Text> texts = pathExpression.evaluate(xmlData);
49 if (texts.size() == 0) {
50 return null;
51 }
52 return new MCRIIIFMetadata(entry.getKey(),
53 texts.stream().map(Text::getText).collect(Collectors.joining(", ")));
54 }).filter(Objects::nonNull)
55 .collect(Collectors.toList());
56 }
57
58 }