001 package com.croftsoft.core.lang.lifecycle;
002
003 import com.croftsoft.core.lang.NullArgumentException;
004
005 /*********************************************************************
006 * A Lifecycle using interface composition.
007 *
008 * @version
009 * $Id: CompositeLifecycle.java,v 1.1 2006/01/03 19:40:08 croft Exp $
010 * @since
011 * 2006-01-03
012 * @author
013 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
014 *********************************************************************/
015
016 public final class CompositeLifecycle
017 implements Lifecycle
018 //////////////////////////////////////////////////////////////////////
019 //////////////////////////////////////////////////////////////////////
020 {
021
022 private final Initializable [ ] initializables;
023
024 private final Startable [ ] startables;
025
026 private final Stoppable [ ] stoppables;
027
028 private final Destroyable [ ] destroyables;
029
030 //////////////////////////////////////////////////////////////////////
031 //////////////////////////////////////////////////////////////////////
032
033 public CompositeLifecycle (
034 final Initializable [ ] initializables,
035 final Startable [ ] startables,
036 final Stoppable [ ] stoppables,
037 final Destroyable [ ] destroyables )
038 //////////////////////////////////////////////////////////////////////
039 {
040 NullArgumentException.check (
041 this.initializables = initializables );
042
043 NullArgumentException.check ( this.startables = startables );
044
045 NullArgumentException.check ( this.stoppables = stoppables );
046
047 NullArgumentException.check ( this.destroyables = destroyables );
048 }
049
050 //////////////////////////////////////////////////////////////////////
051 //////////////////////////////////////////////////////////////////////
052
053 public void init ( ) { LifecycleLib.init ( initializables ); }
054
055 public void start ( ) { LifecycleLib.start ( startables ); }
056
057 public void stop ( ) { LifecycleLib.stop ( stoppables ); }
058
059 public void destroy ( ) { LifecycleLib.destroy ( destroyables ); }
060
061 //////////////////////////////////////////////////////////////////////
062 //////////////////////////////////////////////////////////////////////
063 }