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 17:53:10 UTC

svn commit: r924366 - 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 16:53:10 2010
New Revision: 924366

URL: http://svn.apache.org/viewvc?rev=924366&view=rev
Log:
JavaHL: Enum-ize the StatusKind.

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

* tests/org/apache/subversion/javahl/WC.java
  (setItemTextStatus, getItemPropStatus, textStatus, propStatus):
    Update type for the new enum.

* native/StatusCallback.cpp
  (createJavaStatus): Update for the new type, and be sure to release our
    references later on.

* native/SVNClient.cpp:
  Remove the StatusKind header.

* native/EnumMapper.h,
  native/EnumMapper.cpp
  (mapStatusKind): Update return type to return the status Kind object.
 
* src/org/apache/subversion/javahl/StatusKind.java:
  Remove.

* src/org/apache/subversion/javahl/Status.java
  (textStatus, propStatus, repositoryTextStatus, repositoryPropStatus):
    Update types, along with the associated getters and setters.
  (Kind): New enum, roughly copied from StatusKind.

* src/org/tigris/subversion/javahl/Status.java
  (Status): Update backward compt wrapper.

Removed:
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/StatusKind.java
Modified:
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
    subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
    subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Status.java
    subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
    subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
    subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.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=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp Wed Mar 17 16:53:10 2010
@@ -35,7 +35,6 @@
 #include "../include/org_apache_subversion_javahl_NodeKind.h"
 #include "../include/org_apache_subversion_javahl_Operation.h"
 #include "../include/org_apache_subversion_javahl_LockStatus.h"
-#include "../include/org_apache_subversion_javahl_StatusKind.h"
 #include "../include/org_apache_subversion_javahl_Revision.h"
 #include "../include/org_apache_subversion_javahl_ScheduleKind.h"
 #include "../include/org_apache_subversion_javahl_ConflictDescriptor_Kind.h"
@@ -324,52 +323,52 @@ jint EnumMapper::mapScheduleKind(svn_wc_
  * @param state     the C wc state constant
  * @returns the Java constant
  */
-jint EnumMapper::mapStatusKind(svn_wc_status_kind svnKind)
+jobject EnumMapper::mapStatusKind(svn_wc_status_kind svnKind)
 {
   switch(svnKind)
     {
     case svn_wc_status_none:
     default:
-      return org_apache_subversion_javahl_StatusKind_none;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "none");
 
     case svn_wc_status_unversioned:
-      return org_apache_subversion_javahl_StatusKind_unversioned;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "unversioned");
 
     case svn_wc_status_normal:
-      return org_apache_subversion_javahl_StatusKind_normal;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "normal");
 
     case svn_wc_status_added:
-      return org_apache_subversion_javahl_StatusKind_added;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "added");
 
     case svn_wc_status_missing:
-      return org_apache_subversion_javahl_StatusKind_missing;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "missing");
 
     case svn_wc_status_deleted:
-      return org_apache_subversion_javahl_StatusKind_deleted;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "deleted");
 
     case svn_wc_status_replaced:
-      return org_apache_subversion_javahl_StatusKind_replaced;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "replaced");
 
     case svn_wc_status_modified:
-      return org_apache_subversion_javahl_StatusKind_modified;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "modified");
 
     case svn_wc_status_merged:
-      return org_apache_subversion_javahl_StatusKind_merged;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "merged");
 
     case svn_wc_status_conflicted:
-      return org_apache_subversion_javahl_StatusKind_conflicted;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "conflicted");
 
     case svn_wc_status_ignored:
-      return org_apache_subversion_javahl_StatusKind_ignored;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "ignored");
 
     case svn_wc_status_obstructed:
-      return org_apache_subversion_javahl_StatusKind_obstructed;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "obstructed");
 
     case svn_wc_status_external:
-      return org_apache_subversion_javahl_StatusKind_external;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "external");
 
     case svn_wc_status_incomplete:
-      return org_apache_subversion_javahl_StatusKind_incomplete;
+      return mapEnum(JAVA_PACKAGE"/Status$Kind", "incomplete");
     }
 }
 

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h?rev=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h Wed Mar 17 16:53:10 2010
@@ -51,7 +51,7 @@ class EnumMapper
   static jobject mapNotifyAction(svn_wc_notify_action_t action);
   static jint mapNodeKind(svn_node_kind_t nodeKind);
   static jint mapNotifyLockState(svn_wc_notify_lock_state_t state);
-  static jint mapStatusKind(svn_wc_status_kind svnKind);
+  static jobject mapStatusKind(svn_wc_status_kind svnKind);
   static jint mapScheduleKind(svn_wc_schedule_t schedule);
   static jint mapConflictKind(svn_wc_conflict_kind_t kind);
   static jint mapConflictAction(svn_wc_conflict_action_t action);

Modified: subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp?rev=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/SVNClient.cpp Wed Mar 17 16:53:10 2010
@@ -64,7 +64,6 @@
 #include "svn_private_config.h"
 #include "../include/org_apache_subversion_javahl_Revision.h"
 #include "../include/org_apache_subversion_javahl_NodeKind.h"
-#include "../include/org_apache_subversion_javahl_StatusKind.h"
 #include "JNIStringHolder.h"
 #include <vector>
 #include <iostream>

Modified: subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp?rev=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StatusCallback.cpp Wed Mar 17 16:53:10 2010
@@ -31,7 +31,6 @@
 #include "svn_time.h"
 #include "../include/org_apache_subversion_javahl_NodeKind.h"
 #include "../include/org_apache_subversion_javahl_Revision.h"
-#include "../include/org_apache_subversion_javahl_StatusKind.h"
 
 /**
  * Create a StatusCallback object
@@ -119,8 +118,12 @@ StatusCallback::createJavaStatus(const c
     {
       mid = env->GetMethodID(clazz, "<init>",
                              "(Ljava/lang/String;Ljava/lang/String;"
-                             "IJJJLjava/lang/String;IIIIZZZ"
-                             "L"JAVA_PACKAGE"/ConflictDescriptor;"
+                             "IJJJLjava/lang/String;"
+                             "L"JAVA_PACKAGE"/Status$Kind;"
+                             "L"JAVA_PACKAGE"/Status$Kind;"
+                             "L"JAVA_PACKAGE"/Status$Kind;"
+                             "L"JAVA_PACKAGE"/Status$Kind;"
+                             "ZZZL"JAVA_PACKAGE"/ConflictDescriptor;"
                              "Ljava/lang/String;Ljava/lang/String;"
                              "Ljava/lang/String;Ljava/lang/String;"
                              "JZZLjava/lang/String;Ljava/lang/String;"
@@ -141,10 +144,10 @@ StatusCallback::createJavaStatus(const c
     org_apache_subversion_javahl_Revision_SVN_INVALID_REVNUM;
   jlong jLastChangedDate = 0;
   jstring jLastCommitAuthor = NULL;
-  jint jTextType = org_apache_subversion_javahl_StatusKind_none;
-  jint jPropType = org_apache_subversion_javahl_StatusKind_none;
-  jint jRepositoryTextType = org_apache_subversion_javahl_StatusKind_none;
-  jint jRepositoryPropType = org_apache_subversion_javahl_StatusKind_none;
+  jobject jTextType = NULL;
+  jobject jPropType = NULL;
+  jobject jRepositoryTextType = NULL;
+  jobject jRepositoryPropType = NULL;
   jboolean jIsLocked = JNI_FALSE;
   jboolean jIsCopied = JNI_FALSE;
   jboolean jIsSwitched = JNI_FALSE;
@@ -280,6 +283,34 @@ StatusCallback::createJavaStatus(const c
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;
 
+  if (jTextType != NULL)
+    {
+      env->DeleteLocalRef(jTextType);
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  if (jPropType != NULL)
+    {
+      env->DeleteLocalRef(jPropType);
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  if (jRepositoryTextType != NULL)
+    {
+      env->DeleteLocalRef(jRepositoryTextType);
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  if (jRepositoryPropType != NULL)
+    {
+      env->DeleteLocalRef(jRepositoryPropType);
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
   env->DeleteLocalRef(jConflictNew);
   if (JNIUtil::isJavaExceptionThrown())
     return NULL;

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Status.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Status.java?rev=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Status.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/Status.java Wed Mar 17 16:53:10 2010
@@ -81,12 +81,12 @@ public class Status implements java.io.S
     /**
      * the file or directory status (See StatusKind)
      */
-    private int textStatus;
+    private Kind textStatus;
 
     /**
      * the status of the properties (See StatusKind)
      */
-    private int propStatus;
+    private Kind propStatus;
 
     /**
      * flag is this item is locked locally by subversion
@@ -124,12 +124,12 @@ public class Status implements java.io.S
     /**
      * the file or directory status of base (See StatusKind)
      */
-    private int repositoryTextStatus;
+    private Kind repositoryTextStatus;
 
     /**
      * the status of the properties base (See StatusKind)
      */
-    private int repositoryPropStatus;
+    private Kind repositoryPropStatus;
 
     /**
      * if there is a conflict, the filename of the new version
@@ -271,8 +271,8 @@ public class Status implements java.io.S
      */
     public Status(String path, String url, int nodeKind, long revision,
                   long lastChangedRevision, long lastChangedDate,
-                  String lastCommitAuthor, int textStatus, int propStatus,
-                  int repositoryTextStatus, int repositoryPropStatus,
+                  String lastCommitAuthor, Kind textStatus, Kind propStatus,
+                  Kind repositoryTextStatus, Kind repositoryPropStatus,
                   boolean locked, boolean copied, boolean treeConflicted,
                   ConflictDescriptor conflictDescriptor, String conflictOld,
                   String conflictNew, String conflictWorking,
@@ -378,7 +378,7 @@ public class Status implements java.io.S
      * Returns the status of the item (See StatusKind)
      * @return file status property enum of the "textual" component.
      */
-    public int getTextStatus()
+    public Kind getTextStatus()
     {
         return textStatus;
     }
@@ -389,14 +389,14 @@ public class Status implements java.io.S
      */
     public String getTextStatusDescription()
     {
-        return Kind.getDescription(textStatus);
+        return textStatus.toString();
     }
 
     /**
      * Returns the status of the properties (See Status Kind)
      * @return file status property enum of the "property" component.
      */
-    public int getPropStatus()
+    public Kind getPropStatus()
     {
         return propStatus;
     }
@@ -407,7 +407,7 @@ public class Status implements java.io.S
      */
     public String getPropStatusDescription()
     {
-        return Kind.getDescription(propStatus);
+        return propStatus.toString();
     }
 
     /**
@@ -415,7 +415,7 @@ public class Status implements java.io.S
      * @return file status property enum of the "textual" component in the
      * repository.
      */
-    public int getRepositoryTextStatus()
+    public Kind getRepositoryTextStatus()
     {
         return repositoryTextStatus;
     }
@@ -425,7 +425,7 @@ public class Status implements java.io.S
      * @return file status property enum of the "property" component im the
      * repository.
      */
-    public int getRepositoryPropStatus()
+    public Kind getRepositoryPropStatus()
     {
         return repositoryPropStatus;
     }
@@ -570,7 +570,7 @@ public class Status implements java.io.S
      */
     public boolean isManaged()
     {
-        int status = getTextStatus();
+        Kind status = getTextStatus();
         return (status != Status.Kind.unversioned &&
                 status != Status.Kind.none &&
                 status != Status.Kind.ignored);
@@ -781,61 +781,79 @@ public class Status implements java.io.S
     }
 
     /**
+     * Converts microseconds since the epoch to a Date object.
+     *
+     * @param micros Microseconds since the epoch.
+     * @return A Date object, or <code>null</code> if
+     * <code>micros</code> was zero.
+     */
+    private static Date microsecondsToDate(long micros)
+    {
+        return (micros == 0 ? null : new Date(micros / 1000));
+    }
+
+    /**
      * class for kind status of the item or its properties
      * the constants are defined in the interface StatusKind for building
      * reasons
      */
-    public static final class Kind implements StatusKind
+    public enum Kind
     {
+        /** does not exist */
+        none        ("non-svn"),
+
+        /** exists, but uninteresting */
+        normal      ("normal"),
+
+        /** text or props have been modified */
+        modified    ("modified"),
+
+        /** is scheduled for additon */
+        added       ("added"),
+
+        /** scheduled for deletion */
+        deleted     ("deleted"),
+
+        /** is not a versioned thing in this wc */
+        unversioned ("unversioned"),
+
+        /** under v.c., but is missing */
+        missing     ("missing"),
+
+        /** was deleted and then re-added */
+        replaced    ("replaced"),
+
+        /** local mods received repos mods */
+        merged      ("merged"),
+
+        /** local mods received conflicting repos mods */
+        conflicted  ("conflicted"),
+
+        /** an unversioned resource is in the way of the versioned resource */
+        obstructed  ("obstructed"),
+
+        /** a resource marked as ignored */
+        ignored     ("ignored"),
+
+        /** a directory doesn't contain a complete entries list */
+        incomplete  ("incomplete"),
+
+        /** an unversioned path populated by an svn:externals property */
+        external    ("external");
+
         /**
-         * Returns the textual representation of the status
-         * @param kind of status
-         * @return english status
+         * The description of the action.
          */
-        public static final String getDescription(int kind)
+        private String description;
+
+        Kind(String description)
         {
-            switch (kind)
-            {
-            case StatusKind.none:
-                return "non-svn";
-            case StatusKind.normal:
-                return "normal";
-            case StatusKind.added:
-                return "added";
-            case StatusKind.missing:
-                return "missing";
-            case StatusKind.deleted:
-                return "deleted";
-            case StatusKind.replaced:
-                return "replaced";
-            case StatusKind.modified:
-                return "modified";
-            case StatusKind.merged:
-                return "merged";
-            case StatusKind.conflicted:
-                return "conflicted";
-            case StatusKind.ignored:
-                return "ignored";
-            case StatusKind.incomplete:
-                return "incomplete";
-            case StatusKind.external:
-                return "external";
-            case StatusKind.unversioned:
-            default:
-                return "unversioned";
-            }
+            this.description = description;
         }
-    }
 
-    /**
-     * Converts microseconds since the epoch to a Date object.
-     *
-     * @param micros Microseconds since the epoch.
-     * @return A Date object, or <code>null</code> if
-     * <code>micros</code> was zero.
-     */
-    private static Date microsecondsToDate(long micros)
-    {
-        return (micros == 0 ? null : new Date(micros / 1000));
+        public String toString()
+        {
+            return description;
+        }
     }
 }

Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java?rev=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java Wed Mar 17 16:53:10 2010
@@ -326,9 +326,14 @@ public class Status implements java.io.S
              aStatus.getRevisionNumber(),
              aStatus.getLastChangedRevisionNumber(),
              aStatus.getLastChangedDateMicros(), aStatus.getLastCommitAuthor(),
-             aStatus.getTextStatus(), aStatus.getPropStatus(),
-             aStatus.getRepositoryTextStatus(),
-             aStatus.getRepositoryPropStatus(),
+             aStatus.getTextStatus() == null ? StatusKind.none
+                : aStatus.getTextStatus().ordinal(),
+             aStatus.getPropStatus() == null ? StatusKind.none
+                : aStatus.getPropStatus().ordinal(),
+             aStatus.getRepositoryTextStatus() == null ? StatusKind.none
+                : aStatus.getRepositoryTextStatus().ordinal(),
+             aStatus.getRepositoryPropStatus() == null ? StatusKind.none
+                : aStatus.getRepositoryPropStatus().ordinal(),
              aStatus.isLocked(), aStatus.isCopied(), aStatus.hasTreeConflict(),
              aStatus.getConflictDescriptor() == null ? null
                 : new ConflictDescriptor(aStatus.getConflictDescriptor()),

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=924366&r1=924365&r2=924366&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 16:53:10 2010
@@ -3228,8 +3228,8 @@ public class BasicTests extends SVNTests
         // we expect the tree conflict to turn the existing item into
         // a scheduled-add with history.  We expect the modifications in
         // the local file to have been copied to the new file.
-        tcTest.getWc().setItemTextStatus("A/B/E/alpha", StatusKind.added);
-        tcTest.getWc().setItemTextStatus("A/B/F/alpha", StatusKind.modified);
+        tcTest.getWc().setItemTextStatus("A/B/E/alpha", Status.Kind.added);
+        tcTest.getWc().setItemTextStatus("A/B/F/alpha", Status.Kind.modified);
 
         // check the status of the working copy of the tc test
         tcTest.checkStatus();
@@ -3310,8 +3310,8 @@ public class BasicTests extends SVNTests
         Status[] secondWCStatus = statusCallback.getStatusArray();
         if (!(secondWCStatus.length == 1 &&
             secondWCStatus[0].getPath().endsWith("A/B/lambda") &&
-            secondWCStatus[0].getTextStatus() == StatusKind.modified &&
-            secondWCStatus[0].getPropStatus() == StatusKind.none))
+            secondWCStatus[0].getTextStatus() == Status.Kind.modified &&
+            secondWCStatus[0].getPropStatus() == Status.Kind.none))
         {
             fail("Unexpected WC status after co with " +
                  "unversioned obstructions");

Modified: subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java?rev=924366&r1=924365&r2=924366&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java (original)
+++ subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java Wed Mar 17 16:53:10 2010
@@ -109,9 +109,9 @@ public class WC
      * @param path      the path, where the status is set
      * @param status    the new text status
      */
-    public void setItemTextStatus(String path, int status)
+    public void setItemTextStatus(String path, Status.Kind status)
     {
-        ((Item) items.get(path)).textStatus = status;
+        items.get(path).textStatus = status;
     }
 
     /**
@@ -119,9 +119,9 @@ public class WC
      * @param path      the path, where the status is set
      * @param status    the new property status
      */
-    public void setItemPropStatus(String path, int status)
+    public void setItemPropStatus(String path, Status.Kind status)
     {
-        ((Item) items.get(path)).propStatus = status;
+        items.get(path).propStatus = status;
     }
 
     /**
@@ -553,12 +553,12 @@ public class WC
         /**
          * the text (content) status of the item
          */
-        int textStatus = Status.Kind.normal;
+        Status.Kind textStatus = Status.Kind.normal;
 
         /**
          * the property status of the item.
          */
-        int propStatus = Status.Kind.none;
+        Status.Kind propStatus = Status.Kind.none;
 
         /**
          * the expected revision number. -1 means do not check.