Author: brane
Date: Wed Jul 31 21:54:59 2013
New Revision: 1509045

URL: http://svn.apache.org/r1509045
Log:
Implement svn_rangelist_remove wrapper in JavaHL.

* build.conf (private-built-includes):
   Add org_apache_subversion_javahl_types_RevisionRangeList.h.

[in subversion/bindings/javahl/src/org/apache/subversion/javahl]
* types/RevisionRangeList.java (RevisionRangeList.remove):
   Mark overload native and return the same type as the argument.

[in subversion/bindings/javahl/native]
* RevisionRangeList.h (RevisionRangeList::create): New factory method.
  (RevisionRangeList::RevisionRangeList): Make constructor explicit.
* RevisionRangeList.cpp (RevisionRangeList::create): Implement conversion
   from the Java class RevisionRangeList.

* org_apache_subversion_javahl_types_RevisionRangeList.cpp: New file.
  (Java_org_apache_subversion_javahl_types_RevisionRangeList_remove):
   Native implementation of RevisionRangeList.remove.

[in subversion/bindings/javahl/tests/org/apache/subversion/javahl]
* BasicTests.java (BasicTests.testRevisionRangeListRemove):
   New test case; exercises both overloads of RevisionRangeList.remove.

Added:
    
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
Modified:
    subversion/trunk/build.conf
    subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp
    subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h
    
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
    
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

Modified: subversion/trunk/build.conf
URL: 
http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- subversion/trunk/build.conf (original)
+++ subversion/trunk/build.conf Wed Jul 31 21:54:59 2013
@@ -69,6 +69,7 @@ private-built-includes =
         
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLib.h
         
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLibIterator.h
         
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Revision.h
+        
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RevisionRangeList.h
         
subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_UserPasswordCallback.h
         
subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteSession.h
         
subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteFactory.h

Modified: 
subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp 
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp 
Wed Jul 31 21:54:59 2013
@@ -24,6 +24,7 @@
  * @brief Implementat of the class RevisionRangeList
  */
 
+#include "JNIUtil.h"
 #include "Iterator.h"
 #include "RevisionRange.h"
 #include "RevisionRangeList.h"
@@ -48,6 +49,33 @@ RevisionRangeList::RevisionRangeList(job
     }
 }
 
+RevisionRangeList RevisionRangeList::create(jobject jthis, SVN::Pool &pool)
+{
+  jobject jrangelist = NULL;
+
+  if (jthis)
+    {
+      JNIEnv *env = JNIUtil::getEnv();
+
+      jmethodID mid = 0;
+      if (mid == 0)
+        {
+          jclass cls = env->FindClass(JAVA_PACKAGE"/types/RevisionRangeList");
+          if (JNIUtil::isJavaExceptionThrown())
+            return RevisionRangeList(NULL, pool);
+
+          mid = env->GetMethodID(cls, "getRanges", "()Ljava/util/List;");
+          if (JNIUtil::isJavaExceptionThrown())
+            return RevisionRangeList(NULL, pool);
+        }
+
+      jrangelist = env->CallObjectMethod(jthis, mid);
+      if (JNIUtil::isJavaExceptionThrown())
+        return RevisionRangeList(NULL, pool);
+    }
+  return RevisionRangeList(jrangelist, pool);
+}
+
 jobject RevisionRangeList::toList() const
 {
   JNIEnv *env = JNIUtil::getEnv();

Modified: subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h 
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h Wed 
Jul 31 21:54:59 2013
@@ -44,9 +44,14 @@ class RevisionRangeList
   RevisionRangeList(jobject jrangelist, SVN::Pool &pool);
 
   /**
+   * Create a RevisionRangeList object from a Java RevisionRangeList.
+   */
+  static RevisionRangeList create(jobject jthis, SVN::Pool &pool);
+
+  /**
    * Wrap an svn_rangelist_t.
    */
-  RevisionRangeList(svn_rangelist_t* ranges)
+  explicit RevisionRangeList(svn_rangelist_t* ranges)
     : m_rangelist(ranges)
   {}
 

Added: 
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp?rev=1509045&view=auto
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
 (added)
+++ 
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
 Wed Jul 31 21:54:59 2013
@@ -0,0 +1,58 @@
+/**
+ * @copyright
+ * ====================================================================
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file org_apache_subversion_javahl_types_RevisionRangeList.cpp
+ * @brief Implementation of the native methods in the Java class
+ * RevisionRangeList.
+ */
+
+
+#include "../include/org_apache_subversion_javahl_types_RevisionRangeList.h"
+#include "JNIStackElement.h"
+#include "RevisionRangeList.h"
+#include "Pool.h"
+
+#include "svn_mergeinfo.h"
+#include "svn_private_config.h"
+
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_types_RevisionRangeList_remove(
+    JNIEnv* env, jobject jthis, jobject jeraser,
+    jboolean jconsider_inheritance)
+{
+  JNIEntry(RevisionRangeList, remove);
+
+  SVN::Pool request_pool;
+
+  RevisionRangeList rangelist = RevisionRangeList::create(jthis, request_pool);
+  CPPADDR_NULL_PTR(rangelist.get(), NULL);
+
+  RevisionRangeList eraser(jeraser, request_pool);
+  CPPADDR_NULL_PTR(eraser.get(), NULL);
+
+  svn_rangelist_t *output;
+  SVN_JNI_ERR(svn_rangelist_remove(&output, eraser.get(), rangelist.get(),
+                                   bool(jconsider_inheritance),
+                                   request_pool.getPool()),
+              NULL);
+  return RevisionRangeList(output).toList();
+}

Modified: 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
 Wed Jul 31 21:54:59 2013
@@ -65,12 +65,9 @@ public class RevisionRangeList implement
      *   {@link RevisionRange#isInherited} property when comparing
      *   revision ranges for equality.
      */
-    public /*native*/ RevisionRangeList remove(List<RevisionRange> eraser,
-                                               boolean considerInheritance)
-        throws ClientException
-    {
-        throw new RuntimeException("Not implemented: 
RevisionRangeListl.remove");
-    }
+    public native List<RevisionRange> remove(List<RevisionRange> eraser,
+                                             boolean considerInheritance)
+        throws ClientException;
 
     /**
      * Remove revisions in <code>eraser</code> from the current object
@@ -84,7 +81,8 @@ public class RevisionRangeList implement
                                     boolean considerInheritance)
         throws ClientException
     {
-        return remove(eraser.ranges, considerInheritance);
+        return new RevisionRangeList
+            (remove(eraser.ranges, considerInheritance));
     }
 
     // TODO: More svn_rangelist_t operations

Modified: 
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 Wed Jul 31 21:54:59 2013
@@ -3744,6 +3744,39 @@ public class BasicTests extends SVNTests
     }
 
     /**
+     * Test RevisionRangeList.remove
+     */
+    public void testRevisionRangeListRemove() throws Throwable
+    {
+        RevisionRangeList ranges =
+            new RevisionRangeList(new ArrayList<RevisionRange>());
+        ranges.getRanges()
+            .add(new RevisionRange(Revision.getInstance(1),
+                                   Revision.getInstance(5),
+                                   true));
+        ranges.getRanges()
+            .add(new RevisionRange(Revision.getInstance(7),
+                                   Revision.getInstance(9),
+                                   false));
+        RevisionRangeList eraser =
+            new RevisionRangeList(new ArrayList<RevisionRange>());
+        eraser.getRanges()
+            .add(new RevisionRange(Revision.getInstance(7),
+                                   Revision.getInstance(9),
+                                   true));
+
+        List<RevisionRange> result = ranges.remove(eraser, true).getRanges();
+        assertEquals(2, ranges.getRanges().size());
+        assertEquals(1, eraser.getRanges().size());
+        assertEquals(2, result.size());
+
+        result = ranges.remove(eraser.getRanges(), false);
+        assertEquals(2, ranges.getRanges().size());
+        assertEquals(1, eraser.getRanges().size());
+        assertEquals(1, result.size());
+    }
+
+    /**
      * @return <code>file</code> converted into a -- possibly
      * <code>canonical</code>-ized -- Subversion-internal path
      * representation.


Reply via email to