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/17 04:39:45 UTC

svn commit: r924137 - in /subversion/trunk/subversion/bindings/javahl: native/ src/org/apache/subversion/javahl/ src/org/tigris/subversion/javahl/ tests/org/apache/subversion/javahl/

Author: hwright
Date: Wed Mar 17 03:39:45 2010
New Revision: 924137

URL: http://svn.apache.org/viewvc?rev=924137&view=rev
Log:
JavaHL more enum'ing, this time with RevisionKind.

[ in subversion/bindings/javahl/ ]
* tests/org/apache/subversion/javahl/BasicTests.java:
  Update to use Revision.Kind rather than RevisionKind.

* native/Revision.cpp
  (Revision): Update for the Revision.Kind type, instead of an int.  Use
    the new EnumMapper to dissect the incoming object.

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

* src/org/apache/subversion/javahl/RevisionKind.java:
  Remove.

* src/org/apache/subversion/javahl/Revision.java:
  Update all Kind references to use the new enum
  (Revision.Kind): Implement as an enum, rather than a class.

* src/org/tigris/subversion/javahl/Revision.java
  (toApache, createFromApache): Update backward compat wrappers.
  (Kind.fromAKind, Kind.toAKind): New.

Removed:
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/RevisionKind.java
Modified:
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
    subversion/trunk/subversion/bindings/javahl/native/Revision.cpp
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Revision.java
    subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java
    subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp?rev=924137&r1=924136&r2=924137&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp Wed Mar 17 03:39:45 2010
@@ -554,6 +554,35 @@ jobject EnumMapper::mapTristate(svn_tris
     }
 }
 
+svn_opt_revision_kind EnumMapper::toRevisionKind(jobject jkind)
+{
+  JNIEnv *env = JNIUtil::getEnv();
+
+  jstring jname = getName(JAVA_PACKAGE"/Revision$Kind", jkind);
+  if (JNIUtil::isJavaExceptionThrown())
+    return svn_opt_revision_unspecified;
+
+  JNIStringHolder str(jname);
+  std::string name((const char *)str);
+
+  if (name == "number")
+    return svn_opt_revision_number;
+  else if (name == "date")
+    return svn_opt_revision_date;
+  else if (name == "committed")
+    return svn_opt_revision_committed;
+  else if (name == "previous")
+    return svn_opt_revision_previous;
+  else if (name == "base")
+    return svn_opt_revision_base;
+  else if (name == "working")
+    return svn_opt_revision_working;
+  else if (name == "head")
+    return svn_opt_revision_head;
+  else
+    return svn_opt_revision_unspecified;
+}
+
 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=924137&r1=924136&r2=924137&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h Wed Mar 17 03:39:45 2010
@@ -43,6 +43,7 @@ class EnumMapper
  public:
   /* Converting to C enum's */
   static svn_depth_t toDepth(jobject jdepth);
+  static svn_opt_revision_kind toRevisionKind(jobject jkind);
 
   /* Converting from C enum's */
   static jint mapCommitMessageStateFlags(apr_byte_t flags);

Modified: subversion/trunk/subversion/bindings/javahl/native/Revision.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Revision.cpp?rev=924137&r1=924136&r2=924137&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/Revision.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Revision.cpp Wed Mar 17 03:39:45 2010
@@ -25,8 +25,8 @@
  */
 
 #include "Revision.h"
-#include "../include/org_apache_subversion_javahl_RevisionKind.h"
 #include "JNIUtil.h"
+#include "EnumMapper.h"
 
 const svn_opt_revision_kind Revision::START = svn_opt_revision_unspecified;
 const svn_opt_revision_kind Revision::HEAD = svn_opt_revision_head;
@@ -55,7 +55,8 @@ Revision::Revision(jobject jthis, bool h
           if (JNIUtil::isJavaExceptionThrown())
             return;
 
-          fid = env->GetFieldID(clazz, "revKind", "I");
+          fid = env->GetFieldID(clazz, "revKind",
+                                "L"JAVA_PACKAGE"/Revision$Kind;");
           if (JNIUtil::isJavaExceptionThrown())
             return;
 
@@ -63,19 +64,16 @@ Revision::Revision(jobject jthis, bool h
           if (JNIUtil::isJavaExceptionThrown())
             return;
         }
-      jint jKind = env->GetIntField(jthis, fid);
+      jobject jKind = env->GetObjectField(jthis, fid);
       if (JNIUtil::isJavaExceptionThrown())
         return;
 
       m_revision.value.number = 0;
+      m_revision.kind = EnumMapper::toRevisionKind(jKind);
 
-      switch(jKind)
+      switch(m_revision.kind)
         {
-        case org_apache_subversion_javahl_RevisionKind_unspecified:
-          m_revision.kind = svn_opt_revision_unspecified;
-          break;
-        case org_apache_subversion_javahl_RevisionKind_number:
-          m_revision.kind = svn_opt_revision_number;
+        case svn_opt_revision_number:
           {
             static jfieldID fidNum = 0;
             if (fidNum == 0)
@@ -97,8 +95,7 @@ Revision::Revision(jobject jthis, bool h
             m_revision.value.number = (svn_revnum_t) jNumber;
           }
           break;
-        case org_apache_subversion_javahl_RevisionKind_date:
-          m_revision.kind = svn_opt_revision_date;
+        case svn_opt_revision_date:
           {
             static jfieldID fidDate = 0;
             if (fidDate == 0)
@@ -147,20 +144,8 @@ Revision::Revision(jobject jthis, bool h
             m_revision.value.date = jMillSec * 1000;
           }
           break;
-        case org_apache_subversion_javahl_RevisionKind_committed:
-          m_revision.kind = svn_opt_revision_committed;
-          break;
-        case org_apache_subversion_javahl_RevisionKind_previous:
-          m_revision.kind = svn_opt_revision_previous;
-          break;
-        case org_apache_subversion_javahl_RevisionKind_base:
-          m_revision.kind = svn_opt_revision_base;
-          break;
-        case org_apache_subversion_javahl_RevisionKind_working:
-          m_revision.kind = svn_opt_revision_working;
-          break;
-        case org_apache_subversion_javahl_RevisionKind_head:
-          m_revision.kind = svn_opt_revision_head;
+        default:
+          /* None of the other revision kinds need special handling. */
           break;
         }
     }

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Revision.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Revision.java?rev=924137&r1=924136&r2=924137&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Revision.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Revision.java Wed Mar 17 03:39:45 2010
@@ -44,16 +44,17 @@ public class Revision implements java.io
     /**
      * kind of revision specified
      */
-    protected int revKind;
+    protected Kind revKind;
 
     /**
      * Internally create a new revision.  Public for backward compat reasons.
      * Callers should use getInstance() instead.
      * @param kind    kind of revision
      */
-    public Revision(int kind)
+    public Revision(Kind kind)
     {
-        if (kind < RevisionKind.unspecified || kind > RevisionKind.head)
+        if (kind.ordinal() < Kind.unspecified.ordinal()
+               || kind.ordinal() > Kind.head.ordinal())
             throw new IllegalArgumentException(
                     kind+" is not a legal revision kind");
         revKind = kind;
@@ -63,7 +64,7 @@ public class Revision implements java.io
      * Returns the kind of the Revsion
      * @return kind
      */
-    public int getKind()
+    public Kind getKind()
     {
         return revKind;
     }
@@ -75,11 +76,11 @@ public class Revision implements java.io
     public String toString()
     {
         switch(revKind) {
-            case Kind.base : return "BASE";
-            case Kind.committed : return "COMMITTED";
-            case Kind.head : return "HEAD";
-            case Kind.previous : return "PREV";
-            case Kind.working : return "WORKING";
+            case base : return "BASE";
+            case committed : return "COMMITTED";
+            case head : return "HEAD";
+            case previous : return "PREV";
+            case working : return "WORKING";
         }
         return super.toString();
     }
@@ -89,7 +90,7 @@ public class Revision implements java.io
      */
     public int hashCode()
     {
-        return revKind * -1;
+        return revKind.ordinal() * -1;
     }
 
     /**
@@ -321,10 +322,31 @@ public class Revision implements java.io
      * refers to the uncommitted "working" revision, which may be modified
      * with respect to its base revision.  In other contexts, `working'
      * should behave the same as `committed' or `current'.
-     *
-     * the values are defined in RevisionKind because of building reasons
      */
-    public static final class Kind implements RevisionKind
+    public enum Kind
     {
+       /** No revision information given. */
+        unspecified,
+
+        /** revision given as number */
+        number,
+
+        /** revision given as date */
+        date,
+
+        /** rev of most recent change */
+        committed,
+
+        /** (rev of most recent change) - 1 */
+        previous,
+
+        /** .svn/entries current revision */
+        base,
+
+        /** current, plus local mods */
+        working,
+
+        /** repository youngest */
+        head;
     }
 }

Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java?rev=924137&r1=924136&r2=924137&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java Wed Mar 17 03:39:45 2010
@@ -157,22 +157,22 @@ public class Revision implements java.io
 
     public org.apache.subversion.javahl.Revision toApache()
     {
-        return new org.apache.subversion.javahl.Revision(revKind);
+        return new org.apache.subversion.javahl.Revision(Kind.toAKind(revKind));
     }
 
     public static Revision createFromApache(
                                     org.apache.subversion.javahl.Revision aRev)
     {
-        int kind = aRev.getKind();
+        org.apache.subversion.javahl.Revision.Kind kind = aRev.getKind();
 
         switch (kind)
         {
-            case org.apache.subversion.javahl.Revision.Kind.number:
+            case number:
                 return getInstance(((org.apache.subversion.javahl.Revision.Number) aRev).getNumber());
-            case org.apache.subversion.javahl.Revision.Kind.date:
+            case date:
                 return getInstance(((org.apache.subversion.javahl.Revision.DateSpec) aRev).getDate());
             default:
-                return getInstance(kind);
+                return getInstance(Kind.fromAKind(kind));
         }
     }
 
@@ -368,5 +368,52 @@ public class Revision implements java.io
      */
     public static final class Kind implements RevisionKind
     {
+       public static int fromAKind(org.apache.subversion.javahl.Revision.Kind aKind)
+       {
+           switch (aKind)
+           {
+           default:
+           case unspecified:
+               return RevisionKind.unspecified;
+           case number:
+               return RevisionKind.number;
+           case date:
+               return RevisionKind.date;
+           case committed:
+               return RevisionKind.committed;
+           case previous:
+               return RevisionKind.previous;
+           case base:
+               return RevisionKind.base;
+           case head:
+               return RevisionKind.head;
+           case working:
+               return RevisionKind.working;
+           }
+       }
+       
+       public static org.apache.subversion.javahl.Revision.Kind toAKind(int kind)
+       {
+           switch (kind)
+           {
+           default:
+           case RevisionKind.unspecified:
+               return org.apache.subversion.javahl.Revision.Kind.unspecified;
+           case RevisionKind.number:
+               return org.apache.subversion.javahl.Revision.Kind.number;
+           case RevisionKind.date:
+               return org.apache.subversion.javahl.Revision.Kind.date;
+           case RevisionKind.committed:
+               return org.apache.subversion.javahl.Revision.Kind.committed;
+           case RevisionKind.previous:
+               return org.apache.subversion.javahl.Revision.Kind.previous;
+           case RevisionKind.base:
+               return org.apache.subversion.javahl.Revision.Kind.base;
+           case RevisionKind.head:
+               return org.apache.subversion.javahl.Revision.Kind.head;
+           case RevisionKind.working:
+               return org.apache.subversion.javahl.Revision.Kind.working;
+           }
+       }
     }
 }

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=924137&r1=924136&r2=924137&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 03:39:45 2010
@@ -2540,7 +2540,7 @@ public class BasicTests extends SVNTests
 
         String branchPath = thisTest.getWCPath() + "/branches/A";
         String modUrl = thisTest.getUrl() + "/A";
-        Revision unspec = new Revision(RevisionKind.unspecified);
+        Revision unspec = new Revision(Revision.Kind.unspecified);
         List<RevisionRange> ranges = new ArrayList<RevisionRange>(1);
         ranges.add(new RevisionRange(unspec, unspec));
         client.merge(modUrl, Revision.HEAD, ranges,
@@ -2594,7 +2594,7 @@ public class BasicTests extends SVNTests
 
         String branchPath = thisTest.getWCPath() + "/branches/A";
         String modUrl = thisTest.getUrl() + "/A";
-        Revision unspec = new Revision(RevisionKind.unspecified);
+        Revision unspec = new Revision(Revision.Kind.unspecified);
         List<RevisionRange> ranges = new ArrayList<RevisionRange>(1);
         ranges.add(new RevisionRange(unspec, unspec));
         client.merge(modUrl, Revision.HEAD, ranges,