1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.tika.parser.xml;
18
19 import org.apache.tika.metadata.Metadata;
20 import org.xml.sax.Attributes;
21 import org.xml.sax.helpers.DefaultHandler;
22
23
24
25
26
27
28
29 public class AttributeDependantMetadataHandler extends DefaultHandler {
30
31 private final Metadata metadata;
32
33 private final String nameHoldingAttribute;
34 private final String namePrefix;
35 private String name;
36
37 private final StringBuilder buffer = new StringBuilder();
38
39 public AttributeDependantMetadataHandler(Metadata metadata, String nameHoldingAttribute, String namePrefix) {
40 this.metadata = metadata;
41 this.nameHoldingAttribute = nameHoldingAttribute;
42 this.namePrefix = namePrefix;
43 }
44
45 public void addMetadata(String value) {
46 if(name == null || name.length() == 0) {
47
48 return;
49 }
50 if (value.length() > 0) {
51 String previous = metadata.get(name);
52 if (previous != null && previous.length() > 0) {
53 value = previous + ", " + value;
54 }
55 metadata.set(name, value);
56 }
57 }
58
59 public void endElement(String uri, String localName, String name) {
60 addMetadata(buffer.toString());
61 buffer.setLength(0);
62 }
63
64 public void startElement(
65 String uri, String localName, String name, Attributes attributes) {
66 String rawName = attributes.getValue(nameHoldingAttribute);
67 if (rawName != null) {
68 if (namePrefix == null) {
69 this.name = rawName;
70 } else {
71 this.name = namePrefix + rawName;
72 }
73 }
74
75 }
76
77
78 public void characters(char[] ch, int start, int length) {
79 buffer.append(ch, start, length);
80 }
81
82 }