/*************************************************************************
 *
 *  $RCSfile: XJavaVM.idl,v $
 *
 *  $Revision: 1.13 $
 *
 *  last change: $Author: rt $ $Date: 2003/04/23 17:02:52 $
 *
 *  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., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 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: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/
#ifndef __com_sun_star_java_XJavaVM_idl__ 
#define __com_sun_star_java_XJavaVM_idl__ 
 
#ifndef __com_sun_star_uno_XInterface_idl__ 
#include <com/sun/star/uno/XInterface.idl> 
#endif 
 
#ifndef __com_sun_star_uno_Uik_idl__ 
#include <com/sun/star/uno/Uik.idl> 
#endif 
 
//============================================================================= 
 
module com {  module sun {  module star {  module java {  
 
//============================================================================= 
 
// DocMerge from xml: interface com::sun::star::java::XJavaVM
/** must be implemented by the user of the XJavaVM.

	@incomplete
 */
interface XJavaVM: com::sun::star::uno::XInterface
{ 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::java::XJavaVM::getJavaVM
	/** returns the address of the Java Virtual Machine. 

		<p>If the VM is not already instantiated, it will be now.</p>

        <p>If the <code>processID</code> is a normal 16-byte ID, the returned
        <atom>any</atom> contains a JNI <code>JavaVM</code> pointer as a
        <atom>long</atom> or <atom>hyper</atom> integer (depending on the
        platform).  If the <code>processID</code> does not match the current
        process, an empty <atom>any</atom> is returned.</p>

        <p>If the <code>processID</code> has an additional 17th byte of value
        zero, the returned <atom>any</atom> contains a non-reference-counted
        pointer to a (reference-counted) instance of the C++
        <code>jvmaccess::VirtualMachine</code> class, always represented as a
        <atom>hyper</atom> integer.  The pointer is guaranteed to be valid as
        long as the reference to this
        <type scope="com::sun::star::java">XJavaVM</type> is valid (but the
        pointer should be converted into a reference-counted reference as soon
        as possible).  Again, if the first 16 bytes of the
        <code>processID</code> do not match the current process, an empty
        <atom>any</atom> is returned.</p>

        <p>The first form (returning a JNI <code>JavaVM</code> pointer) is
        mainly for backwards compatibility, new code should use the second form
        (returning a pointer to a <code>jvmaccess::VirtualMachine</code>).  For
        example, one advantage of using <code>jvmaccess::VirtualMachine</code>
        instead of the raw <code>JavaVM</code> pointer is that whenever you
        attach a native thread to the Java virtual machine, that thread's
        context <code>ClassLoader</code> (see
        <code>java.lang.Thread.getContextClassLoader</code>) will automatically
        be set to a meaningful value.</p>

        If the instantiation of the Java Virtual Machine was successfull then
        the returned any contains a long value on a 32 bit platform and a hyper
        value on a 64 bit platform. The values can be cast to a JavaVM pointer.
        If the JVM could not be created for whatever reason then a void any
        will be returned.
        
        @param processID
               The process ID of the caller's process.
        @return
               On success, a JavaVM pointer as long or hyper, otherwise the any
               is void.

	 */
	any getJavaVM( [in] sequence<byte> processID ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::java::XJavaVM::isVMStarted
	/** returns <true/> if the VM is started successfully, otherwise <false/>.
	 */
	boolean isVMStarted(); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::java::XJavaVM::isVMEnabled
	/** Returns <true/> if the VM is enabled. 

		<p>It is only possible to get the VM, if this method return 0. </p>
	 */
	boolean isVMEnabled(); 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
