001: package org.tanukisoftware.wrapper.event;
002:
003: /*
004: * Copyright (c) 1999, 2006 Tanuki Software Inc.
005: *
006: * Permission is hereby granted, free of charge, to any person
007: * obtaining a copy of the Java Service Wrapper and associated
008: * documentation files (the "Software"), to deal in the Software
009: * without restriction, including without limitation the rights
010: * to use, copy, modify, merge, publish, distribute, sub-license,
011: * and/or sell copies of the Software, and to permit persons to
012: * whom the Software is furnished to do so, subject to the
013: * following conditions:
014: *
015: * The above copyright notice and this permission notice shall be
016: * included in all copies or substantial portions of the Software.
017: *
018: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
019: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
020: * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
021: * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
022: * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
023: * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
024: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
025: * OTHER DEALINGS IN THE SOFTWARE.
026: */
027:
028: /**
029: * WrapperControlEvent are used to notify the listener whenever the native
030: * wrapper code traps a system control signal against the Java process.
031: * It is up to the listener to take any actions necessary.
032: * <p>
033: * The Wrapper will send this event to any registered listeners first,
034: * then it will pass the control code to the WrapperListener.controlEvent
035: * method. If the consume method is called, it will still be passed to
036: * other WrapperEventListeners, but will not be passed to the
037: * WrapperListener.controlEvent method. Other WrapperEventListeners should
038: * check the isConsumed method to decide whether or not the even has already
039: * been handled.
040: * <p>
041: * If the wrapper.ignore_signals property is set to true then the event will
042: * still be fired, but its isConsumed() method will return true initially.
043: * <p>
044: * Possible values are:
045: * <dl>
046: * <dt>WrapperManager.WRAPPER_CTRL_C_EVENT</dt>
047: * <dd>The user pressed CTRL-C in a command windown (Windows or UNIX).
048: * Or the kill INT signal was received (UNIX).</dd>
049: * <dt>WRAPPER_CTRL_CLOSE_EVENT</dt>
050: * <dd>The user is trying to close the console in which the Wrapper is
051: * running (Windows).</dd>
052: * <dt>WRAPPER_CTRL_LOGOFF_EVENT</dt>
053: * <dd>The user logged off (Windows).</dd>
054: * <dt>WRAPPER_CTRL_SHUTDOWN_EVENT</dt>
055: * <dd>The system is being shutdown (Windows).</dd>
056: * <dt>WRAPPER_CTRL_TERM_EVENT</td>
057: * <dd>The kill TERM signal was received (UNIX).</dd>
058: * <dt>WRAPPER_CTRL_HUP_EVENT</td>
059: * <dd>The kill HUP signal was received (UNIX).</dd>
060: * </dl>
061: *
062: * @author Leif Mortenson <leif@tanukisoftware.com>
063: */
064: public class WrapperControlEvent extends WrapperEvent {
065: /** The system control event. */
066: private int m_controlEvent;
067:
068: /** The name of the event. */
069: private String m_controlEventName;
070:
071: /** True if the event has been consumed. */
072: private boolean m_consumed;
073:
074: /*---------------------------------------------------------------
075: * Constructors
076: *-------------------------------------------------------------*/
077: /**
078: * Creates a new WrapperControlEvent.
079: *
080: * @param controlEvent Service control event.
081: * @param controlEventName The name of the event.
082: */
083: public WrapperControlEvent(int controlEvent, String controlEventName) {
084: m_controlEvent = controlEvent;
085: m_controlEventName = controlEventName;
086: }
087:
088: /*---------------------------------------------------------------
089: * WrapperEvent Methods
090: *-------------------------------------------------------------*/
091: /**
092: * Returns a set of event flags for which the event should be fired.
093: * This value is compared with the mask supplied when when a
094: * WrapperEventListener is registered to decide which listeners should
095: * receive the event.
096: * <p>
097: * If a subclassed, the return value of the super class should usually
098: * be ORed with any additional flags.
099: *
100: * @return a set of event flags.
101: */
102: public long getFlags() {
103: return super .getFlags()
104: | WrapperEventListener.EVENT_FLAG_CONTROL;
105: }
106:
107: /*---------------------------------------------------------------
108: * Methods
109: *-------------------------------------------------------------*/
110: /**
111: * Returns the system control event.
112: * <p>
113: * Possible values are: WrapperManager.WRAPPER_CTRL_C_EVENT,
114: * WRAPPER_CTRL_CLOSE_EVENT, WRAPPER_CTRL_LOGOFF_EVENT,
115: * WRAPPER_CTRL_SHUTDOWN_EVENT, WRAPPER_CTRL_TERM_EVENT, or
116: * WRAPPER_CTRL_HUP_EVENT.
117: *
118: * @return The system control event.
119: */
120: public int getControlEvent() {
121: return m_controlEvent;
122: }
123:
124: /**
125: * Returns the name of the control event.
126: *
127: * @return The name of the control event.
128: */
129: public String getControlEventName() {
130: return m_controlEventName;
131: }
132:
133: /**
134: * Mark the event as consumed. This should be done if the event
135: * has been handled.
136: * <p>
137: * On Windows, some events are sent both to the JVM and Wrapper processes.
138: * Event if the CTRL-C event is ignored within the JVM, the Wrapper
139: * process may still initiate a shutdown.
140: */
141: public void consume() {
142: m_consumed = true;
143: }
144:
145: /**
146: * Returns true if the event has been consumed.
147: *
148: * @return True if the event has been consumed.
149: */
150: public boolean isConsumed() {
151: return m_consumed;
152: }
153:
154: /**
155: * Returns a string representation of the event.
156: *
157: * @return A string representation of the event.
158: */
159: public String toString() {
160: return "WrapperControlEvent[controlEvent=" + getControlEvent()
161: + ", controlEventName=" + getControlEventName()
162: + ", consumed=" + isConsumed() + "]";
163: }
164: }
|