/* * Copyright (C) 2013 Intel Corporation * All rights reserved. */ package com.intel.mtwilson.launcher; import com.intel.dcsg.cpg.extensions.Extensions; import com.intel.dcsg.cpg.performance.ProgressIterator; import com.intel.mtwilson.launcher.ext.Configure; import com.intel.mtwilson.launcher.ext.Initialize; import com.intel.mtwilson.launcher.ext.Stop; import com.intel.mtwilson.launcher.ext.Start; import com.intel.mtwilson.launcher.ext.Validate; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; /** * * @author jbuhacoff */ public class ExtensionLauncher { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ExtensionLauncher.class); private boolean running = false; public void initialize() { addShutdownHook(); List<Initialize> items = Extensions.findAll(Initialize.class); log.debug("Found {} items to initialize", items.size()); ProgressIterator<Initialize> it = new ProgressIterator(items); while(it.hasNext()) { Initialize item = it.next(); log.debug("Initialize: {}", item.getClass().getName()); item.initialize(); } } public void configure() { List<Configure> items = Extensions.findAll(Configure.class); log.debug("Found {} items to configure", items.size()); ProgressIterator<Configure> it = new ProgressIterator(items); while(it.hasNext()) { Configure item = it.next(); log.debug("Configure: {}", item.getClass().getName()); item.configure(); } } public void validate() { List<Validate> items = Extensions.findAll(Validate.class); log.debug("Found {} items to validate", items.size()); ProgressIterator<Validate> it = new ProgressIterator(items); while(it.hasNext()) { Validate item = it.next(); log.debug("Validate: {}", item.getClass().getName()); item.validate(); } } public void start() { running = true; List<Start> items = Extensions.findAll(Start.class); log.debug("Found {} items to start", items.size()); ProgressIterator<Start> it = new ProgressIterator(items); while(it.hasNext()) { Start item = it.next(); log.debug("Start: {}", item.getClass().getName()); item.start(); } } public void stop() { running = false; List<Stop> items = Extensions.findAll(Stop.class); log.debug("Found {} items to stop", items.size()); ProgressIterator<Stop> it = new ProgressIterator(items); while(it.hasNext()) { Stop item = it.next(); log.debug("Stop: {}", item.getClass().getName()); item.stop(); } } private void addShutdownHook() { Runtime.getRuntime().addShutdownHook(new Thread("MtWilson Shutdown Hook") { @Override public void run() { try { log.debug("Caught shutdown event"); if( running) { ExtensionLauncher.this.stop(); } } catch (Exception e) { log.error("Shutdown error", e); } } }); } }