Xcos MVC: let LoggerView log the object kind. 51/15451/5
Clément DAVID [Fri, 31 Oct 2014 13:18:19 +0000 (14:18 +0100)]
Change-Id: Id10f7a0ac3b4d33677993078b1e94847ea44da9e

19 files changed:
scilab/modules/scicos/includes/View.hxx
scilab/modules/scicos/includes/utilities.hxx
scilab/modules/scicos/src/cpp/Controller.cpp
scilab/modules/scicos/src/cpp/LoggerView.cpp
scilab/modules/scicos/src/cpp/LoggerView.hxx
scilab/modules/xcos/src/java/org/scilab/modules/xcos/Controller.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/JavaController.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/JavaControllerJNI.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/Kind.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/ObjectProperties.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/UpdateStatus.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/VectorOfBool.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/VectorOfDouble.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/VectorOfInt.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/VectorOfScicosID.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/VectorOfString.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/View.java
scilab/modules/xcos/src/jni/JavaController_wrap.cxx
scilab/modules/xcos/src/jni/JavaController_wrap.h

index 0ce40b5..eea0dc7 100644 (file)
@@ -27,7 +27,7 @@ public:
     virtual ~View() {};
 
     virtual void objectCreated(const ScicosID& uid, kind_t k) = 0;
-    virtual void objectDeleted(const ScicosID& uid) = 0;
+    virtual void objectDeleted(const ScicosID& uid, kind_t k) = 0;
     virtual void objectUpdated(const ScicosID& uid, kind_t k) = 0;
     virtual void propertyUpdated(const ScicosID& uid, kind_t k, object_properties_t p) = 0;
     virtual void propertyUpdated(const ScicosID& uid, kind_t k, object_properties_t p, update_status_t u)
index d1188ad..1f8d25a 100644 (file)
@@ -109,7 +109,7 @@ enum object_properties_t
     PROPERTIES,         //!< model::Diagram::tol & tf values
     DIAGRAM_CONTEXT,    //!< model::Diagram::context value
     VERSION_NUMBER,     //!< model::Diagram::version value
-    MAX_OBJECT_PROPERTIES = VERSION_NUMBER //!< last valid value of the object_properties_t enum
+    MAX_OBJECT_PROPERTIES //!< last valid value of the object_properties_t enum
 };
 
 #endif /* UTILITIES_HXX_ */
index 5de7ff0..20ec9b4 100644 (file)
@@ -184,7 +184,7 @@ void Controller::deleteObject(ScicosID uid)
 
     for (view_set_t::iterator iter = _instance->allViews.begin(); iter != _instance->allViews.end(); ++iter)
     {
-        (*iter)->objectDeleted(uid);
+        (*iter)->objectDeleted(uid, k);
     }
 }
 
index 8f2b546..bb3f650 100644 (file)
@@ -266,11 +266,11 @@ void LoggerView::objectCreated(const ScicosID& uid, kind_t k)
     }
 }
 
-void LoggerView::objectDeleted(const ScicosID& uid)
+void LoggerView::objectDeleted(const ScicosID& uid, kind_t k)
 {
     std::stringstream ss;
 
-    ss << __FUNCTION__ << "( " << uid << " )" << std::endl;
+    ss << __FUNCTION__ << "( " << uid << " , " << k << " )" << std::endl;
 
     if (USE_SCILAB_WRITE)
     {
index a5cb226..a9f9686 100644 (file)
@@ -25,7 +25,7 @@ public:
     ~LoggerView();
 
     void objectCreated(const ScicosID& uid, kind_t k);
-    void objectDeleted(const ScicosID& uid);
+    void objectDeleted(const ScicosID& uid, kind_t k);
     void objectUpdated(const ScicosID& uid, kind_t k);
     void propertyUpdated(const ScicosID& uid, kind_t k, object_properties_t p);
     void propertyUpdated(const ScicosID& uid, kind_t k, object_properties_t p, update_status_t u);
index 4962f5d..f737197 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 23bbeb4..1dc501d 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 3074df6..704e389 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
@@ -12,7 +12,7 @@ public class JavaControllerJNI {
     public final static native long new_View();
     public final static native void delete_View(long jarg1);
     public final static native void View_objectCreated(long jarg1, View jarg1_, long jarg2, int jarg3);
-    public final static native void View_objectDeleted(long jarg1, View jarg1_, long jarg2);
+    public final static native void View_objectDeleted(long jarg1, View jarg1_, long jarg2, int jarg3);
     public final static native void View_objectUpdated(long jarg1, View jarg1_, long jarg2, int jarg3);
     public final static native void View_propertyUpdated__SWIG_0(long jarg1, View jarg1_, long jarg2, int jarg3, int jarg4);
     public final static native void View_propertyUpdated__SWIG_1(long jarg1, View jarg1_, long jarg2, int jarg3, int jarg4, int jarg5);
@@ -120,8 +120,8 @@ public class JavaControllerJNI {
     public static void SwigDirector_View_objectCreated(View self, long uid, int k) {
         self.objectCreated(uid, Kind.class.getEnumConstants()[k]);
     }
-    public static void SwigDirector_View_objectDeleted(View self, long uid) {
-        self.objectDeleted(uid);
+    public static void SwigDirector_View_objectDeleted(View self, long uid, int k) {
+        self.objectDeleted(uid, Kind.class.getEnumConstants()[k]);
     }
     public static void SwigDirector_View_objectUpdated(View self, long uid, int k) {
         self.objectUpdated(uid, Kind.class.getEnumConstants()[k]);
index c623a75..ffdce78 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index ca73a9d..2dbb9c9 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index fdc2564..eef2207 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 63c90d7..a813818 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 557611e..2478854 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 0ff7e37..c77f909 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index d585ebe..4b4e421 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 690727a..038416e 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 58bef5d..0aa8725 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
@@ -59,8 +59,8 @@ public class View {
         JavaControllerJNI.View_objectCreated(swigCPtr, this, uid, k.ordinal());
     }
 
-    public void objectDeleted(long uid) {
-        JavaControllerJNI.View_objectDeleted(swigCPtr, this, uid);
+    public void objectDeleted(long uid, Kind k) {
+        JavaControllerJNI.View_objectDeleted(swigCPtr, this, uid, k.ordinal());
     }
 
     public void objectUpdated(long uid, Kind k) {
index 6a26f1a..9937c5b 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make
@@ -214,17 +214,18 @@ static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionC
 /* -----------------------------------------------------------------------------
  * director.swg
  *
- * This file contains support for director classes that proxy
- * method calls from C++ to Java extensions.
+ * This file contains support for director classes so that Java proxy
+ * methods can be called from C++.
  * ----------------------------------------------------------------------------- */
 
-#ifdef __cplusplus
-
-#if defined(DEBUG_DIRECTOR_OWNED)
+#if defined(DEBUG_DIRECTOR_OWNED) || defined(DEBUG_DIRECTOR_EXCEPTION)
 #include <iostream>
 #endif
 
+#include <exception>
+
 namespace Swig {
+
   /* Java object wrapper */
   class JObjectWrapper {
   public:
@@ -287,8 +288,7 @@ namespace Swig {
     }
 
     /* Java proxy releases ownership of C++ object, C++ object is now
-       responsible for destruction (creates NewGlobalRef to pin Java
-       proxy) */
+       responsible for destruction (creates NewGlobalRef to pin Java proxy) */
     void java_change_ownership(JNIEnv *jenv, jobject jself, bool take_or_release) {
       if (take_or_release) {  /* Java takes ownership of C++ object's lifetime. */
         if (!weak_global_) {
@@ -296,7 +296,8 @@ namespace Swig {
           jthis_ = jenv->NewWeakGlobalRef(jself);
           weak_global_ = true;
         }
-      } else { /* Java releases ownership of C++ object's lifetime */
+      } else {
+       /* Java releases ownership of C++ object's lifetime */
         if (weak_global_) {
           jenv->DeleteWeakGlobalRef((jweak)jthis_);
           jthis_ = jenv->NewGlobalRef(jself);
@@ -336,7 +337,7 @@ namespace Swig {
 #endif
         env_status = director_->swig_jvm_->GetEnv((void **)&jenv_, JNI_VERSION_1_2);
 #if defined(SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON)
-        // Attach a daemon thread to the JVM. Useful when the JVM should not wait for 
+        // Attach a daemon thread to the JVM. Useful when the JVM should not wait for
         // the thread to exit upon shutdown. Only for jdk-1.4 and later.
         director_->swig_jvm_->AttachCurrentThreadAsDaemon(jenv, NULL);
 #else
@@ -404,10 +405,195 @@ namespace Swig {
       swig_self_.java_change_ownership(jenv, jself, take_or_release);
     }
   };
-}
 
-#endif /* __cplusplus */
 
+  // Utility classes and functions for exception handling.
+
+  // Simple holder for a Java string during exception handling, providing access to a c-style string
+  class JavaString {
+  public:
+    JavaString(JNIEnv *jenv, jstring jstr) : jenv_(jenv), jstr_(jstr), cstr_(0) {
+      if (jenv_ && jstr_)
+       cstr_ = (const char *) jenv_->GetStringUTFChars(jstr_, NULL);
+    }
+
+    ~JavaString() {
+      if (jenv_ && jstr_ && cstr_)
+       jenv_->ReleaseStringUTFChars(jstr_, cstr_);
+    }
+
+    const char *c_str(const char *null_string = "null JavaString") const {
+      return cstr_ ? cstr_ : null_string;
+    }
+
+  private:
+    // non-copyable
+    JavaString(const JavaString &);
+    JavaString &operator=(const JavaString &);
+
+    JNIEnv *jenv_;
+    jstring jstr_;
+    const char *cstr_;
+  };
+
+  // Helper class to extract the exception message from a Java throwable
+  class JavaExceptionMessage {
+  public:
+    JavaExceptionMessage(JNIEnv *jenv, jthrowable throwable) : message_(jenv, exceptionMessageFromThrowable(jenv, throwable)) {
+    }
+
+    const char *message() const {
+      return message_.c_str("Could not get exception message in JavaExceptionMessage");
+    }
+
+  private:
+    // non-copyable
+    JavaExceptionMessage(const JavaExceptionMessage &);
+    JavaExceptionMessage &operator=(const JavaExceptionMessage &);
+
+    // Get exception message by calling Java method Throwable.getMessage()
+    static jstring exceptionMessageFromThrowable(JNIEnv *jenv, jthrowable throwable) {
+      jstring jmsg = NULL;
+      if (jenv && throwable) {
+       jenv->ExceptionClear(); // Cannot invoke methods with any pending exceptions
+       jclass throwclz = jenv->GetObjectClass(throwable);
+       if (throwclz) {
+         // All Throwable classes have a getMessage() method, so call it to extract the exception message
+         jmethodID getMessageMethodID = jenv->GetMethodID(throwclz, "getMessage", "()Ljava/lang/String;");
+         if (getMessageMethodID)
+           jmsg = (jstring)jenv->CallObjectMethod(throwable, getMessageMethodID);
+       }
+       if (jmsg == NULL && jenv->ExceptionCheck())
+         jenv->ExceptionClear();
+      }
+      return jmsg;
+    }
+
+    JavaString message_;
+  };
+
+  // C++ Exception class for handling Java exceptions thrown during a director method Java upcall
+  class DirectorException : public std::exception {
+  public:
+
+    // Construct exception from a Java throwable
+    DirectorException(JNIEnv *jenv, jthrowable throwable) : classname_(0), msg_(0) {
+
+      // Call Java method Object.getClass().getName() to obtain the throwable's class name (delimited by '/')
+      if (throwable) {
+       jclass throwclz = jenv->GetObjectClass(throwable);
+       if (throwclz) {
+         jclass clzclz = jenv->GetObjectClass(throwclz);
+         if (clzclz) {
+           jmethodID getNameMethodID = jenv->GetMethodID(clzclz, "getName", "()Ljava/lang/String;");
+           if (getNameMethodID) {
+             jstring jstr_classname = (jstring)(jenv->CallObjectMethod(throwclz, getNameMethodID));
+              // Copy strings, since there is no guarantee that jenv will be active when handled
+              if (jstr_classname) {
+                JavaString jsclassname(jenv, jstr_classname);
+                const char *classname = jsclassname.c_str(0);
+                if (classname)
+                  classname_ = copypath(classname);
+              }
+           }
+         }
+       }
+      }
+
+      JavaExceptionMessage exceptionmsg(jenv, throwable);
+      msg_ = copystr(exceptionmsg.message());
+    }
+
+    // More general constructor for handling as a java.lang.RuntimeException
+    DirectorException(const char *msg) : classname_(0), msg_(copystr(msg ? msg : "Unspecified DirectorException message")) {
+    }
+
+    ~DirectorException() throw() {
+      delete[] classname_;
+      delete[] msg_;
+    }
+
+    const char *what() const throw() {
+      return msg_;
+    }
+
+    // Reconstruct and raise/throw the Java Exception that caused the DirectorException
+    // Note that any error in the JNI exception handling results in a Java RuntimeException
+    void raiseJavaException(JNIEnv *jenv) const {
+      if (jenv) {
+       jenv->ExceptionClear();
+
+       jmethodID ctorMethodID = 0;
+       jclass throwableclass = 0;
+        if (classname_) {
+          throwableclass = jenv->FindClass(classname_);
+          if (throwableclass)
+            ctorMethodID = jenv->GetMethodID(throwableclass, "<init>", "(Ljava/lang/String;)V");
+       }
+
+       if (ctorMethodID) {
+         jenv->ThrowNew(throwableclass, what());
+       } else {
+         SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, what());
+       }
+      }
+    }
+
+  private:
+    static char *copypath(const char *srcmsg) {
+      char *target = copystr(srcmsg);
+      for (char *c=target; *c; ++c) {
+        if ('.' == *c)
+          *c = '/';
+      }
+      return target;
+    }
+
+    static char *copystr(const char *srcmsg) {
+      char *target = 0;
+      if (srcmsg) {
+       int msglen = strlen(srcmsg) + 1;
+       target = new char[msglen];
+       strncpy(target, srcmsg, msglen);
+      }
+      return target;
+    }
+
+    const char *classname_;
+    const char *msg_;
+  };
+
+  // Helper method to determine if a Java throwable matches a particular Java class type
+  bool ExceptionMatches(JNIEnv *jenv, jthrowable throwable, const char *classname) {
+    bool matches = false;
+
+    if (throwable && jenv && classname) {
+      // Exceptions need to be cleared for correct behavior.
+      // The caller of ExceptionMatches should restore pending exceptions if desired -
+      // the caller already has the throwable.
+      jenv->ExceptionClear();
+
+      jclass clz = jenv->FindClass(classname);
+      if (clz) {
+       jclass classclz = jenv->GetObjectClass(clz);
+       jmethodID isInstanceMethodID = jenv->GetMethodID(classclz, "isInstance", "(Ljava/lang/Object;)Z");
+       if (isInstanceMethodID) {
+         matches = jenv->CallBooleanMethod(clz, isInstanceMethodID, throwable) != 0;
+       }
+      }
+
+#if defined(DEBUG_DIRECTOR_EXCEPTION)
+      if (jenv->ExceptionCheck()) {
+        // Typically occurs when an invalid classname argument is passed resulting in a ClassNotFoundException
+        JavaExceptionMessage exc(jenv, jenv->ExceptionOccurred());
+        std::cout << "Error: ExceptionMatches: class '" << classname << "' : " << exc.message() << std::endl;
+      }
+#endif
+    }
+    return matches;
+  }
+
+}
 
 namespace Swig {
   namespace {
@@ -461,7 +647,7 @@ SWIGINTERN void std_vector_Sl_int_Sg__set(std::vector< int > *self,int i,std::ve
                 else
                     throw std::out_of_range("vector index out of range");
             }
-SWIGINTERN std::vector< bool >::const_reference std_vector_Sl_bool_Sg__get(std::vector< bool > *self,int i){
+SWIGINTERN bool std_vector_Sl_bool_Sg__get(std::vector< bool > *self,int i){
                 int size = int(self->size());
                 if (i>=0 && i<size)
                     return (*self)[i];
@@ -540,18 +726,24 @@ void SwigDirector_View::objectCreated(ScicosID const &uid, kind_t k) {
     juid = (jlong)uid;
     jk = (jint) k;
     jenv->CallStaticVoidMethod(Swig::jclass_JavaControllerJNI, Swig::director_methids[0], swigjobj, juid, jk);
-    if (jenv->ExceptionCheck() == JNI_TRUE) return ;
+    jthrowable swigerror = jenv->ExceptionOccurred();
+    if (swigerror) {
+      jenv->ExceptionClear();
+      throw Swig::DirectorException(jenv, swigerror);
+    }
+    
   } else {
-    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
+    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object in org_scilab_modules_scicos::View::objectCreated ");
   }
   if (swigjobj) jenv->DeleteLocalRef(swigjobj);
 }
 
-void SwigDirector_View::objectDeleted(ScicosID const &uid) {
+void SwigDirector_View::objectDeleted(ScicosID const &uid, kind_t k) {
   JNIEnvWrapper swigjnienv(this) ;
   JNIEnv * jenv = swigjnienv.getJNIEnv() ;
   jobject swigjobj = (jobject) NULL ;
   jlong juid = 0 ;
+  jint jk  ;
   
   if (!swig_override[1]) {
     SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method org_scilab_modules_scicos::View::objectDeleted.");
@@ -560,10 +752,16 @@ void SwigDirector_View::objectDeleted(ScicosID const &uid) {
   swigjobj = swig_get_self(jenv);
   if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) {
     juid = (jlong)uid;
-    jenv->CallStaticVoidMethod(Swig::jclass_JavaControllerJNI, Swig::director_methids[1], swigjobj, juid);
-    if (jenv->ExceptionCheck() == JNI_TRUE) return ;
+    jk = (jint) k;
+    jenv->CallStaticVoidMethod(Swig::jclass_JavaControllerJNI, Swig::director_methids[1], swigjobj, juid, jk);
+    jthrowable swigerror = jenv->ExceptionOccurred();
+    if (swigerror) {
+      jenv->ExceptionClear();
+      throw Swig::DirectorException(jenv, swigerror);
+    }
+    
   } else {
-    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
+    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object in org_scilab_modules_scicos::View::objectDeleted ");
   }
   if (swigjobj) jenv->DeleteLocalRef(swigjobj);
 }
@@ -584,9 +782,14 @@ void SwigDirector_View::objectUpdated(ScicosID const &uid, kind_t k) {
     juid = (jlong)uid;
     jk = (jint) k;
     jenv->CallStaticVoidMethod(Swig::jclass_JavaControllerJNI, Swig::director_methids[2], swigjobj, juid, jk);
-    if (jenv->ExceptionCheck() == JNI_TRUE) return ;
+    jthrowable swigerror = jenv->ExceptionOccurred();
+    if (swigerror) {
+      jenv->ExceptionClear();
+      throw Swig::DirectorException(jenv, swigerror);
+    }
+    
   } else {
-    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
+    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object in org_scilab_modules_scicos::View::objectUpdated ");
   }
   if (swigjobj) jenv->DeleteLocalRef(swigjobj);
 }
@@ -609,9 +812,14 @@ void SwigDirector_View::propertyUpdated(ScicosID const &uid, kind_t k, object_pr
     jk = (jint) k;
     jp = (jint) p;
     jenv->CallStaticVoidMethod(Swig::jclass_JavaControllerJNI, Swig::director_methids[3], swigjobj, juid, jk, jp);
-    if (jenv->ExceptionCheck() == JNI_TRUE) return ;
+    jthrowable swigerror = jenv->ExceptionOccurred();
+    if (swigerror) {
+      jenv->ExceptionClear();
+      throw Swig::DirectorException(jenv, swigerror);
+    }
+    
   } else {
-    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object");
+    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object in org_scilab_modules_scicos::View::propertyUpdated ");
   }
   if (swigjobj) jenv->DeleteLocalRef(swigjobj);
 }
@@ -626,7 +834,7 @@ void SwigDirector_View::swig_connect_director(JNIEnv *jenv, jobject jself, jclas
       "objectCreated", "(JLorg/scilab/modules/xcos/Kind;)V", NULL 
     },
     {
-      "objectDeleted", "(J)V", NULL 
+      "objectDeleted", "(JLorg/scilab/modules/xcos/Kind;)V", NULL 
     },
     {
       "objectUpdated", "(JLorg/scilab/modules/xcos/Kind;)V", NULL 
@@ -700,9 +908,10 @@ SWIGEXPORT void JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_View_1obj
 }
 
 
-SWIGEXPORT void JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_View_1objectDeleted(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) {
+SWIGEXPORT void JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_View_1objectDeleted(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jint jarg3) {
   org_scilab_modules_scicos::View *arg1 = (org_scilab_modules_scicos::View *) 0 ;
   ScicosID *arg2 = 0 ;
+  kind_t arg3 ;
   ScicosID temp2 ;
   
   (void)jenv;
@@ -711,7 +920,8 @@ SWIGEXPORT void JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_View_1obj
   arg1 = *(org_scilab_modules_scicos::View **)&jarg1; 
   temp2 = (ScicosID)jarg2; 
   arg2 = &temp2; 
-  (arg1)->objectDeleted((ScicosID const &)*arg2);
+  arg3 = (kind_t)jarg3; 
+  (arg1)->objectDeleted((ScicosID const &)*arg2,arg3);
 }
 
 
@@ -1823,7 +2033,7 @@ SWIGEXPORT jboolean JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_Vecto
   jboolean jresult = 0 ;
   std::vector< bool > *arg1 = (std::vector< bool > *) 0 ;
   int arg2 ;
-  std::vector< bool >::const_reference result;
+  bool result;
   
   (void)jenv;
   (void)jcls;
@@ -1831,7 +2041,7 @@ SWIGEXPORT jboolean JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_Vecto
   arg1 = *(std::vector< bool > **)&jarg1; 
   arg2 = (int)jarg2; 
   try {
-    result = (std::vector< bool >::const_reference)std_vector_Sl_bool_Sg__get(arg1,arg2);
+    result = (bool)std_vector_Sl_bool_Sg__get(arg1,arg2);
   }
   catch(std::out_of_range &_e) {
     SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, (&_e)->what());
@@ -2247,7 +2457,7 @@ SWIGEXPORT void JNICALL Java_org_scilab_modules_xcos_JavaControllerJNI_swig_1mod
       "SwigDirector_View_objectCreated", "(Lorg/scilab/modules/xcos/View;JI)V" 
     },
     {
-      "SwigDirector_View_objectDeleted", "(Lorg/scilab/modules/xcos/View;J)V" 
+      "SwigDirector_View_objectDeleted", "(Lorg/scilab/modules/xcos/View;JI)V" 
     },
     {
       "SwigDirector_View_objectUpdated", "(Lorg/scilab/modules/xcos/View;JI)V" 
index 5cddc90..dee3880 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 3.0.2
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make
@@ -19,7 +19,7 @@ public:
     SwigDirector_View(JNIEnv *jenv);
     virtual ~SwigDirector_View();
     virtual void objectCreated(ScicosID const &uid, kind_t k);
-    virtual void objectDeleted(ScicosID const &uid);
+    virtual void objectDeleted(ScicosID const &uid, kind_t k);
     virtual void objectUpdated(ScicosID const &uid, kind_t k);
     virtual void propertyUpdated(ScicosID const &uid, kind_t k, object_properties_t p);
 public: