1 /*
2 * Copyright (c) 2003
3 * Information Desire GmbH
4 * All rights reserved.
5 */
6 package com.infodesire.infobit.config;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10
11 import java.net.URL;
12 import java.io.InputStreamReader;
13 import java.io.InputStream;
14 import java.io.IOException;
15
16 import java.util.Properties;
17
18 import javax.xml.parsers.SAXParserFactory;
19 import javax.xml.parsers.SAXParser;
20 import javax.xml.parsers.ParserConfigurationException;
21
22 import org.xml.sax.helpers.DefaultHandler;
23 import org.xml.sax.SAXException;
24 import org.xml.sax.Attributes;
25
26 import com.infodesire.infobit.InfobitConfiguration;
27 import com.infodesire.infobit.InfobitPool;
28 import com.infodesire.infobit.InfobitException;
29
30 /***
31 * infobit config loader. configures given infobit manager from specified file
32 * on classpath.
33 *
34 * @author konstantin
35 * @created July 29, 2003
36 * @version $Revision: 1.4 $
37 */
38 public class InfobitConfig {
39 private static Log _log = LogFactory.getLog(InfobitConfig.class);
40
41 private InfobitPool _pool;
42 private InfobitConfiguration _configuration;
43 private Properties _properties = new Properties();
44
45
46 /***
47 * configure manager instance from file
48 *
49 * @param file Description of Parameter
50 * @param configuration Description of Parameter
51 */
52 public void configure(InfobitConfiguration configuration, String file) {
53 if (_log.isDebugEnabled()) {
54 _log.debug("loading from file: " + file);
55 }
56 _configuration = configuration;
57 InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(file);
58 if (input == null && !file.startsWith("/")) {
59 input = Thread.currentThread().getContextClassLoader().getResourceAsStream("/" + file);
60 }
61 try {
62 SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
63 parser.parse(input, new ConfigHandler());
64 } catch (Throwable t) {
65 _log.error("unable to configure infobit manager", t);
66 throw new RuntimeException(t);
67 }
68 }
69
70
71 /***
72 * SAX Handler implementation for handling tags in config file and building
73 * config objects. ( server managers )
74 *
75 * @author konstantin
76 * @created July 4, 2003
77 * @version $Revision: 1.4 $
78 */
79 private class ConfigHandler extends DefaultHandler {
80 final static String POOL = "pool";
81 final static String PROPERTY = "property";
82 final static String NAME = "name";
83 private String _currentPropertyName;
84 private StringBuffer _currentPropertyValue;
85 private String _className;
86
87
88 /***
89 * start element processing
90 *
91 * @param uri Description of Parameter
92 * @param localName Description of Parameter
93 * @param qName Description of Parameter
94 * @param attributes Description of Parameter
95 * @exception SAXException Description of Exception
96 */
97 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
98 if (POOL.equals(qName)) {
99 _pool = new InfobitPool();
100 _properties.clear();
101 }
102 else if (PROPERTY.equals(qName)) {
103 _currentPropertyName = attributes.getValue("name");
104 _currentPropertyValue = new StringBuffer();
105 }
106 }
107
108
109 /***
110 * end element processing
111 *
112 * @param uri Description of Parameter
113 * @param localName Description of Parameter
114 * @param qName Description of Parameter
115 * @exception SAXException Description of Exception
116 */
117 public void endElement(String uri, String localName, String qName) throws SAXException {
118 if (POOL.equals(qName)) {
119 try {
120 _pool.init(_properties);
121 } catch (InfobitException ie) {
122 _log.error("could not create pool" + _pool.getName(), ie);
123 return;
124 }
125 _configuration.addPool(_pool);
126
127 }
128 else if (PROPERTY.equals(qName)) {
129 _properties.put(_currentPropertyName, _currentPropertyValue.toString());
130 _currentPropertyName = null;
131 _currentPropertyValue = null;
132 }
133 }
134
135
136 /***
137 * process element contents
138 *
139 * @param chars Description of Parameter
140 * @param offset Description of Parameter
141 * @param len Description of Parameter
142 * @exception SAXException Description of Exception
143 */
144 public void characters(char[] chars, int offset, int len) throws SAXException {
145 if (_currentPropertyValue != null) {
146 _currentPropertyValue.append(chars, offset, len);
147 }
148 }
149
150 }
151
152 }
This page was automatically generated by Maven