001    package org.apache.turbine.services;
002    
003    
004    /*
005     * Licensed to the Apache Software Foundation (ASF) under one
006     * or more contributor license agreements.  See the NOTICE file
007     * distributed with this work for additional information
008     * regarding copyright ownership.  The ASF licenses this file
009     * to you under the Apache License, Version 2.0 (the
010     * "License"); you may not use this file except in compliance
011     * with the License.  You may obtain a copy of the License at
012     *
013     *   http://www.apache.org/licenses/LICENSE-2.0
014     *
015     * Unless required by applicable law or agreed to in writing,
016     * software distributed under the License is distributed on an
017     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018     * KIND, either express or implied.  See the License for the
019     * specific language governing permissions and limitations
020     * under the License.
021     */
022    
023    
024    import java.util.Properties;
025    
026    import org.apache.commons.configuration.Configuration;
027    import org.apache.commons.configuration.ConfigurationConverter;
028    
029    /**
030     * This class is a generic implementation of <code>Service</code>.
031     *
032     * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
033     * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
034     * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
035     * @version $Id: BaseService.java 615328 2008-01-25 20:25:05Z tv $
036     */
037    public class BaseService
038            extends BaseInitable
039            implements Service
040    {
041        /** A reference to the ServiceBroker that instantiated this object. */
042        protected ServiceBroker serviceBroker;
043    
044        /** The configuration for this service */
045        protected Configuration configuration;
046    
047        /** The name of this Service. */
048        protected String name;
049    
050        /**
051         * Saves a reference to the ServiceBroker that instantiated this
052         * object, so that it can ask for its properties and access other
053         * Services.
054         *
055         * @param broker The ServiceBroker that instantiated this object.
056         */
057        public void setServiceBroker(ServiceBroker broker)
058        {
059            this.serviceBroker = broker;
060        }
061    
062        /**
063         * ServiceBroker uses this method to pass a Service its name.
064         *
065         * @param name The name of this Service.
066         */
067        public void setName(String name)
068        {
069            this.name = name;
070        }
071    
072        /**
073         * Returns the name of this service.
074         *
075         * @return The name of this Service.
076         */
077        public String getName()
078        {
079            return name;
080        }
081    
082        /**
083         * Returns a ServiceBroker reference.
084         *
085         * @return The ServiceBroker that instantiated this object.
086         */
087        public ServiceBroker getServiceBroker()
088        {
089            return serviceBroker;
090        }
091    
092        /**
093         * Returns the properties of this Service.
094         *
095         * @return The Properties of this Service.
096         */
097        public Properties getProperties()
098        {
099            return ConfigurationConverter.getProperties(getConfiguration());
100        }
101    
102        /**
103         * Returns the configuration of this Service.
104         *
105         * @return The Configuration of this Service.
106         */
107        public Configuration getConfiguration()
108        {
109            if (name == null)
110            {
111                return null;
112            }
113    
114            if (configuration == null)
115            {
116                configuration = getServiceBroker().getConfiguration(name);
117            }
118            return configuration;
119        }
120    }