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/03/02 23:44:11 UTC

svn commit: r918233 - in /subversion/trunk/subversion/bindings/javahl: native/SVNAdmin.cpp native/SVNAdmin.h native/org_apache_subversion_javahl_SVNAdmin.cpp src/org/apache/subversion/javahl/SVNAdmin.java src/org/tigris/subversion/javahl/SVNAdmin.java

Author: hwright
Date: Tue Mar  2 22:44:10 2010
New Revision: 918233

URL: http://svn.apache.org/viewvc?rev=918233&view=rev
Log:
JavaHL: Convert on output parameter for SVNAdmin to a Set.

[ in subversion/bindings/javahl/ ]
* native/SVNAdmin.cpp,
  native/SVNAdmin.h
  (lslocks): Rewrite to create the Set of Locks.

* native/org_apache_subversion_javahl_SVNAdmin.cpp
  (Java_org_apache_subversion_javahl_SVNAdmin_lslocks): Return the jobject.

* src/org/apache/subversion/javahl/SVNAdmin.java
  (lslocks): Return a Set<Lock>.

* src/org/tigris/subversion/javahl/SVNAdmin.java
  (lslock): Update wrapper.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp
    subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h
    subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNAdmin.java
    subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp?rev=918233&r1=918232&r2=918233&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.cpp Tue Mar  2 22:44:10 2010
@@ -498,7 +498,7 @@
                                  requestPool.pool()), );
 }
 
-jobjectArray SVNAdmin::lslocks(const char *path)
+jobject SVNAdmin::lslocks(const char *path)
 {
   SVN::Pool requestPool;
   SVN_JNI_NULL_PTR_EX(path, "path", NULL);
@@ -522,24 +522,41 @@
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 
-  jobjectArray ret = env->NewObjectArray(count, clazz, NULL);
+  jclass sclazz = env->FindClass("java/util/Set");
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 
-  env->DeleteLocalRef(clazz);
+  static jmethodID init_mid = 0;
+  if (init_mid == 0)
+    {
+      init_mid = env->GetMethodID(sclazz, "<init>", "()V");
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  static jmethodID add_mid = 0;
+  if (add_mid == 0)
+    {
+      add_mid = env->GetMethodID(sclazz, "add",
+                                 "(Ljava/lang/Object;)Z");
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  jobject map = env->NewObject(sclazz, init_mid);
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 
-  int i = 0;
   for (hi = apr_hash_first (requestPool.pool(), locks);
        hi;
-       hi = apr_hash_next (hi), ++i)
+       hi = apr_hash_next (hi))
     {
       void *val;
       apr_hash_this (hi, NULL, NULL, &val);
       svn_lock_t *lock = (svn_lock_t *)val;
       jobject jLock = CreateJ::Lock(lock);
-      env->SetObjectArrayElement(ret, i, jLock);
+
+      env->CallObjectMethod(map, add_mid, jLock);
       if (JNIUtil::isJavaExceptionThrown())
         return NULL;
 
@@ -548,7 +565,15 @@
         return NULL;
     }
 
-  return ret;
+  env->DeleteLocalRef(clazz);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  env->DeleteLocalRef(sclazz);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  return map;
 }
 
 void SVNAdmin::rmlocks(const char *path, Targets &locks)

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h?rev=918233&r1=918232&r2=918233&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNAdmin.h Tue Mar  2 22:44:10 2010
@@ -40,7 +40,7 @@
 {
  public:
   void rmlocks(const char *path, Targets &locks);
-  jobjectArray lslocks(const char *path);
+  jobject lslocks(const char *path);
   void verify(const char *path, Outputer &messageOut,
               Revision &revisionStart, Revision &revisionEnd);
   void setRevProp(const char *path, Revision &revision,

Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp?rev=918233&r1=918232&r2=918233&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNAdmin.cpp Tue Mar  2 22:44:10 2010
@@ -428,7 +428,7 @@
   cl->verify(path, messageOut, revisionStart, revisionEnd);
 }
 
-JNIEXPORT jobjectArray JNICALL
+JNIEXPORT jobject JNICALL
 Java_org_apache_subversion_javahl_SVNAdmin_lslocks
 (JNIEnv *env, jobject jthis, jstring jpath)
 {

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNAdmin.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNAdmin.java?rev=918233&r1=918232&r2=918233&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNAdmin.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNAdmin.java Tue Mar  2 22:44:10 2010
@@ -23,6 +23,8 @@
 
 package org.apache.subversion.javahl;
 
+import java.util.Set;
+
 /**
  * This class offers the same commands as the svnadmin commandline
  * client.
@@ -317,7 +319,7 @@
      * @throws ClientException  throw in case of problem
      * @since 1.2
      */
-    public native Lock[] lslocks(String path) throws ClientException;
+    public native Set<Lock> lslocks(String path) throws ClientException;
 
     /**
      * remove multiple locks from the repository

Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java?rev=918233&r1=918232&r2=918233&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java Tue Mar  2 22:44:10 2010
@@ -23,6 +23,8 @@
 
 package org.tigris.subversion.javahl;
 
+import java.util.Set;
+
 /**
  * This class offers the same commands as the svnadmin commandline
  * client.
@@ -447,13 +449,15 @@
     {
         try
         {
-            org.apache.subversion.javahl.Lock[] aLocks =
+            Set<org.apache.subversion.javahl.Lock> aLocks =
                                                     aSVNAdmin.lslocks(path);
-            Lock[] locks = new Lock[aLocks.length];
+            Lock[] locks = new Lock[aLocks.size()];
             
-            for (int i = 0; i < aLocks.length; i++)
+            int i = 0;
+            for (org.apache.subversion.javahl.Lock lock : aLocks)
             {
-                locks[i] = new Lock(aLocks[i]);
+                locks[i] = new Lock(lock);
+                i++;
             }
 
             return locks;