package org.springframework.roo.process.manager.internal;
import java.util.logging.Level;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.springframework.roo.process.manager.ProcessManager;
import org.springframework.roo.process.manager.event.ProcessManagerStatus;
import org.springframework.roo.process.manager.event.ProcessManagerStatusListener;
import org.springframework.roo.process.manager.event.ProcessManagerStatusProvider;
import org.springframework.roo.shell.CliCommand;
import org.springframework.roo.shell.CliOption;
import org.springframework.roo.shell.CommandMarker;
import org.springframework.roo.shell.osgi.AbstractFlashingObject;
/**
* Allows monitoring of {@link ProcessManager} for development mode users.
*
* @author Ben Alex
* @author Stefan Schmidt
* @since 1.1
*/
@Service
@Component(immediate = true)
public class ProcessManagerDiagnosticsListener extends AbstractFlashingObject
implements ProcessManagerStatusListener, CommandMarker {
private boolean isDebug = false;
@Reference private ProcessManagerStatusProvider processManagerStatusProvider;
protected void activate(final ComponentContext context) {
processManagerStatusProvider.addProcessManagerStatusListener(this);
isDebug = System.getProperty("roo-args") != null && isDevelopmentMode();
}
protected void deactivate(final ComponentContext context) {
processManagerStatusProvider.removeProcessManagerStatusListener(this);
}
public void onProcessManagerStatusChange(
final ProcessManagerStatus oldStatus,
final ProcessManagerStatus newStatus) {
if (isDebug) {
flash(Level.FINE, newStatus.name(), MY_SLOT);
}
}
@CliCommand(value = "process manager debug", help = "Indicates if process manager debugging is desired")
public void processManagerDebug(
@CliOption(key = { "", "enabled" }, mandatory = false, specifiedDefaultValue = "true", unspecifiedDefaultValue = "true", help = "Activates debug mode") final boolean debug) {
isDebug = debug;
}
}