1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.mycore.mods.bibtex;
20
21 import java.util.Collection;
22 import java.util.HashSet;
23 import java.util.Set;
24
25 import org.jdom2.Element;
26
27 import bibtex.dom.BibtexAbstractValue;
28 import bibtex.dom.BibtexEntry;
29 import bibtex.dom.BibtexString;
30
31
32
33
34
35
36 class MCRUnsupportedFieldTransformer extends MCRFieldTransformer {
37
38 Set<String> supportedFields = new HashSet<>();
39
40 MCRUnsupportedFieldTransformer(Collection<MCRFieldTransformer> supportedTransformers) {
41 super("*");
42 determineSupportedFields(supportedTransformers);
43 }
44
45 private void determineSupportedFields(Collection<MCRFieldTransformer> supportedTransformers) {
46 for (MCRFieldTransformer transformer : supportedTransformers) {
47 supportedFields.add(transformer.getField());
48 }
49 }
50
51 private boolean isUnsupported(String field) {
52 return !supportedFields.contains(field);
53 }
54
55 void transformField(BibtexEntry entry, Element parent) {
56 for (String field : (entry.getFields().keySet())) {
57 if (isUnsupported(field)) {
58 this.field = field;
59 super.transformField(entry, parent);
60 }
61 }
62 }
63
64 void buildField(BibtexAbstractValue value, Element parent) {
65 MCRMessageLogger.logMessage("Field " + field + " is unsupported: " + value.toString().replaceAll("\\s+", " "));
66 String xPath = "mods:extension/field[@name='" + field + "']" + MCRFieldTransformer.AS_NEW_ELEMENT;
67 String content = ((BibtexString) value).getContent();
68 content = normalizeValue(content);
69 buildElement(xPath, content, parent);
70 }
71 }