1 /************************************************************************/
2 /* Stuff for progress callback */
3 /************************************************************************/
4
5 %header %{
6 typedef struct {
7 JNIEnv *jenv;
8 jobject pJavaCallback;
9 } JavaProgressData;
10 %}
11
12 %inline
13 %{
14 class ProgressCallback
15 {
16 public:
~ProgressCallback()17 virtual ~ProgressCallback() { }
run(double dfComplete,const char * pszMessage)18 virtual int run(double dfComplete, const char* pszMessage)
19 {
20 return 1;
21 }
22 };
23
24 class TermProgressCallback : public ProgressCallback
25 {
26 public:
TermProgressCallback()27 TermProgressCallback()
28 {
29 }
30
run(double dfComplete,const char * pszMessage)31 virtual int run(double dfComplete, const char* pszMessage)
32 {
33 return GDALTermProgress(dfComplete, pszMessage, NULL);
34 }
35 };
36 %}
37
38 %{
39 /************************************************************************/
40 /* JavaProgressProxy() */
41 /************************************************************************/
42
43 static int CPL_STDCALL
JavaProgressProxy(double dfComplete,const char * pszMessage,void * pData)44 JavaProgressProxy( double dfComplete, const char *pszMessage, void *pData )
45 {
46 JavaProgressData* psProgressInfo = (JavaProgressData*)pData;
47 JNIEnv *jenv = psProgressInfo->jenv;
48 int ret;
49 const jclass progressCallbackClass = jenv->FindClass("org/gdal/gdal/ProgressCallback");
50 const jmethodID runMethod = jenv->GetMethodID(progressCallbackClass, "run", "(DLjava/lang/String;)I");
51 jstring temp_string = jenv->NewStringUTF(pszMessage);
52 ret = jenv->CallIntMethod(psProgressInfo->pJavaCallback, runMethod, dfComplete, temp_string);
53 jenv->DeleteLocalRef(temp_string);
54 return ret;
55 }
56 %}
57
58 %typemap(arginit, noblock=1) ( GDALProgressFunc callback = NULL, void* callback_data=NULL)
59 {
60 JavaProgressData sProgressInfo;
61 sProgressInfo.jenv = jenv;
62 sProgressInfo.pJavaCallback = NULL;
63
64 }
65
66 %typemap(in) ( GDALProgressFunc callback = NULL, void* callback_data=NULL)
67 {
68 if ( $input != 0 ) {
69 sProgressInfo.pJavaCallback = $input;
70 $1 = JavaProgressProxy;
71 $2 = &sProgressInfo;
72 }
73 else
74 {
75 $1 = NULL;
76 $2 = NULL;
77 }
78 }
79
80
81 /* These 3 typemaps tell SWIG what JNI and Java types to use */
82 %typemap(jni) (GDALProgressFunc callback = NULL, void* callback_data=NULL) "jobject"
83 %typemap(jtype) (GDALProgressFunc callback = NULL, void* callback_data=NULL) "ProgressCallback"
84 %typemap(jstype) (GDALProgressFunc callback = NULL, void* callback_data=NULL) "ProgressCallback"
85 %typemap(javain) (GDALProgressFunc callback = NULL, void* callback_data=NULL) "$javainput"
86 %typemap(javaout) (GDALProgressFunc callback = NULL, void* callback_data=NULL) {
87 return $jnicall;
88 }
89