1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.util.resource;
18
19 import java.io.BufferedReader;
20 import java.io.ByteArrayInputStream;
21 import java.io.File;
22 import java.io.FileInputStream;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.io.InputStreamReader;
26 import java.io.Reader;
27 import java.util.Iterator;
28 import java.util.Properties;
29
30
31
32
33
34
35
36
37
38
39 public class PropertyReplacementResourceFilter implements ResourceFilter {
40
41
42 private File propertyFilePath;
43
44
45
46
47
48
49 public PropertyReplacementResourceFilter(File propertyFile) {
50 if (propertyFile == null) {
51 throw new IllegalArgumentException("Property file may not be null");
52 }
53 propertyFilePath = propertyFile;
54 }
55
56
57 public InputStream applyFilter(InputStream resource) throws ResourceException {
58 Properties props = new Properties();
59 try {
60 props.load(new FileInputStream(propertyFilePath));
61 } catch (IOException e) {
62 throw new ResourceException("Unable to read property file", e);
63 }
64
65 try {
66 StringBuilder resourceBuffer = new StringBuilder();
67 Reader resourceReader = new BufferedReader(new InputStreamReader(resource));
68
69 char[] resourceCharacters = new char[2048];
70 while (resourceReader.read(resourceCharacters) > -1) {
71 resourceBuffer.append(resourceCharacters);
72 resourceCharacters = new char[2048];
73 }
74 resource.close();
75
76 String resourceString = resourceBuffer.toString();
77
78 Iterator<String> keyItr = (Iterator<String>) props.propertyNames();
79 String key;
80 while (keyItr.hasNext()) {
81 key = keyItr.next();
82 resourceString = resourceString.replace("${" + key + "}", props.getProperty(key));
83 }
84
85 return new ByteArrayInputStream(resourceString.getBytes());
86 } catch (IOException e) {
87 throw new ResourceException("Unable to read contents of resource", e);
88 }
89 }
90 }