Changes to the Java directory structure.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@249 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
353
xflaim/java/jni/jbackup.cpp
Normal file
353
xflaim/java/jni/jbackup.cpp
Normal file
@@ -0,0 +1,353 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// Desc:
|
||||
//
|
||||
// Tabs: 3
|
||||
//
|
||||
// Copyright (c) 2003-2006 Novell, Inc. All Rights Reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of version 2 of the GNU General Public
|
||||
// License as published by the Free Software Foundation.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, contact Novell, Inc.
|
||||
//
|
||||
// To contact Novell about this file by physical or electronic mail,
|
||||
// you may find current contact information at www.novell.com
|
||||
//
|
||||
// $Id: $
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "jniftk.h"
|
||||
#include "xflaim_Backup.h"
|
||||
|
||||
#define THIS_BACKUP() \
|
||||
((IF_Backup *)(FLMUINT)lThis)
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
class JNIBackupClient : public IF_BackupClient
|
||||
{
|
||||
public:
|
||||
|
||||
JNIBackupClient(
|
||||
jobject jClient,
|
||||
JavaVM * pJvm)
|
||||
{
|
||||
flmAssert( jClient);
|
||||
flmAssert( pJvm);
|
||||
m_jClient = jClient;
|
||||
m_pJvm = pJvm;
|
||||
}
|
||||
|
||||
RCODE XFLMAPI JNIBackupClient::WriteData(
|
||||
const void * pvBuffer,
|
||||
FLMUINT uiBytesToWrite);
|
||||
|
||||
FINLINE FLMUINT getRefCount( void)
|
||||
{
|
||||
return( IF_BackupClient::getRefCount());
|
||||
}
|
||||
|
||||
virtual FINLINE FLMUINT32 XFLMAPI AddRef( void)
|
||||
{
|
||||
return( IF_BackupClient::AddRef());
|
||||
}
|
||||
|
||||
virtual FINLINE FLMUINT32 XFLMAPI Release( void)
|
||||
{
|
||||
return( IF_BackupClient::Release());
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
jobject m_jClient;
|
||||
JavaVM * m_pJvm;
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
class JNIBackupStatus : public IF_BackupStatus
|
||||
{
|
||||
public:
|
||||
|
||||
JNIBackupStatus(
|
||||
jobject jStatus,
|
||||
JavaVM * pJvm)
|
||||
{
|
||||
flmAssert(jStatus);
|
||||
flmAssert(pJvm);
|
||||
m_jStatus = jStatus;
|
||||
m_pJvm = pJvm;
|
||||
}
|
||||
|
||||
RCODE XFLMAPI backupStatus(
|
||||
FLMUINT64 ui64BytesToDo,
|
||||
FLMUINT64 ui64BytesDone);
|
||||
|
||||
FINLINE FLMUINT getRefCount( void)
|
||||
{
|
||||
return( IF_BackupStatus::getRefCount());
|
||||
}
|
||||
|
||||
virtual FINLINE FLMUINT32 XFLMAPI AddRef( void)
|
||||
{
|
||||
return( IF_BackupStatus::AddRef());
|
||||
}
|
||||
|
||||
virtual FINLINE FLMUINT32 XFLMAPI Release( void)
|
||||
{
|
||||
return( IF_BackupStatus::Release());
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
jobject m_jStatus;
|
||||
JavaVM * m_pJvm;
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE JNIBackupClient::WriteData(
|
||||
const void * pvBuffer,
|
||||
FLMUINT uiBytesToWrite)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
JNIEnv * pEnv;
|
||||
jclass Cls;
|
||||
jmethodID MId;
|
||||
jbyteArray jBuff;
|
||||
void * pvBuff;
|
||||
FLMBOOL bMustDetach = FALSE;
|
||||
|
||||
if (m_pJvm->GetEnv( (void **)&pEnv, JNI_VERSION_1_2) != JNI_OK)
|
||||
{
|
||||
if (m_pJvm->AttachCurrentThread( (void **)&pEnv, NULL) != 0)
|
||||
{
|
||||
rc = RC_SET( NE_XFLM_FAILURE);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
bMustDetach = TRUE;
|
||||
}
|
||||
|
||||
Cls = pEnv->GetObjectClass( m_jClient);
|
||||
MId = pEnv->GetMethodID( Cls, "WriteData", "([B)I");
|
||||
|
||||
flmAssert( MId);
|
||||
|
||||
jBuff = pEnv->NewByteArray( uiBytesToWrite);
|
||||
pvBuff = pEnv->GetPrimitiveArrayCritical(jBuff, NULL);
|
||||
memcpy(pvBuff, pvBuffer, uiBytesToWrite);
|
||||
pEnv->ReleasePrimitiveArrayCritical( jBuff, pvBuff, 0);
|
||||
|
||||
if( RC_BAD( rc = (RCODE)pEnv->CallIntMethod( m_jClient, MId, jBuff)))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if (bMustDetach)
|
||||
{
|
||||
if (m_pJvm->DetachCurrentThread() != 0)
|
||||
{
|
||||
flmAssert( 0);
|
||||
rc = RC_SET( NE_XFLM_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
RCODE JNIBackupStatus::backupStatus(
|
||||
FLMUINT64 ui64BytesToDo,
|
||||
FLMUINT64 ui64BytesDone)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
JNIEnv * pEnv;
|
||||
jclass Cls;
|
||||
jmethodID MId;
|
||||
FLMBOOL bMustDetach = FALSE;
|
||||
|
||||
if (m_pJvm->GetEnv( (void **)&pEnv, JNI_VERSION_1_2) != JNI_OK)
|
||||
{
|
||||
if (m_pJvm->AttachCurrentThread( (void **)&pEnv, NULL) != 0)
|
||||
{
|
||||
rc = RC_SET(NE_XFLM_FAILURE);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
bMustDetach = TRUE;
|
||||
}
|
||||
|
||||
Cls = pEnv->GetObjectClass( m_jStatus);
|
||||
MId = pEnv->GetMethodID( Cls, "backupStatus", "(JJ)I");
|
||||
flmAssert( MId);
|
||||
|
||||
rc = (RCODE)pEnv->CallIntMethod( m_jStatus, MId, (jlong)ui64BytesToDo,
|
||||
(jlong)ui64BytesDone);
|
||||
|
||||
Exit:
|
||||
|
||||
if (bMustDetach)
|
||||
{
|
||||
if (m_pJvm->DetachCurrentThread() != 0)
|
||||
{
|
||||
flmAssert( 0);
|
||||
rc = RC_SET( NE_XFLM_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
return( rc);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Backup__1backup(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj,
|
||||
jlong lThis,
|
||||
jstring sBackupPath,
|
||||
jstring sPassword,
|
||||
jobject Client,
|
||||
jobject Status)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Backup * pBackup = THIS_BACKUP();
|
||||
FLMUINT uiSeqNum = 0;
|
||||
JavaVM * pJvm;
|
||||
char * pszBackupPath = NULL;
|
||||
char * pszPassword = NULL;
|
||||
JNIBackupClient * pClient;
|
||||
JNIBackupStatus * pStatus = NULL;
|
||||
|
||||
|
||||
flmAssert( Client);
|
||||
|
||||
pEnv->GetJavaVM( &pJvm);
|
||||
if( (pClient = new JNIBackupClient( Client, pJvm)) == NULL)
|
||||
{
|
||||
rc = RC_SET( NE_XFLM_MEM);
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
if (sBackupPath)
|
||||
{
|
||||
pszBackupPath = (char *)pEnv->GetStringUTFChars( sBackupPath, NULL);
|
||||
}
|
||||
|
||||
if (sPassword)
|
||||
{
|
||||
pszPassword = (char *)pEnv->GetStringUTFChars( sPassword, NULL);
|
||||
}
|
||||
|
||||
if (Status)
|
||||
{
|
||||
if( (pStatus = new JNIBackupStatus( Status, pJvm)) == NULL)
|
||||
{
|
||||
rc = RC_SET( NE_XFLM_MEM);
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (RC_BAD( rc = pBackup->backup( pszBackupPath, pszPassword, pClient,
|
||||
pStatus, &uiSeqNum)))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if( pszBackupPath)
|
||||
{
|
||||
pEnv->ReleaseStringUTFChars( sBackupPath, pszBackupPath);
|
||||
}
|
||||
|
||||
if( pszPassword)
|
||||
{
|
||||
pEnv->ReleaseStringUTFChars( sPassword, pszPassword);
|
||||
}
|
||||
|
||||
if (pClient)
|
||||
{
|
||||
pClient->Release();
|
||||
}
|
||||
|
||||
if (pStatus)
|
||||
{
|
||||
pStatus->Release();
|
||||
}
|
||||
|
||||
return( uiSeqNum);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Backup__1endBackup(
|
||||
JNIEnv * pEnv,
|
||||
jobject, // obj,
|
||||
jlong lThis)
|
||||
{
|
||||
RCODE rc = NE_XFLM_OK;
|
||||
IF_Backup * pThisBackup = THIS_BACKUP();
|
||||
|
||||
if (RC_BAD( rc = pThisBackup->endBackup()))
|
||||
{
|
||||
ThrowError( rc, pEnv);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Backup__1getBackupTransId(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj,
|
||||
jlong lThis)
|
||||
{
|
||||
return( THIS_BACKUP()->getBackupTransId());
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT jlong JNICALL Java_xflaim_Backup__1getLastBackupTransId(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj,
|
||||
jlong lThis)
|
||||
{
|
||||
return( THIS_BACKUP()->getLastBackupTransId());
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Desc:
|
||||
****************************************************************************/
|
||||
JNIEXPORT void JNICALL Java_xflaim_Backup__1release(
|
||||
JNIEnv *, // pEnv,
|
||||
jobject, // obj,
|
||||
jlong lThis)
|
||||
{
|
||||
THIS_BACKUP()->Release();
|
||||
}
|
||||
Reference in New Issue
Block a user