001 package org.apache.fulcrum.yaafi.service.baseservice;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import java.io.File;
023
024 import org.apache.avalon.framework.configuration.Configuration;
025 import org.apache.avalon.framework.configuration.ConfigurationException;
026 import org.apache.avalon.framework.context.Context;
027 import org.apache.avalon.framework.context.ContextException;
028 import org.apache.avalon.framework.logger.AbstractLogEnabled;
029 import org.apache.avalon.framework.parameters.ParameterException;
030 import org.apache.avalon.framework.parameters.Parameters;
031 import org.apache.avalon.framework.service.ServiceException;
032 import org.apache.avalon.framework.service.ServiceManager;
033
034 /**
035 * Base class for a service implementation capturing the Avalon
036 * serviceConfiguration artifacts. Take care that using this class
037 * introduces a dependency to the YAAFI library.
038 *
039 * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
040 */
041
042 public abstract class BaseServiceImpl
043 extends AbstractLogEnabled
044 implements BaseService
045 {
046 /** The name of the service as defined in the role configuration file */
047 private String serviceName;
048
049 /** The context supplied by the Avalon framework */
050 private Context serviceContext;
051
052 /** The service manager supplied by the Avalon framework */
053 private ServiceManager serviceManager;
054
055 /** The configuraton supplied by the Avalon framework */
056 private Configuration serviceConfiguration;
057
058 /** The parameters supplied by the avalon framework */
059 private Parameters serviceParameters;
060
061 /** the Avalon application directory */
062 private File serviceApplicationDir;
063
064 /** the Avalon temp directory */
065 private File serviceTempDir;
066
067 /** the Avalon partition name */
068 private String servicePartitionName;
069
070 /** the class loader for this service */
071 private ClassLoader serviceClassLoader;
072
073 /////////////////////////////////////////////////////////////////////////
074 // Avalon Lifecycle Implementation
075 /////////////////////////////////////////////////////////////////////////
076
077 /**
078 * Constructor
079 */
080 public BaseServiceImpl()
081 {
082 // nothing to do
083 }
084
085 /**
086 * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
087 */
088 public void contextualize(Context context) throws ContextException
089 {
090 this.serviceContext = context;
091 this.serviceName = (String) context.get("urn:avalon:name");
092 this.serviceApplicationDir = (File) context.get("urn:avalon:home");
093 this.serviceTempDir = (File) context.get("urn:avalon:temp");
094 this.servicePartitionName = (String) context.get("urn:avalon:partition");
095 this.serviceClassLoader = (ClassLoader) context.get("urn:avalon:classloader");
096 }
097
098 /**
099 * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
100 */
101 public void service(ServiceManager serviceManager) throws ServiceException
102 {
103 this.serviceManager = serviceManager;
104 }
105
106 /**
107 * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
108 */
109 public void configure(Configuration configuration) throws ConfigurationException
110 {
111 this.serviceConfiguration = configuration;
112 }
113
114 /**
115 * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
116 */
117 public void parameterize(Parameters parameters) throws ParameterException
118 {
119 this.serviceParameters = parameters;
120 }
121
122 /**
123 * @see org.apache.avalon.framework.configuration.Reconfigurable#reconfigure(org.apache.avalon.framework.configuration.Configuration)
124 */
125 public void reconfigure(Configuration configuration) throws ConfigurationException
126 {
127 this.serviceConfiguration = configuration;
128 }
129
130 /**
131 * @see org.apache.avalon.framework.activity.Disposable#dispose()
132 */
133 public void dispose()
134 {
135 this.serviceApplicationDir = null;
136 this.serviceClassLoader = null;
137 this.serviceConfiguration = null;
138 this.serviceContext = null;
139 this.serviceManager = null;
140 this.serviceName = null;
141 this.serviceParameters = null;
142 this.servicePartitionName = null;
143 this.serviceTempDir = null;
144 }
145
146 /////////////////////////////////////////////////////////////////////////
147 // Service Implementation
148 /////////////////////////////////////////////////////////////////////////
149
150 /**
151 * @see java.lang.Object#toString()
152 */
153 public String toString()
154 {
155 StringBuffer result = new StringBuffer();
156
157 result.append( getClass().getName() + "@" + Integer.toHexString(hashCode()));
158
159 result.append("{");
160
161 result.append("serviceName: ");
162 result.append(this.getServiceName());
163 result.append(";");
164
165 result.append(" servicePartitionName: ");
166 result.append(this.getServicePartitionName());
167 result.append(";");
168
169 result.append(" serviceApplicatonDir: ");
170 result.append(this.getServiceApplicationDir().getAbsolutePath());
171 result.append(";");
172
173 result.append(" serviceTempDir: ");
174 result.append(this.getServiceTempDir().getAbsolutePath());
175 result.append(";");
176
177 result.append(" serviceContext: ");
178 result.append(this.getServiceContext().toString());
179 result.append(";");
180
181 result.append(" serviceConfiguration: ");
182 result.append(this.getServiceConfiguration().toString());
183 result.append(";");
184
185 result.append(" serviceParameters: ");
186 result.append(Parameters.toProperties(this.getServiceParameters()));
187 result.append(";");
188
189 result.append(" serviceClassLoader: ");
190 result.append(this.getServiceClassLoader());
191 result.append(";");
192
193 result.append(" serviceLogger: ");
194 result.append(this.getLogger());
195 result.append(";");
196
197 result.append(" serviceManager: ");
198 result.append(this.getServiceManager());
199
200 result.append("}");
201
202 return result.toString();
203 }
204
205 /**
206 * @see org.apache.avalon.framework.service.ServiceManager#hasService(java.lang.String)
207 */
208 protected boolean hasService(String key)
209 {
210 return this.getServiceManager().hasService(key);
211 }
212
213 /**
214 * @see org.apache.avalon.framework.service.ServiceManager#lookup(java.lang.String)
215 */
216 protected Object lookup(String key)
217 {
218 try
219 {
220 return this.getServiceManager().lookup(key);
221 }
222 catch (ServiceException e)
223 {
224 String msg = "Unable to lookup the following service : " + key;
225 this.getLogger().error(msg,e);
226 throw new RuntimeException(msg);
227 }
228 }
229
230 /**
231 * @see org.apache.avalon.framework.service.ServiceManager#release(java.lang.Object)
232 */
233 protected void release(Object object)
234 {
235 this.release(object);
236 }
237
238 /**
239 * Determines the absolute file based on the application directory
240 * @param fileName the filename
241 * @return the absolute file
242 */
243 protected File createAbsoluteFile( String fileName )
244 {
245 File result = new File(fileName);
246
247 if( result.isAbsolute() == false )
248 {
249 result = new File( this.getServiceApplicationDir(), fileName );
250 }
251
252 return result;
253 }
254
255 /**
256 * Determines the absolute path based on the application directory
257 * @param fileName the filename
258 * @return the absolute path
259 */
260 protected String createAbsolutePath( String fileName )
261 {
262 return this.createAbsoluteFile(fileName).getAbsolutePath();
263 }
264
265 /**
266 * @return Returns the serviceApplicationDir.
267 */
268 protected File getServiceApplicationDir()
269 {
270 return serviceApplicationDir;
271 }
272
273 /**
274 * @return Returns the serviceClassLoader.
275 */
276 protected ClassLoader getServiceClassLoader()
277 {
278 return serviceClassLoader;
279 }
280
281 /**
282 * @return Returns the serviceConfiguration.
283 */
284 protected Configuration getServiceConfiguration()
285 {
286 return serviceConfiguration;
287 }
288
289 /**
290 * @return Returns the serviceContext.
291 */
292 protected Context getServiceContext()
293 {
294 return serviceContext;
295 }
296
297 /**
298 * @return Returns the serviceManager.
299 */
300 protected ServiceManager getServiceManager()
301 {
302 return serviceManager;
303 }
304
305 /**
306 * @return Returns the serviceName.
307 */
308 protected String getServiceName()
309 {
310 return serviceName;
311 }
312
313 /**
314 * @return Returns the serviceParameters.
315 */
316 protected Parameters getServiceParameters()
317 {
318 return serviceParameters;
319 }
320
321 /**
322 * @return Returns the servicePartitionName.
323 */
324 protected String getServicePartitionName()
325 {
326 return servicePartitionName;
327 }
328
329 /**
330 * @return Returns the serviceTempDir.
331 */
332 protected File getServiceTempDir()
333 {
334 return serviceTempDir;
335 }
336 }