    001    /*****************************************************************************
    002     * Copyright (C) PicoContainer Organization. All rights reserved.            *
    003     * ------------------------------------------------------------------------- *
    004     * The software in this package is published under the terms of the BSD      *
    005     * style license a copy of which has been included with this distribution in *
    006     * the LICENSE.txt file.                                                     *
    007     *****************************************************************************/
    008    package org.picocontainer.lifecycle;
    009
    010    import java.io.Serializable;
    011
    012    import org.picocontainer.ComponentMonitor;
    013    import org.picocontainer.ComponentMonitorStrategy;
    014    import org.picocontainer.LifecycleStrategy;
    015
    016    /**
    017     * Abstract base class for lifecycle strategy implementation supporting a {@link ComponentMonitor}.
    018     *
    019     * @author J&ouml;rg Schaible
    020     */
    021    public abstract class AbstractMonitoringLifecycleStrategy implements LifecycleStrategy, ComponentMonitorStrategy, Serializable {
    022
    023            /**
    024             * Component monitor that receives lifecycle state.
    025             */
    026        private ComponentMonitor componentMonitor;
    027
    028
    029        /**
    030         * Construct a AbstractMonitoringLifecycleStrategy.
    031         *
    032         * @param monitor the componentMonitor to use
    033         * @throws NullPointerException if the monitor is <code>null</code>
    034         */
    035        public AbstractMonitoringLifecycleStrategy(final ComponentMonitor monitor) {
    036            changeMonitor(monitor);
    037        }
    038
    039        /**
    040         * Swaps the current monitor with a replacement.
    041         * @param monitor The new monitor.
    042         * @throws NullPointerException if the passed in monitor is null.
    043         */
    044        public void changeMonitor(final ComponentMonitor monitor) {
    045            if (monitor == null) {
    046                throw new NullPointerException("Monitor is null");
    047            }
    048            this.componentMonitor = monitor;
    049        }
    050
    051        /**
    052         * Retrieves access to the current monitor.
    053         */
    054        public ComponentMonitor currentMonitor() {
    055            return componentMonitor;
    056        }
    057
    058    }