1 package org.daisy.pipeline.tts.config;
2
3 import java.net.URI;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import net.sf.saxon.s9api.QName;
8 import net.sf.saxon.s9api.XdmNode;
9
10 import org.daisy.common.properties.Properties;
11 import org.daisy.pipeline.tts.config.ConfigReader;
12
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 public class DynamicPropertiesExtension implements ConfigReader.Extension {
17
18 private static final Logger logger = LoggerFactory.getLogger(VoiceConfigExtension.class);
19 private static final String HOST_PROTECTION_PROPERTY = Properties.getProperty("org.daisy.pipeline.tts.host.protection", "true");
20
21 private Map<String,String> props = new HashMap<>();
22
23 @Override
24 public boolean parseNode(XdmNode node, URI documentURI, ConfigReader parent) {
25 String name = node.getNodeName().getLocalName();
26 String key = node.getAttributeValue(new QName(null, "key"));
27 if ("property".equalsIgnoreCase(name)) {
28 if (HOST_PROTECTION_PROPERTY.equalsIgnoreCase("false")) {
29 logger.warn("'" + HOST_PROTECTION_PROPERTY + "' setting is deprecated. " +
30 "It may become unavailable in future version of DAISY Pipeline.");
31 if (key == null) {
32 logger.warn("Missing key for config's property " + node.toString());
33 } else {
34 String value = node.getAttributeValue(new QName(null, "value"));
35 if (value == null) {
36 logger.warn("Missing value for config's property " + node.toString());
37 } else {
38 if (!key.startsWith("org.daisy.pipeline.tts."))
39 key = "org.daisy.pipeline.tts." + key;
40 props.put(key, value);
41 }
42 }
43 } else {
44 if (key != null) {
45 logger.warn("Ignoring property " + key
46 + " inside TTS config file.\nPlease use a"
47 + " system property or environment variable instead.");
48 }
49 }
50 return true;
51 } else {
52 return false;
53 }
54 }
55
56 public Map<String,String> getDynamicProperties() {
57 return props;
58 }
59 }