/*
---------------------------------------------------------------------------
Open Asset Import Library (ASSIMP)
---------------------------------------------------------------------------

Copyright (c) 2006-2008, ASSIMP Development Team

All rights reserved.
See the disclaimer in JNIEnvironment.h for licensing and distribution 
conditions.
---------------------------------------------------------------------------
*/

/** @file Implementation of the JNI API for jAssimp */

#include "JNIEnvironment.h"
#include "JNILogger.h"

using namespace Assimp;

namespace Assimp	{
namespace JNIBridge		{

// ------------------------------------------------------------------------------------------------
void JNIEnvironment::_assimp::_NativeException::Initialize()
{
	// get a handle to the JNI context for this thread
	JNIEnv* pc = JNIEnvironment::Get()->GetThread()->m_pcEnv;

	// load a handle to the class
	if(!(this->Class = pc->FindClass("assimp.NativeException")))
	{
		// if this fails we have no exception class we could use ...
		// throw an java.lang.Error instance
		this->Class = pc->FindClass("java.lang.Exception");
		pc->ThrowNew(this->Class,"Unable to load class assimp.NativeException (severe failure!)");
		this->Class = NULL;
	}
}


// ------------------------------------------------------------------------------------------------
void JNIEnvironment::ThrowNativeError(const char* msg /*= NULL*/)
{
	// get a handle to the JNI context for this thread
	JNIEnv* pc = this->GetThread()->m_pcEnv;

	// throw a new NativeException
	pc->ThrowNew(this->assimp.NativeException.Class,
		msg ? msg 
		: "An unspecified error occured in the native interface to Assimp.");
}
}}