001/* 002 * #%L 003 * Netarchivesuite - common 004 * %% 005 * Copyright (C) 2005 - 2014 The Royal Danish Library, the Danish State and University Library, 006 * the National Library of France and the Austrian National Library. 007 * %% 008 * This program is free software: you can redistribute it and/or modify 009 * it under the terms of the GNU Lesser General Public License as 010 * published by the Free Software Foundation, either version 2.1 of the 011 * License, or (at your option) any later version. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Lesser Public License for more details. 017 * 018 * You should have received a copy of the GNU General Lesser Public 019 * License along with this program. If not, see 020 * <http://www.gnu.org/licenses/lgpl-2.1.html>. 021 * #L% 022 */ 023package dk.netarkivet.common.lifecycle; 024 025import java.util.ArrayList; 026import java.util.List; 027 028import org.slf4j.Logger; 029import org.slf4j.LoggerFactory; 030 031import dk.netarkivet.common.exceptions.ArgumentNotValid; 032 033/** 034 * Takes care of the lifecycling of subcomponents(children). 035 * <p> 036 * When extending this class you must: 037 * <ol> 038 * <li>Add all lifecycle subcomponents with the addChild, before the start method is called. 039 * <li>Call the <code>super.start()</code> operation to start the children. 040 * <li>Call the <code>super.shutdown</code> operation to 041 */ 042public class LifeCycleComponent implements ComponentLifeCycle { 043 044 /** The instance logger. */ 045 private static final Logger log = LoggerFactory.getLogger(LifeCycleComponent.class); 046 047 /** The child-components of this lifecycle. */ 048 private List<ComponentLifeCycle> children = new ArrayList<ComponentLifeCycle>(); 049 050 @Override 051 public void start() { 052 log.debug("Starting {}", toString()); 053 for (ComponentLifeCycle child : children) { 054 child.start(); 055 } 056 } 057 058 @Override 059 public void shutdown() { 060 log.debug("Shutting down {}", toString()); 061 for (ComponentLifeCycle child : children) { 062 child.shutdown(); 063 } 064 } 065 066 /** 067 * Adds a child <code>ComponentLifeCycle</code>. The childs lifecycle will be managed by by the 068 * <code>LifeCycleComponent</code>. 069 * 070 * @param childComponent The child to add 071 */ 072 public void addChild(ComponentLifeCycle childComponent) { 073 ArgumentNotValid.checkNotNull(childComponent, "Child can not be null"); 074 children.add(childComponent); 075 } 076 077}