1 package org.apache.torque.avalon;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Iterator;
24 import java.util.Map;
25
26 import org.apache.avalon.framework.activity.Disposable;
27 import org.apache.avalon.framework.activity.Initializable;
28 import org.apache.avalon.framework.configuration.Configurable;
29 import org.apache.avalon.framework.configuration.Configuration;
30 import org.apache.avalon.framework.configuration.ConfigurationException;
31 import org.apache.avalon.framework.context.Context;
32 import org.apache.avalon.framework.context.ContextException;
33 import org.apache.avalon.framework.context.Contextualizable;
34 import org.apache.avalon.framework.logger.LogEnabled;
35 import org.apache.avalon.framework.logger.Logger;
36 import org.apache.avalon.framework.thread.ThreadSafe;
37 import org.apache.commons.lang.StringUtils;
38 import org.apache.torque.TorqueInstance;
39
40 /***
41 * Avalon component for Torque.
42 *
43 * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
44 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
45 * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
46 * @version $Id: TorqueComponent.java 529759 2007-04-17 20:52:01Z tv $
47 */
48 public class TorqueComponent
49 extends TorqueInstance
50 implements Torque,
51 LogEnabled,
52 Configurable,
53 Initializable,
54 Contextualizable,
55 Disposable,
56 ThreadSafe
57 {
58 /*** The Avalon Application Root */
59 private String appRoot = null;
60
61 /*** The Avalon Logger */
62 private Logger logger = null;
63
64 /*** The configuration file name. */
65 private String configFile = null;
66
67
68
69
70
71
72
73
74
75 /***
76 * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(org.apache.avalon.framework.logger.Logger)
77 */
78 public void enableLogging(Logger aLogger)
79 {
80 this.logger = aLogger;
81 }
82
83 /***
84 * Convenience method to provide the Avalon logger the way AbstractLogEnabled does.
85 */
86 public Logger getLogger()
87 {
88 return logger;
89 }
90
91 /***
92 * @see
93 * org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
94 */
95 public void configure(Configuration configuration)
96 throws ConfigurationException
97 {
98 getLogger().debug("configure(" + configuration + ")");
99
100 String configurationFile
101 = configuration.getChild("configfile").getValue();
102
103 if (StringUtils.isNotEmpty(appRoot))
104 {
105 if (configurationFile.startsWith("/"))
106 {
107 configurationFile = configurationFile.substring(1);
108 getLogger().debug("Config File changes to "
109 + configurationFile);
110 }
111
112 StringBuffer sb = new StringBuffer();
113 sb.append(appRoot);
114 sb.append(File.separator);
115 sb.append(configurationFile);
116
117 configurationFile = sb.toString();
118 }
119
120 getLogger().debug("Config File is " + configurationFile);
121
122 this.configFile = configurationFile;
123 }
124
125 /***
126 * @see org.apache.avalon.framework.context.Contextualizable
127 */
128 public void contextualize(Context context)
129 throws ContextException
130 {
131
132 try
133 {
134 appRoot = ((File) context.get("urn:avalon:home")).getAbsolutePath();
135 }
136 catch (ContextException ce)
137 {
138 appRoot = null;
139 }
140
141 if (appRoot == null)
142 {
143
144 appRoot = (String) context.get("componentAppRoot");
145 }
146
147 if (StringUtils.isNotEmpty(appRoot))
148 {
149 if (appRoot.endsWith("/"))
150 {
151 appRoot = appRoot.substring(0, appRoot.length() - 1);
152 getLogger().debug("Application Root changed to " + appRoot);
153 }
154 }
155 }
156
157 /***
158 * @see org.apache.avalon.framework.activity.Initializable#initialize()
159 */
160 public void initialize()
161 throws Exception
162 {
163 getLogger().debug("initialize()");
164
165 TorqueInstance instance = org.apache.torque.Torque.getInstance();
166
167 Map mapBuilders = instance.getMapBuilders();
168
169 if (mapBuilders != null)
170 {
171
172 for (Iterator i = mapBuilders.keySet().iterator(); i.hasNext();)
173 {
174 String className = (String)i.next();
175 registerMapBuilder(className);
176 }
177 }
178
179
180 org.apache.torque.Torque.setInstance(this);
181
182 init(configFile);
183 }
184
185 /***
186 * @see org.apache.avalon.framework.activity.Disposable#dispose()
187 */
188 public void dispose()
189 {
190 getLogger().debug("dispose()");
191 try
192 {
193 shutdown();
194 }
195 catch (Exception e)
196 {
197 getLogger().error("Error while stopping Torque", e);
198 }
199 }
200 }