Kaydet (Commit) bd0a40c3 authored tarafından Vladimir Glazounov's avatar Vladimir Glazounov

INTEGRATION: CWS jl18 (1.1.2); FILE ADDED

2005/03/18 09:56:43 jl 1.1.2.1: #45371# This CallWatchThread replaces the implementations in LocalOfficeWindow and OOoBean
üst 79efd83f
/*************************************************************************
*
* $RCSfile: CallWatchThread.java,v $
*
* $Revision: 1.2 $
*
* last change: $Author: vg $ $Date: 2005-03-23 08:58:39 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., September, 2004
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2004 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (the "License"); You may not use this file
* except in compliance with the License. You may obtain a copy of the
* License at http://www.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2004 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
package com.sun.star.comp.beans;
//---------------------------------------------------------------------------
/** Helper class to watch calls into OOo with a timeout.
*/
public class CallWatchThread extends Thread
{
private static boolean DEBUG = false;
private Thread aWatchedThread;
private String aTag;
private boolean bAlive;
private long nTimeout;
private static ThreadGroup aWatcherGroup;
static
{
aWatcherGroup = new ThreadGroup("OOoBean Call Watcher Threads");
aWatcherGroup.setDaemon(false);
}
public CallWatchThread(long nTimeout)
{
this(nTimeout, "");
}
public CallWatchThread( long nTimeout, String aTag )
{
super(aWatcherGroup, aTag);
this.aWatchedThread = Thread.currentThread();
this.nTimeout = nTimeout;
this.aTag = aTag;
setDaemon( true );
dbgPrint( "CallWatchThread(" + this + ").start(" + aTag + ")" );
start();
}
public void cancel()
throws java.lang.InterruptedException
{
dbgPrint( "CallWatchThread(" + this + ".cancel(" + aTag + ")" );
if ( aWatchedThread != null && aWatchedThread != Thread.currentThread() )
throw new RuntimeException( "wrong thread" );
aWatchedThread = null;
if ( interrupted() )
throw new InterruptedException();
}
public synchronized void restart()
throws java.lang.InterruptedException
{
dbgPrint( "CallWatchThread(" + this + ".restart(" + aTag + ")" );
if ( aWatchedThread != null && aWatchedThread != Thread.currentThread() )
throw new RuntimeException( "wrong thread" );
bAlive = true;
if ( interrupted() )
throw new InterruptedException();
notify();
}
public void run()
{
dbgPrint( "CallWatchThread(" + this + ".run(" + aTag + ") ***** STARTED *****" );
long n = 0;
while ( aWatchedThread != null )
{
dbgPrint( "CallWatchThread(" + this + ").run(" + aTag + ") running #" + ++n );
synchronized(this)
{
bAlive = false;
try
{
wait( nTimeout );
}
catch ( java.lang.InterruptedException aExc )
{
bAlive = false;
}
// watched thread seems to be dead (not answering)?
if ( !bAlive && aWatchedThread != null )
{
dbgPrint( "CallWatchThread(" + this + ").run(" + aTag + ") interrupting" );
aWatchedThread.interrupt();
aWatchedThread = null;
}
}
}
dbgPrint( "CallWatchThread(" + this + ").run(" + aTag + ") terminated" );
}
private void dbgPrint( String aMessage )
{
if (DEBUG)
System.err.println( "OOoBean: " + aMessage );
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment