1 /*
2 * Copyright (c) 2003, Henri Yandell
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or
6 * without modification, are permitted provided that the
7 * following conditions are met:
8 *
9 * + Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 *
12 * + Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * + Neither the name of Simple-JNDI nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 package org.osjava.sj.loader.util;
34
35 import java.io.BufferedReader;
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.io.InputStreamReader;
39
40
41 /***
42 * Functionally like the CustomProperties class in that it has
43 * comments and an order, IniProperties reads .ini files. These
44 * implicitly have a two level dotted notation, though any values
45 * not in the two level are treated as simple one levels.
46 * Comments are a semi-colon.
47 */
48 public class IniProperties extends AbstractProperties {
49
50 /***
51 * Load in a .ini file.
52 * semi-colons are comments. blocks are denoted with square brackets.
53 * values are then key=value pairs, with blocks being prepended to keys.
54 */
55 public synchronized void load(InputStream in) throws IOException {
56 try {
57 BufferedReader reader = new BufferedReader( new InputStreamReader(in) );
58 String line = "";
59 String block = "";
60 while( (line = reader.readLine()) != null) {
61
62 line = line.trim(); // important?? bad??
63
64 // handle blocks
65 if(line.startsWith("[") && line.endsWith("]")) {
66 block = line.substring(1, line.length()-1);
67 }
68
69 int idx = line.indexOf(';');
70 // remove comment
71 if(idx != -1) {
72 line = line.substring(0,idx);
73 }
74
75 // split equals sign
76 idx = line.indexOf('=');
77 if(idx != -1) {
78 if("".equals(block)) {
79 this.setProperty(line.substring(0,idx), line.substring(idx+1));
80 } else {
81 this.setProperty(block + getDelimiter() + line.substring(0,idx), line.substring(idx+1));
82 }
83 } else {
84 // blank line, or just a bad line
85 // we ignore it
86 }
87 }
88 reader.close();
89 } catch(IOException ioe) {
90 ioe.printStackTrace();
91 }
92 }
93
94 }