changeset 724:11fd16e1d8b3

* Initial code for status call (populating Status) * Storing adb handle within Java object
author mas01mj
date Wed, 14 Jul 2010 17:21:24 +0000
parents ca11b72f92b6
children 7e1fa27b67ee
files bindings/java/ext/libAudioDB_JNI.c bindings/java/lib/lombok.jar bindings/java/src/org/omras2/AudioDB.java bindings/java/src/org/omras2/Status.java
diffstat 4 files changed, 74 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/bindings/java/ext/libAudioDB_JNI.c	Wed Jul 14 16:02:00 2010 +0000
+++ b/bindings/java/ext/libAudioDB_JNI.c	Wed Jul 14 17:21:24 2010 +0000
@@ -2,7 +2,7 @@
 #include "org_omras2_AudioDB_Mode.h"
 #include <jni.h>
 #include "audioDB_API.h"
-
+#include <stdlib.h>
 
 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1create (JNIEnv *env, jobject obj, jstring path, jint datasize, jint ntracks, jint datadim)
 {
@@ -16,7 +16,14 @@
 	handle = audiodb_create(str, datasize, ntracks, datadim);
 	if(!handle)
 		return JNI_FALSE;
-
+	
+	jclass adbClass = (*env)->GetObjectClass(env, obj);
+	jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J");
+	if(fid == NULL) {
+		return;
+	}
+	(*env)->SetLongField(env, obj, fid, (long)handle);
+	(*env)->DeleteLocalRef(env, adbClass);
 	(*env)->ReleaseStringUTFChars(env, path, str);
 	return JNI_TRUE;
 }
@@ -39,7 +46,45 @@
 {
 }
 
-JNIEXPORT void JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj)
+JNIEXPORT jobject JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj)
 {
+
+	// Fetch the adb pointer
+
+	adb_t *handle;
+	
+	jclass adbClass = (*env)->GetObjectClass(env, obj);
+	jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J");
+	if(fid == NULL) {
+		return;
+	}
+	
+	handle = (adb_t*)((*env)->GetLongField(env, obj, fid)); 
+	(*env)->DeleteLocalRef(env, adbClass);
+	
+	adb_status_t *status;
+	status = (adb_status_t *)malloc(sizeof(adb_status_t));
+	int flags = audiodb_status(handle, status);	
+	
+	jclass statusClass = (*env)->FindClass(env, "org/omras2/Status");
+	if(statusClass == NULL) {
+		return NULL;
+	}	
+	jmethodID cid = (*env)->GetMethodID(env, statusClass, "<init>", "()V");
+	if(cid == NULL) {
+		return NULL;
+	}
+
+	jobject result = (*env)->NewObject(env, statusClass, cid);
+
+	fid = (*env)->GetFieldID(env, statusClass, "numFiles", "I");
+	if(fid == NULL) {
+		return;
+	}
+	(*env)->SetIntField(env, result, fid, status->numFiles);
+
+	(*env)->DeleteLocalRef(env, statusClass);
+
+	return result;
 }
 
Binary file bindings/java/lib/lombok.jar has changed
--- a/bindings/java/src/org/omras2/AudioDB.java	Wed Jul 14 16:02:00 2010 +0000
+++ b/bindings/java/src/org/omras2/AudioDB.java	Wed Jul 14 17:21:24 2010 +0000
@@ -6,15 +6,15 @@
 {
 	public native boolean audiodb_create(String path, int datasize, int ntracks, int datadim);
 	public native boolean audiodb_open(String path, Mode mode);
-	public native void audiodb_status();
+	public native Status audiodb_status();
 
-	public native void insert();
-	public native void query();
-	public native void status();
+//	public native void insert();
+//	public native void query();
 
 	public enum Mode { O_RDONLY, O_RDRW }
 
 	private File path;
+	private long adbHandle;
 
 	public AudioDB(File path)
 	{
@@ -31,9 +31,9 @@
 		return audiodb_open(path.toString(), mode);
 	}
 
-	public void getStatus() 
+	public Status getStatus() 
 	{
-		audiodb_status();
+		return audiodb_status();
 	}
 
 	static {
@@ -45,8 +45,9 @@
 	{
 		AudioDB testDB = new AudioDB(new File("test.adb"));
 		testDB.create(5, 5, 12);
-		testDB.open(Mode.O_RDRW);
-//		testDB.getStatus();
+//		testDB.open(Mode.O_RDRW);
+		Status status = testDB.getStatus();
+		System.out.println("Num files: "+status.getNumFiles());
 	}
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bindings/java/src/org/omras2/Status.java	Wed Jul 14 17:21:24 2010 +0000
@@ -0,0 +1,17 @@
+package org.omras2;
+import lombok.Getter;
+import lombok.Setter;
+
+public class Status
+{
+	@Getter @Setter private int numFiles;
+	@Getter @Setter private int dims;
+	@Getter @Setter private int dudCount;
+	@Getter @Setter private int nullCount;
+	@Getter @Setter private int length;
+	@Getter @Setter private int dataRegionSize;
+	@Getter @Setter private boolean isL2Normed;
+	@Getter @Setter private boolean hasPower;
+	@Getter @Setter private boolean hasTimes;
+	@Getter @Setter private boolean hasRefs;
+}