You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/08/31 00:03:32 UTC
svn commit: r990956 - in /subversion/trunk/subversion/bindings/javahl:
native/ src/org/apache/subversion/javahl/
Author: hwright
Date: Mon Aug 30 22:03:31 2010
New Revision: 990956
URL: http://svn.apache.org/viewvc?rev=990956&view=rev
Log:
JavaHL: Move more complexity out of C++ and into Java-land. (See r990952)
* subversion/bindings/javahl/native/ProgressListener.h:
Remove.
* subversion/bindings/javahl/native/SVNClient.h:
Remove some obsolete forward class declarations.
* subversion/bindings/javahl/native/SVNClient.cpp:
Remove obsolete included header reference.
* subversion/bindings/javahl/native/ClientContext.h:
Remove obsolete forward class declarations.
(m_progressListener): Remove.
(setProgressListener): Remove.
(progress): New.
* subversion/bindings/javahl/native/ProgressListener.cpp:
Remove.
* subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
(Java_org_apache_subversion_javahl_SVNClient_setProgressCallback): Remove.
* subversion/bindings/javahl/native/ClientContext.cpp
(ClientContext): Initialize the baton, but no the listener member object.
(~ClientContext): Don't bother deleting the member listener object.
(getContext): Don't set the progress baton here.
(setProgressListener): Remove.
(progress): New.
* subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
(setProgressCallback): Implement as a Java method.
(ClientContext): Add a progress listener member and method.
Removed:
subversion/trunk/subversion/bindings/javahl/native/ProgressListener.cpp
subversion/trunk/subversion/bindings/javahl/native/ProgressListener.h
Modified:
subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp
subversion/trunk/subversion/bindings/javahl/native/ClientContext.h
subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
subversion/trunk/subversion/bindings/javahl/native/SVNClient.h
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
Modified: subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp?rev=990956&r1=990955&r2=990956&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/ClientContext.cpp Mon Aug 30 22:03:31 2010
@@ -33,7 +33,6 @@
#include "Prompter.h"
#include "CreateJ.h"
-#include "ProgressListener.h"
#include "CommitMessage.h"
#include "ConflictResolverCallback.h"
@@ -45,8 +44,7 @@ struct log_msg_baton
};
ClientContext::ClientContext(jobject jsvnclient)
- : m_progressListener(NULL),
- m_prompter(NULL),
+ : m_prompter(NULL),
m_commitMessage(NULL),
m_conflictResolver(NULL)
{
@@ -93,12 +91,12 @@ ClientContext::ClientContext(jobject jsv
persistentCtx->cancel_baton = this;
persistentCtx->notify_func2= notify;
persistentCtx->notify_baton2 = m_jctx;
- persistentCtx->progress_func = ProgressListener::progress;
+ persistentCtx->progress_func = progress;
+ persistentCtx->progress_baton = m_jctx;
}
ClientContext::~ClientContext()
{
- delete m_progressListener;
delete m_prompter;
delete m_commitMessage;
delete m_conflictResolver;
@@ -216,8 +214,6 @@ ClientContext::getContext(const char *me
ctx->log_msg_baton3 = getCommitMessageBaton(message);
m_cancelOperation = false;
- ctx->progress_baton = m_progressListener;
-
if (m_conflictResolver)
{
ctx->conflict_func = ConflictResolverCallback::resolveConflict;
@@ -300,13 +296,6 @@ ClientContext::setConflictResolver(Confl
}
void
-ClientContext::setProgressListener(ProgressListener *listener)
-{
- delete m_progressListener;
- m_progressListener = listener;
-}
-
-void
ClientContext::setConfigDirectory(const char *configDir)
{
// A change to the config directory may necessitate creation of
@@ -380,3 +369,51 @@ ClientContext::notify(void *baton,
env->DeleteLocalRef(jInfo);
}
+
+void
+ClientContext::progress(apr_off_t progressVal, apr_off_t total,
+ void *baton, apr_pool_t *pool)
+{
+ jobject jctx = (jobject) baton;
+ JNIEnv *env = JNIUtil::getEnv();
+
+ // Create a local frame for our references
+ env->PushLocalFrame(LOCAL_FRAME_SIZE);
+ if (JNIUtil::isJavaExceptionThrown())
+ return;
+
+ static jmethodID mid = 0;
+ if (mid == 0)
+ {
+ jclass clazz = env->GetObjectClass(jctx);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NOTHING();
+
+ mid = env->GetMethodID(clazz, "onProgress",
+ "(L"JAVA_PACKAGE"/ProgressEvent;)V");
+ if (JNIUtil::isJavaExceptionThrown() || mid == 0)
+ POP_AND_RETURN_NOTHING();
+ }
+
+ static jmethodID midCT = 0;
+ jclass clazz = env->FindClass(JAVA_PACKAGE"/ProgressEvent");
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NOTHING();
+
+ if (midCT == 0)
+ {
+ midCT = env->GetMethodID(clazz, "<init>", "(JJ)V");
+ if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
+ POP_AND_RETURN_NOTHING();
+ }
+
+ // Call the Java method.
+ jobject jevent = env->NewObject(clazz, midCT,
+ (jlong) progressVal, (jlong) total);
+ if (JNIUtil::isJavaExceptionThrown())
+ POP_AND_RETURN_NOTHING();
+
+ env->CallVoidMethod(jctx, mid, jevent);
+
+ POP_AND_RETURN_NOTHING();
+}
Modified: subversion/trunk/subversion/bindings/javahl/native/ClientContext.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/ClientContext.h?rev=990956&r1=990955&r2=990956&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/ClientContext.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/ClientContext.h Mon Aug 30 22:03:31 2010
@@ -37,9 +37,7 @@
#include "JNIStringHolder.h"
class Prompter;
-class ClientNotifyCallback;
class ConflictResolverCallback;
-class ProgressListener;
class CommitMessage;
/**
@@ -58,7 +56,6 @@ class ClientContext
Prompter *m_prompter;
ConflictResolverCallback *m_conflictResolver;
- ProgressListener *m_progressListener;
bool m_cancelOperation;
CommitMessage *m_commitMessage;
@@ -88,7 +85,6 @@ class ClientContext
void password(const char *pi_password);
void setPrompt(Prompter *prompter);
void setConflictResolver(ConflictResolverCallback *conflictResolver);
- void setProgressListener(ProgressListener *listener);
void commitMessageHandler(CommitMessage *commitMessage);
void cancelOperation();
const char *getConfigDirectory();
@@ -102,6 +98,8 @@ class ClientContext
static void notify(void *baton, const svn_wc_notify_t *notify,
apr_pool_t *pool);
+ static void progress(apr_off_t progressVal, apr_off_t total,
+ void *baton, apr_pool_t *pool);
};
#endif // CLIENTCONTEXT_H
Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp?rev=990956&r1=990955&r2=990956&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Mon Aug 30 22:03:31 2010
@@ -30,7 +30,6 @@
#include "DiffSummaryReceiver.h"
#include "ConflictResolverCallback.h"
#include "ClientContext.h"
-#include "ProgressListener.h"
#include "Prompter.h"
#include "Pool.h"
#include "Targets.h"
Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.h?rev=990956&r1=990955&r2=990956&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.h Mon Aug 30 22:03:31 2010
@@ -35,9 +35,7 @@
class Revision;
class RevisionRange;
-class ClientNotifyCallback;
class ConflictResolverCallback;
-class ProgressListener;
class Targets;
class JNIByteArray;
class Prompter;
Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=990956&r1=990955&r2=990956&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Mon Aug 30 22:03:31 2010
@@ -34,7 +34,6 @@
#include "RevisionRange.h"
#include "EnumMapper.h"
#include "ConflictResolverCallback.h"
-#include "ProgressListener.h"
#include "CommitMessage.h"
#include "Prompter.h"
#include "Targets.h"
@@ -364,25 +363,6 @@ Java_org_apache_subversion_javahl_SVNCli
}
JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_setProgressCallback
-(JNIEnv *env, jobject jthis, jobject jprogressListener)
-{
- JNIEntry(SVNClient, setProgressCallback);
- SVNClient *cl = SVNClient::getCppObject(jthis);
- if (cl == NULL)
- {
- JNIUtil::throwError(_("bad C++ this"));
- return;
- }
- ProgressListener *listener =
- ProgressListener::makeCProgressListener(jprogressListener);
- if (JNIUtil::isExceptionThrown())
- return;
-
- cl->getClientContext().setProgressListener(listener);
-}
-
-JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_commitMessageHandler
(JNIEnv *env, jobject jthis, jobject jcommitMessage)
{
Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=990956&r1=990955&r2=990956&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Mon Aug 30 22:03:31 2010
@@ -189,7 +189,10 @@ public class SVNClient implements ISVNCl
/**
* @since 1.5
*/
- public native void setProgressCallback(ProgressCallback listener);
+ public void setProgressCallback(ProgressCallback listener)
+ {
+ clientContext.listener = listener;
+ }
/**
* @since 1.0
@@ -647,14 +650,21 @@ public class SVNClient implements ISVNCl
* persist in this object, such as notification handlers.
*/
private class ClientContext
- implements ClientNotifyCallback
+ implements ClientNotifyCallback, ProgressCallback
{
public ClientNotifyCallback notify = null;
+ public ProgressCallback listener = null;
public void onNotify(ClientNotifyInformation notifyInfo)
{
if (notify != null)
notify.onNotify(notifyInfo);
}
+
+ public void onProgress(ProgressEvent event)
+ {
+ if (listener != null)
+ listener.onProgress(event);
+ }
}
}