merge with master
[nikiroo-utils.git] / library / Template.java
CommitLineData
8639c60d
NR
1package be.nikiroo.fanfix.library;
2
8639c60d
NR
3import java.io.IOException;
4import java.io.InputStream;
5import java.util.HashMap;
6import java.util.List;
7import java.util.Map;
8
9import be.nikiroo.utils.IOUtils;
8639c60d
NR
10import be.nikiroo.utils.streams.ReplaceInputStream;
11
12public class Template {
13 private Class<?> location;
14 private String name;
15
16 private Map<String, String> values = new HashMap<String, String>();
17 private Map<String, Template> valuesTemplate = new HashMap<String, Template>();
18 private Map<String, List<Template>> valuesTemplateList = new HashMap<String, List<Template>>();
19
20 public Template(Class<?> location, String name) {
21 this.location = location;
22 this.name = name;
23 }
24
25 public synchronized InputStream read() throws IOException {
26
27 String from[] = new String[values.size() + valuesTemplate.size()
28 + valuesTemplateList.size()];
29 String to[] = new String[from.length];
30
31 int i = 0;
32
33 for (String key : values.keySet()) {
34 from[i] = "${" + key + "}";
35 to[i] = values.get(key);
36
37 i++;
38 }
39 for (String key : valuesTemplate.keySet()) {
40 InputStream value = valuesTemplate.get(key).read();
41 try {
42 from[i] = "${" + key + "}";
43 to[i] = IOUtils.readSmallStream(value);
44 } finally {
45 value.close();
46 }
47
48 i++;
49 }
50 for (String key : valuesTemplateList.keySet()) {
51 List<Template> templates = valuesTemplateList.get(key);
52 StringBuilder value = new StringBuilder();
53 for (Template template : templates) {
54 InputStream valueOne = template.read();
55 try {
56 value.append(IOUtils.readSmallStream(valueOne));
57 } finally {
58 valueOne.close();
59 }
60 }
074a8325 61
8639c60d
NR
62 from[i] = "${" + key + "}";
63 to[i] = value.toString();
64
65 i++;
66 }
977f60a2 67
8639c60d 68 InputStream in = IOUtils.openResource(location, name);
074a8325 69 return new ReplaceInputStream(in, from, to);
8639c60d
NR
70 }
71
72 public synchronized Template set(String key, String value) {
868c706b 73 values.put(key, value == null ? "" : value);
8639c60d
NR
74 valuesTemplate.remove(key);
75 valuesTemplateList.remove(key);
76 return this;
77 }
78
79 public synchronized Template set(String key, Template value) {
977f60a2
NR
80 if (value == null) {
81 return set(key, "");
82 }
83
8639c60d
NR
84 values.remove(key);
85 valuesTemplate.put(key, value);
86 valuesTemplateList.remove(key);
977f60a2 87
8639c60d
NR
88 return this;
89 }
90
91 public synchronized Template set(String key, List<Template> value) {
92 values.remove(key);
93 valuesTemplate.remove(key);
94 valuesTemplateList.put(key, value);
95 return this;
96 }
97
98 @Override
99 public String toString() {
100 return String.format(
101 "[Template for %s with (%d,%d,%d) value(s) to replace]", name,
102 values.size(), valuesTemplate.size(),
103 valuesTemplateList.size());
104 }
105}