View Javadoc

1   package org.apache.torque.avalon;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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       * Avalon Component Interfaces
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         // check context Merlin and YAAFI style
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             // check context old ECM style, let exception flow if not available
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             // Copy the registered MapBuilders and take care that they will be built again
172             for (Iterator  i = mapBuilders.keySet().iterator(); i.hasNext();)
173             {
174                 String className = (String)i.next();
175                 registerMapBuilder(className);
176             }
177         }
178         
179         // Provide the singleton instance to the static accessor
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 }