+%}
+
+%wrapper %{
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_getAction(JNIEnv *env, jclass cls, jlong jarg1) {
+ Action * action = (Action *)jarg1;
+ jobject res;
+ CpuAction *cpu_action = dynamic_cast<CpuAction*>(action);
+ if (cpu_action) {
+ SwigDirector_CpuAction *dir_cpu_action = dynamic_cast<SwigDirector_CpuAction*>(cpu_action);
+ if (dir_cpu_action) {
+ res = dir_cpu_action->swig_get_self(env);\
+ } else {
+ jclass clss = env->FindClass("org/simgrid/surf/CpuAction");\
+ jmethodID constru = env->GetMethodID(clss, "<init>", "()V");\
+ res = env->NewObject(clss, constru);\
+ res = env->NewGlobalRef(res);\
+ }
+ } else {
+ jclass clss = env->FindClass("org/simgrid/surf/Action");\
+ jmethodID constru = env->GetMethodID(clss, "<init>", "()V");\
+ res = env->NewObject(clss, constru);\
+ res = env->NewGlobalRef(res);\
+ }
+ return res;
+}
+
+#define GETDIRECTOR(NAME) \
+JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_get## NAME ## Director(JNIEnv *env, jclass cls, jlong jarg1)\
+{\
+ NAME * arg1 = (NAME*)jarg1;\
+ SwigDirector_ ##NAME *director = dynamic_cast<SwigDirector_ ##NAME *>(arg1);\
+ jobject res;\
+ if (director) {\
+ res = director->swig_get_self(env);\
+ } else {\
+ jclass clss = env->FindClass("org/simgrid/surf/NAME");\
+ jmethodID constru = env->GetMethodID(clss, "<init>", "()V");\
+ res = env->NewObject(clss, constru);\
+ res = env->NewGlobalRef(res);\
+ }\
+ return res;\
+}
+
+GETDIRECTOR(CpuModel)
+GETDIRECTOR(Cpu)
+GETDIRECTOR(CpuAction)
+
+#ifdef __cplusplus
+}
+#endif