package org.tanukisoftware.wrapper.event; /* * Copyright (c) 1999, 2009 Tanuki Software, Ltd. * http://www.tanukisoftware.com * All rights reserved. * * This software is the proprietary information of Tanuki Software. * You shall use it only in accordance with the terms of the * license agreement you entered into with Tanuki Software. * http://wrapper.tanukisoftware.org/doc/english/licenseOverview.html */ /** * WrapperControlEvent are used to notify the listener whenever the native * wrapper code traps a system control signal against the Java process. * It is up to the listener to take any actions necessary. * <p> * The Wrapper will send this event to any registered listeners first, * then it will pass the control code to the WrapperListener.controlEvent * method. If the consume method is called, it will still be passed to * other WrapperEventListeners, but will not be passed to the * WrapperListener.controlEvent method. Other WrapperEventListeners should * check the isConsumed method to decide whether or not the even has already * been handled. * <p> * If the wrapper.ignore_signals property is set to true then the event will * still be fired, but its isConsumed() method will return true initially. * <p> * Possible values are: * <dl> * <dt>WrapperManager.WRAPPER_CTRL_C_EVENT</dt> * <dd>The user pressed CTRL-C in a command windown (Windows or UNIX). * Or the kill INT signal was received (UNIX).</dd> * <dt>WRAPPER_CTRL_CLOSE_EVENT</dt> * <dd>The user is trying to close the console in which the Wrapper is * running (Windows).</dd> * <dt>WRAPPER_CTRL_LOGOFF_EVENT</dt> * <dd>The user logged off (Windows).</dd> * <dt>WRAPPER_CTRL_SHUTDOWN_EVENT</dt> * <dd>The system is being shutdown (Windows).</dd> * <dt>WRAPPER_CTRL_TERM_EVENT</td> * <dd>The kill TERM signal was received (UNIX).</dd> * <dt>WRAPPER_CTRL_HUP_EVENT</td> * <dd>The kill HUP signal was received (UNIX).</dd> * </dl> * * @author Leif Mortenson <leif@tanukisoftware.com> */ public class WrapperControlEvent extends WrapperEvent { /** * Serial Version UID. */ private static final long serialVersionUID = -7033261694452001713L; /** The system control event. */ private int m_controlEvent; /** The name of the event. */ private String m_controlEventName; /** True if the event has been consumed. */ private boolean m_consumed; /*--------------------------------------------------------------- * Constructors *-------------------------------------------------------------*/ /** * Creates a new WrapperControlEvent. * * @param controlEvent Service control event. * @param controlEventName The name of the event. */ public WrapperControlEvent( int controlEvent, String controlEventName ) { m_controlEvent = controlEvent; m_controlEventName = controlEventName; } /*--------------------------------------------------------------- * WrapperEvent Methods *-------------------------------------------------------------*/ /** * Returns a set of event flags for which the event should be fired. * This value is compared with the mask supplied when when a * WrapperEventListener is registered to decide which listeners should * receive the event. * <p> * If a subclassed, the return value of the super class should usually * be ORed with any additional flags. * * @return a set of event flags. */ public long getFlags() { return super.getFlags() | WrapperEventListener.EVENT_FLAG_CONTROL; } /*--------------------------------------------------------------- * Methods *-------------------------------------------------------------*/ /** * Returns the system control event. * <p> * Possible values are: WrapperManager.WRAPPER_CTRL_C_EVENT, * WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT, * WRAPPER_CTRL_SHUTDOWN_EVENT, WRAPPER_CTRL_TERM_EVENT, or * WRAPPER_CTRL_HUP_EVENT. * * @return The system control event. */ public int getControlEvent() { return m_controlEvent; } /** * Returns the name of the control event. * * @return The name of the control event. */ public String getControlEventName() { return m_controlEventName; } /** * Mark the event as consumed. This should be done if the event * has been handled. * <p> * On Windows, some events are sent both to the JVM and Wrapper processes. * Event if the CTRL-C event is ignored within the JVM, the Wrapper * process may still initiate a shutdown. */ public void consume() { m_consumed = true; } /** * Returns true if the event has been consumed. * * @return True if the event has been consumed. */ public boolean isConsumed() { return m_consumed; } /** * Returns a string representation of the event. * * @return A string representation of the event. */ public String toString() { return "WrapperControlEvent[controlEvent=" + getControlEvent() + ", controlEventName=" + getControlEventName() + ", consumed=" + isConsumed() + "]"; } }