diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2006-03-31 11:17:21 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2006-03-31 11:17:21 +0000 |
commit | 41377c2658a442c78cc8a726f288b3780862bc4a (patch) | |
tree | c08b4fc48f61f148471e8dc7b7af51a2b1a123a2 /extensions/qa | |
parent | a343638897879ee19ce8615fa59c09e224abc2ac (diff) |
INTEGRATION: CWS dba203b (1.1.2); FILE ADDED
2006/03/23 11:51:50 fs 1.1.2.1: helper for waiting for a console input
Diffstat (limited to 'extensions/qa')
-rw-r--r-- | extensions/qa/integration/extensions/ConsoleWait.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/extensions/qa/integration/extensions/ConsoleWait.java b/extensions/qa/integration/extensions/ConsoleWait.java new file mode 100644 index 000000000000..c97ced23cc8c --- /dev/null +++ b/extensions/qa/integration/extensions/ConsoleWait.java @@ -0,0 +1,136 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: ConsoleWait.java,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2006-03-31 12:17:21 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +package integration.extensions; + +import com.sun.star.uno.*; +import com.sun.star.lang.XComponent; + +public class ConsoleWait implements com.sun.star.lang.XEventListener +{ + private Object m_disposable; + + /** a helper class which waits for a console ENTER key event in a dedicated thread, + and notifies a ConsoleWait object if this event happened + */ + private class WaitForEnter extends java.lang.Thread + { + private ConsoleWait m_toNotify; + private boolean m_done; + + public WaitForEnter( ConsoleWait _toNotify ) + { + m_toNotify = _toNotify; + m_done = false; + } + + public boolean isDone() + { + return m_done; + } + + public void run() + { + try + { + System.out.println( "\npress enter to exit" ); + System.in.read(); + + m_done = true; + // notify that the user pressed the key + synchronized ( m_toNotify ) + { + m_toNotify.notify(); + } + } + catch( java.lang.Exception e ) + { + // not really interested in + System.err.println( e ); + } + } + }; + + /** creates a ConsoleWait instance + * @param _disposable + * a component whose disposal should be monitored. When this component dies, + * the ConsoleWait also returns from an waitForConsole call, even if the user + * did not yet press the enter key + */ + public ConsoleWait( Object _disposable ) + { + m_disposable = _disposable; + XComponent component = (XComponent)UnoRuntime.queryInterface( XComponent.class, _disposable ); + if ( component != null ) + component.addEventListener( this ); + } + + /** waits for the user to press the ENTER key (on the console where she started the java program) + or the disposable component to be closed by the user. + @return + TRUE if the user pressed a key on the console, FALSE if she closed the document + */ + public boolean waitForUserInput() throws java.lang.Exception + { + synchronized (this) + { + WaitForEnter keyWaiter = new WaitForEnter( this ); + keyWaiter.start(); + wait(); + + // if the waiter thread is done, the user pressed enter + boolean bKeyPressed = keyWaiter.isDone(); + if ( !bKeyPressed ) + keyWaiter.interrupt(); + + return bKeyPressed; + } + } + + /* ------------------------------------------------------------------ */ + /* XEventListener overridables */ + /* ------------------------------------------------------------------ */ + public void disposing( com.sun.star.lang.EventObject eventObject ) + { + if ( eventObject.Source.equals( m_disposable ) ) + { + // notify ourself that we can stop waiting for user input + synchronized (this) + { + notify(); + } + } + } +}
\ No newline at end of file |