001package 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/**
025 * This class provides a generic implementation of
026 * <code>Initable</code>.  This implementation, that other
027 * <code>Initables</code> are welcome to extend, contains facilities
028 * to maintain internal state.
029 *
030 * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
031 * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
032 * @version $Id$
033 */
034public class BaseInitable
035        implements Initable
036{
037    /** InitableBroker that instantiatd this class. */
038    protected InitableBroker initableBroker;
039
040    /** Initialization status of this class. */
041    protected boolean isInitialized = false;
042
043    /**
044     * Default constructor of BaseInitable.
045     *
046     * This constructor does nothing.  Your own constructurs should be
047     * modest in allocating memory and other resources, leaving this
048     * to the <code>init()</code> method.
049     */
050    public BaseInitable()
051    {
052        // empty
053    }
054
055    /**
056     * Saves InitableBroker reference for later use.
057     *
058     * @param broker The InitableBroker that instantiated this object.
059     */
060    @Override
061    public void setInitableBroker(InitableBroker broker)
062    {
063        this.initableBroker = broker;
064    }
065
066    /**
067     * Returns an InitableBroker reference.
068     *
069     * @return The InitableBroker that instantiated this object.
070     */
071    public InitableBroker getInitableBroker()
072    {
073        return initableBroker;
074    }
075
076    /**
077     * Performs early initialization.  Used in a manner similar to a ctor.
078     *
079     * BaseInitable doesn't need early initialization, therefore it
080     * ignores all objects passed to it and performs no initialization
081     * activities.
082     *
083     * @param data An Object to use for initialization activities.
084     * @throws InitializationException Initialization of this
085     * class was not successful.
086     */
087    @Override
088    public void init(Object data) throws InitializationException
089    {
090        // empty
091    }
092
093    /**
094     * Performs late initialization.  Called when the Service is requested
095     * for the first time (if not already completely initialized by the
096     * early initializer).
097     *
098     * Late initialization of a BaseInitable is always successful.
099     *
100     * @throws InitializationException Initialization of this
101     * class was not successful.
102     */
103    @Override
104    public void init() throws InitializationException
105    {
106        // empty
107    }
108
109    /**
110     * Returns an Initable to uninitialized state.
111     *
112     * Calls setInit(false) to mark that we are no longer in initialized
113     * state.
114     */
115    @Override
116    public void shutdown()
117    {
118        setInit(false);
119    }
120
121    /**
122     * Returns initialization status.
123     *
124     * @return True if the initable is initialized.
125     */
126    @Override
127    public boolean getInit()
128    {
129        return isInitialized;
130    }
131
132    /**
133     * Sets initialization status.
134     *
135     * @param value The new initialization status.
136     */
137    protected void setInit(boolean value)
138    {
139        this.isInitialized = value;
140    }
141}