Author: hwright
Date: Wed Mar 17 21:30:15 2010
New Revision: 924502

URL: http://svn.apache.org/viewvc?rev=924502&view=rev
Log:
JavaHL: Replace a hacked-together class with an enum that provides the same
functionality.

[ in subversion/bindings/javahl/ ]
* tests/org/apache/subversion/javahl/BasicTests.java:
  Update tests to use the enum type.

* native/DiffSummaryReceiver.cpp
  (onSummary): Treat the enum as an object, allocate and free it accordingly.

* native/EnumMapper.h,
  native/EnumMapper.cpp
  (mapSummarizeKind): New.

* src/org/apache/subversion/javahl/DiffSummary.java
  (DiffSummary): Update constructor to take the right type.
  (DiffKind): Rewrite as an enum, stripping out the enum facilities we now get
    for free.

* src/org/tigris/subversion/javahl/DiffSummary.java
  (DiffSummary): Update compat wrapper.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
    
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
    
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
    
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

Modified: 
subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp 
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/DiffSummaryReceiver.cpp 
Wed Mar 17 21:30:15 2010
@@ -88,7 +88,8 @@ DiffSummaryReceiver::onSummary(const svn
   if (ctor == 0)
     {
       ctor = env->GetMethodID(clazz, "<init>",
-                              "(Ljava/lang/String;IZI)V");
+                              "(Ljava/lang/String;"
+                              "L"JAVA_PACKAGE"/DiffSummary$DiffKind;ZI)V");
       if (JNIUtil::isJavaExceptionThrown() || ctor == 0)
         return SVN_NO_ERROR;
     }
@@ -97,15 +98,22 @@ DiffSummaryReceiver::onSummary(const svn
   if (JNIUtil::isJavaExceptionThrown())
     return SVN_NO_ERROR;
 
+  jobject jSummarizeKind = EnumMapper::mapSummarizeKind(diff->summarize_kind);
+  if (JNIUtil::isJavaExceptionThrown())
+    return SVN_NO_ERROR;
+
   jint jNodeKind = EnumMapper::mapNodeKind(diff->node_kind);
   // Actually tranform the DIFF parameter into a Java equivalent.
-  jobject jDiffSummary = env->NewObject(clazz, ctor, jPath,
-                                        (jint) diff->summarize_kind,
+  jobject jDiffSummary = env->NewObject(clazz, ctor, jPath, jSummarizeKind,
                                         (jboolean) diff->prop_changed,
                                         jNodeKind);
   if (JNIUtil::isJavaExceptionThrown() || jDiffSummary == NULL)
     return SVN_NO_ERROR;
 
+  env->DeleteLocalRef(jSummarizeKind);
+  if (JNIUtil::isJavaExceptionThrown())
+    return SVN_NO_ERROR;
+
   env->DeleteLocalRef(jPath);
   if (JNIUtil::isJavaExceptionThrown())
     return SVN_NO_ERROR;

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp Wed Mar 
17 21:30:15 2010
@@ -535,6 +535,25 @@ svn_opt_revision_kind EnumMapper::toRevi
     return svn_opt_revision_unspecified;
 }
 
+jobject EnumMapper::mapSummarizeKind(svn_client_diff_summarize_kind_t sKind)
+{
+  switch (sKind)
+    {
+    default:
+    case svn_client_diff_summarize_kind_normal:
+      return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "normal");
+
+    case svn_client_diff_summarize_kind_added:
+      return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "added");
+
+    case svn_client_diff_summarize_kind_modified:
+      return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "modified");
+
+    case svn_client_diff_summarize_kind_deleted:
+      return mapEnum(JAVA_PACKAGE"/DiffSummary$DiffKind", "deleted");
+    }
+}
+
 jobject EnumMapper::mapEnum(const char *clazzName, const char *name)
 {
   std::string methodSig("(Ljava/lang/String;)L");

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h Wed Mar 17 
21:30:15 2010
@@ -59,6 +59,7 @@ class EnumMapper
   static jobject mapDepth(svn_depth_t depth);
   static jint mapOperation(svn_wc_operation_t);
   static jobject mapTristate(svn_tristate_t);
+  static jobject mapSummarizeKind(svn_client_diff_summarize_kind_t);
  private:
   static jobject mapEnum(const char *clazzName, const char *name);
   static jstring getName(const char *clazzName, jobject jenum);

Modified: 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
 Wed Mar 17 21:30:15 2010
@@ -56,11 +56,11 @@ public class DiffSummary extends EventOb
      * @param nodeKind The type of node which changed (corresponds to
      * the {...@link NodeKind} enumeration).
      */
-    public DiffSummary(String path, int diffKind, boolean propsChanged,
+    public DiffSummary(String path, DiffKind diffKind, boolean propsChanged,
                 int nodeKind)
     {
         super(path);
-        this.diffKind = DiffKind.getInstance(diffKind);
+        this.diffKind = diffKind;
         this.propsChanged = propsChanged;
         this.nodeKind = nodeKind;
     }
@@ -109,78 +109,26 @@ public class DiffSummary extends EventOb
     /**
      * The type of difference being summarized.
      */
-    public static class DiffKind
+    public enum DiffKind
     {
-        // Corresponds to the svn_client_diff_summarize_kind_t enum.
-        public static DiffKind NORMAL = new DiffKind(0);
-        public static DiffKind ADDED = new DiffKind(1);
-        public static DiffKind MODIFIED = new DiffKind(2);
-        public static DiffKind DELETED = new DiffKind(3);
-
-        private int kind;
-
-        private DiffKind(int kind)
-        {
-            this.kind = kind;
-        }
+        normal      ("normal"),
+        added       ("added"),
+        modified    ("modified"),
+        deleted     ("deleted");
 
         /**
-         * @return The appropriate instance.
-         * @throws IllegalArgumentException If the diff kind is not
-         * recognized.
+         * The description of the action.
          */
-        public static DiffKind getInstance(int diffKind)
-            throws IllegalArgumentException
-        {
-            switch (diffKind)
-            {
-            case 0:
-                return NORMAL;
-            case 1:
-                return ADDED;
-            case 2:
-                return MODIFIED;
-            case 3:
-                return DELETED;
-            default:
-                throw new IllegalArgumentException("Diff kind " + diffKind +
-                                                   " not recognized");
-            }
-        }
+        private String description;
 
-        /**
-         * @param diffKind A DiffKind for comparison.
-         * @return Whether both DiffKinds are of the same type.
-         */
-        public boolean equals(Object diffKind)
-        {
-            return (((DiffKind) diffKind).kind == this.kind);
-        }
-
-        public int hashCode()
+        DiffKind(String description)
         {
-            // Equivalent to new Integer(this.kind).hashCode().
-            return this.kind;
+            this.description = description;
         }
 
-        /**
-         * @return A textual representation of the type of diff.
-         */
         public String toString()
         {
-            switch (this.kind)
-            {
-            case 0:
-                return "normal";
-            case 1:
-                return "added";
-            case 2:
-                return "modified";
-            case 3:
-                return "deleted";
-            default:
-                return "unknown";
-            }
+            return description;
         }
     }
 }

Modified: 
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java?rev=924502&r1=924501&r2=924502&view=diff
==============================================================================
--- 
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
 (original)
+++ 
subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
 Wed Mar 17 21:30:15 2010
@@ -70,7 +70,7 @@ public class DiffSummary extends EventOb
      */
     DiffSummary(org.apache.subversion.javahl.DiffSummary aSummary)
     {
-        this(aSummary.getPath(), aSummary.getDiffKind().hashCode(),
+        this(aSummary.getPath(), aSummary.getDiffKind().ordinal(),
              aSummary.propsChanged(), aSummary.getNodeKind());
     }
 

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=924502&r1=924501&r2=924502&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 Mar 17 21:30:15 2010
@@ -3069,7 +3069,7 @@ public class BasicTests extends SVNTests
         assertEquals("Incorrect path for " + BETA_PATH, BETA_PATH,
                      betaDiff.getPath());
         assertTrue("Incorrect diff kind for " + BETA_PATH,
-                   DiffSummary.DiffKind.ADDED.equals(betaDiff.getDiffKind()));
+                   betaDiff.getDiffKind() == DiffSummary.DiffKind.added);
         assertEquals("Incorrect props changed notice for " + BETA_PATH,
                      false, betaDiff.propsChanged());
         assertEquals("Incorrect node kind for " + BETA_PATH, 1,


Reply via email to