/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.toolkit.modules.introspection.setup;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import de.rcenvironment.toolkit.core.api.ImmutableServiceRegistry;
import de.rcenvironment.toolkit.core.spi.module.AbstractZeroConfigurationToolkitModule;
import de.rcenvironment.toolkit.core.spi.module.ObjectGraph;
import de.rcenvironment.toolkit.core.spi.module.ShutdownHookReceiver;
import de.rcenvironment.toolkit.core.spi.module.ToolkitModule;
import de.rcenvironment.toolkit.modules.introspection.api.StatusCollectionRegistry;
import de.rcenvironment.toolkit.modules.introspection.api.StatusCollectionService;
import de.rcenvironment.toolkit.modules.introspection.internal.StatusCollectionServiceImpl;
import de.rcenvironment.toolkit.utils.text.MultiLineOutput;
/**
* A module providing the {@link StatusCollectionService}.
*
* @author Robert Mischke
*/
public class IntrospectionModule extends AbstractZeroConfigurationToolkitModule {
@Override
public void registerMembers(ObjectGraph objectGraph) {
objectGraph.registerServiceClass(StatusCollectionServiceImpl.class);
}
@Override
public void suggestMissingModuleDependencies(ObjectGraph objectGraph, Set<Class<? extends ToolkitModule<?>>> modulesToLoad) {
if (objectGraph.isMissingService(StatusCollectionRegistry.class)) {
modulesToLoad.add(IntrospectionModule.class);
}
}
@Override
public void registerShutdownHooks(ImmutableServiceRegistry serviceRegistry, ShutdownHookReceiver shutdownHookReceiver) {
final StatusCollectionService statusCollectionService = serviceRegistry.getService(StatusCollectionService.class);
shutdownHookReceiver.addShutdownHook(new Runnable() {
@Override
public void run() {
final Log log = LogFactory.getLog(getClass());
final String statusLineOutputIndent = " ";
final String statusLineOutputSeparator = "\n";
log.debug(
statusCollectionService.getCollectedDefaultStateInformation()
.asMultilineString("Final state information:", statusLineOutputIndent, statusLineOutputSeparator, null));
final MultiLineOutput unfinishedOperationsReport = statusCollectionService.getCollectedUnfinishedOperationsInformation();
if (unfinishedOperationsReport.hasContent()) {
log.debug(unfinishedOperationsReport.asMultilineString(
"Known unfinished operations on shutdown:", statusLineOutputIndent, statusLineOutputSeparator, null));
} else {
log.debug("Known unfinished operations on shutdown: <none>");
}
}
});
}
}