blob: eebda1d4fe81730957608bbf8899460047c12762 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
/**
* Copyright (C) 2009-2011 Scalable Solutions AB <http://scalablesolutions.se>
*
* Based on Configgy by Robey Pointer.
* Copyright 2009 Robey Pointer <robeypointer@gmail.com>
* http://www.apache.org/licenses/LICENSE-2.0
*/
package akka.config
import java.io.{ BufferedReader, File, FileInputStream, InputStream, InputStreamReader }
/**
* An interface for finding config files and reading them into strings for
* parsing. This is used to handle `include` directives in config files.
*/
trait Importer {
def importFile(filename: String): String
private val BUFFER_SIZE = 8192
protected def streamToString(in: InputStream): String = {
try {
val reader = new BufferedReader(new InputStreamReader(in, "UTF-8"))
val buffer = new Array[Char](BUFFER_SIZE)
val sb = new StringBuilder
var n = 0
while (n >= 0) {
n = reader.read(buffer, 0, buffer.length)
if (n >= 0) {
sb.appendAll(buffer, 0, n)
}
}
in.close()
sb.toString
} catch {
case x => throw new ConfigurationException(x.toString)
}
}
}
/**
* An Importer that looks for imported config files in the filesystem.
* This is the default importer.
*/
class FilesystemImporter(val baseDir: String) extends Importer {
def importFile(filename: String): String = {
val f = new File(filename)
val file = if (f.isAbsolute) f else new File(baseDir, filename)
streamToString(new FileInputStream(file))
}
}
/**
* An Importer that looks for imported config files in the java resources
* of the system class loader (usually the jar used to launch this app).
*/
class ResourceImporter(classLoader: ClassLoader) extends Importer {
def importFile(filename: String): String = {
val stream = classLoader.getResourceAsStream(filename)
streamToString(stream)
}
}
|