You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/04/18 13:25:48 UTC

svn commit: r766301 - in /commons/sandbox/runtime/trunk/src: main/native/include/acr_clazz.h main/native/include/acr_types.h main/native/shared/clazz.c main/native/test/testcase.c test/org/apache/commons/runtime/TestPrivate.java

Author: mturk
Date: Sat Apr 18 11:25:48 2009
New Revision: 766301

URL: http://svn.apache.org/viewvc?rev=766301&view=rev
Log:
Add java.io.File creation support

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
    commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
    commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h?rev=766301&r1=766300&r2=766301&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h Sat Apr 18 11:25:48 2009
@@ -79,6 +79,14 @@
  */
 ACR_DECLARE(void) ACR_UnloadClass(JNIEnv *env, JAVA_C_ID *clazz);
 
+/**
+ * Crete new java.io.File object.
+ * @param env Current JNI environment.
+ * @param pathname Pathname used to construct File object.
+ */
+ACR_DECLARE(jobject) ACR_NewCoreFileObjectU(JNIEnv *_E,
+                                            const char *pathname);
+
 #ifdef __cplusplus
 }
 #endif

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h?rev=766301&r1=766300&r2=766301&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h Sat Apr 18 11:25:48 2009
@@ -66,6 +66,7 @@
     ACR_CC_OBJECT,  /* Ljava/lang/Object;   - String          */
     ACR_CC_STRING,  /* Ljava/lang/String;   - Object          */
     ACR_CC_DBBUFF,  /* Ljava/nio/ByteBuffer - ByteBuffer      */
+    ACR_CC_IOFILE,  /* Ljava/io/File        - File            */
     ACR_CC_ZARRAY,  /* [Z                   - boolean[]       */
     ACR_CC_BARRAY,  /* [B                   - byte[]          */
     ACR_CC_CARRAY,  /* [C                   - char[]          */

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c?rev=766301&r1=766300&r2=766301&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c Sat Apr 18 11:25:48 2009
@@ -35,6 +35,7 @@
     { "Ljava/lang/Object;",     NULL },
     { "Ljava/lang/String;",     NULL },
     { "Ljava/nio/ByteBuffer;",  NULL },
+    { "Ljava/io/File;",         NULL },
     { "[Z",                     NULL },
     { "[B",                     NULL },
     { "[C",                     NULL },
@@ -62,6 +63,18 @@
     return ACR_SUCCESS;
 }
 
+static jmethodID    fo_cc_init;
+
+static ACR_INLINE jmethodID init_constructor(JNIEnv *_E, jclass c, const char *sig)
+{
+    jmethodID m = (*_E)->GetMethodID(_E, c, "<init>", sig);
+
+    if (m == NULL || (*_E)->ExceptionCheck(_E))
+        return NULL;
+    else
+        return m;
+}
+
 int ACR_InitCoreClasses(JNIEnv *_E)
 {
     int i = 0;
@@ -92,7 +105,8 @@
         }
         i++;
     }
-
+    fo_cc_init = init_constructor(_E, core_classes[ACR_CC_IOFILE].clazz,
+                                  "(Ljava/lang/String;)V");
     return ACR_SUCCESS;
 }
 
@@ -173,6 +187,14 @@
         return NULL;
 }
 
+ACR_DECLARE(jobject) ACR_NewCoreFileObjectU(JNIEnv *_E,
+                                            const char *pathname)
+{
+    jstring p = (*_E)->NewStringUTF(_E, pathname);
+    return (*_E)->NewObject(_E, core_classes[ACR_CC_IOFILE].clazz,
+                            fo_cc_init, p);
+}
+
 ACR_DECLARE(int) ACR_LoadClass(JNIEnv *_E, JAVA_C_ID *clazz, int init_array)
 {
     int rv = ACR_SUCCESS;

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=766301&r1=766300&r2=766301&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Sat Apr 18 11:25:48 2009
@@ -299,3 +299,8 @@
 {
     RETURN_JWSTR(L"Hello world");
 }
+
+ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test029)(ACR_JNISTDARGS, int d)
+{
+    return ACR_NewCoreFileObjectU(_E, "/tmp/foo");
+}

Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java?rev=766301&r1=766300&r2=766301&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java Sat Apr 18 11:25:48 2009
@@ -19,6 +19,7 @@
 import java.lang.System;
 import java.util.Properties;
 import java.nio.ByteBuffer;
+import java.io.File;
 import junit.framework.*;
 
 /**
@@ -73,6 +74,7 @@
     private static native Descriptor[] test027(int size);
 
     private static native String test028(int d);
+    private static native File   test029(int d);
 
 
     protected void setUp()
@@ -529,4 +531,13 @@
         String s = test028(0);
         assertEquals("Equals", "Hello world", s);
     }
+
+    public void testIoFile()
+        throws Throwable
+    {
+        File f = test029(0);
+        assertEquals("Pathname", "/tmp/foo", f.getPath());
+        assertEquals("Name", "foo", f.getName());
+    }
+
 }