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    
028    /**
029     * <code>Services</code> are <code>Initables</code> that have a name,
030     * and a set of properties.
031     *
032     * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
033     * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
034     * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
035     * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
036     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
037     * @version $Id: Service.java 615328 2008-01-25 20:25:05Z tv $
038     */
039    public interface Service
040            extends Initable
041    {
042        /** The name of this service. */
043        String SERVICE_NAME = "Service";
044    
045        /**
046         * Provides a Service with a reference to the ServiceBroker that
047         * instantiated this object, so that it can ask for its properties
048         * and access other Services.
049         *
050         * @param broker The ServiceBroker that instantiated this object.
051         */
052        void setServiceBroker(ServiceBroker broker);
053    
054        /**
055         * ServiceBroker uses this method to pass a Service its name.
056         * Service uses its name to ask the broker for an apropriate set
057         * of Properties.
058         *
059         * @param name The name of this Service.
060         */
061        void setName(String name);
062    
063        /**
064         * Returns the name of this Service.
065         *
066         * @return The name of this Service.
067         */
068        String getName();
069    
070        /**
071         * Returns the Properties of this Service.  Every Service has at
072         * least one property, which is "classname", containing the name
073         * of the class implementing this service.  Note that the service
074         * may chose to alter its properties, therefore they may be
075         * different from those returned by ServiceBroker.
076         *
077         * @return The properties of this Service.
078         */
079        Properties getProperties();
080    
081        /**
082         * Returns the Configuration of this Service.  Every Service has at
083         * least one property, which is "classname", containing the name
084         * of the class implementing this service.  Note that the service
085         * may chose to alter its configuration, therefore they may be
086         * different from those returned by ServiceBroker.
087         *
088         * @return The Configuration of this Service.
089         */
090        Configuration getConfiguration();
091    }