License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / action_binding / src / jni / Signal.cpp
1 #include "Signal.hxx"
2 /* Generated by GIWS (version 2.0.2) with command:
3 giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/Signal.giws.xml
4 */
5 /*
6
7 This is generated code.
8
9 This software is a computer program whose purpose is to hide the complexity
10 of accessing Java objects/methods from C++ code.
11
12 Copyright (C) 2012 - 2016 - Scilab Enterprises
13
14 This file is hereby licensed under the terms of the GNU GPL v2.0,
15 pursuant to article 5.3.4 of the CeCILL v.2.1.
16 This file was originally licensed under the terms of the CeCILL v2.1,
17 and continues to be available under such terms.
18 For more information, see the COPYING file which you should have received
19 along with this program.
20 */
21
22 namespace org_scilab_modules_action_binding_utils {
23
24                 // Static declarations (if any)
25                 
26 // Returns the current env
27
28 JNIEnv * Signal::getCurrentEnv() {
29 JNIEnv * curEnv = NULL;
30 jint res=this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
31 if (res != JNI_OK) {
32 throw GiwsException::JniException(getCurrentEnv());
33 }
34 return curEnv;
35 }
36 // Destructor
37
38 Signal::~Signal() {
39 JNIEnv * curEnv = NULL;
40 this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
41 curEnv->DeleteGlobalRef(this->instance);
42 curEnv->DeleteGlobalRef(this->instanceClass);
43 }
44 // Constructors
45 Signal::Signal(JavaVM * jvm_) {
46 jmethodID constructObject = NULL ;
47 jobject localInstance ;
48 jclass localClass ;
49
50 const std::string construct="<init>";
51 const std::string param="()V";
52 jvm=jvm_;
53
54 JNIEnv * curEnv = getCurrentEnv();
55
56 localClass = curEnv->FindClass( this->className().c_str() ) ;
57 if (localClass == NULL) {
58   throw GiwsException::JniClassNotFoundException(curEnv, this->className());
59 }
60
61 this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
62
63 /* localClass is not needed anymore */
64 curEnv->DeleteLocalRef(localClass);
65
66 if (this->instanceClass == NULL) {
67 throw GiwsException::JniObjectCreationException(curEnv, this->className());
68 }
69
70
71 constructObject = curEnv->GetMethodID( this->instanceClass, construct.c_str() , param.c_str() ) ;
72 if(constructObject == NULL){
73 throw GiwsException::JniObjectCreationException(curEnv, this->className());
74 }
75
76 localInstance = curEnv->NewObject( this->instanceClass, constructObject ) ;
77 if(localInstance == NULL){
78 throw GiwsException::JniObjectCreationException(curEnv, this->className());
79 }
80  
81 this->instance = curEnv->NewGlobalRef(localInstance) ;
82 if(this->instance == NULL){
83 throw GiwsException::JniObjectCreationException(curEnv, this->className());
84 }
85 /* localInstance not needed anymore */
86 curEnv->DeleteLocalRef(localInstance);
87
88                 /* Methods ID set to NULL */
89 voidnotifyjstringjava_lang_StringID=NULL;
90
91
92 }
93
94 Signal::Signal(JavaVM * jvm_, jobject JObj) {
95         jvm=jvm_;
96
97         JNIEnv * curEnv = getCurrentEnv();
98
99 jclass localClass = curEnv->GetObjectClass(JObj);
100         this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
101         curEnv->DeleteLocalRef(localClass);
102
103         if (this->instanceClass == NULL) {
104 throw GiwsException::JniObjectCreationException(curEnv, this->className());
105         }
106
107         this->instance = curEnv->NewGlobalRef(JObj) ;
108         if(this->instance == NULL){
109 throw GiwsException::JniObjectCreationException(curEnv, this->className());
110         }
111         /* Methods ID set to NULL */
112         voidnotifyjstringjava_lang_StringID=NULL;
113
114
115 }
116
117 // Generic methods
118
119 void Signal::synchronize() {
120 if (getCurrentEnv()->MonitorEnter(instance) != JNI_OK) {
121 throw GiwsException::JniMonitorException(getCurrentEnv(), "Signal");
122 }
123 }
124
125 void Signal::endSynchronize() {
126 if ( getCurrentEnv()->MonitorExit(instance) != JNI_OK) {
127 throw GiwsException::JniMonitorException(getCurrentEnv(), "Signal");
128 }
129 }
130 // Method(s)
131
132 void Signal::notify (JavaVM * jvm_, char const* ID){
133
134 JNIEnv * curEnv = NULL;
135 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
136 jclass cls = initClass(curEnv);
137 if ( cls == NULL) {
138 throw GiwsException::JniCallMethodException(curEnv);
139 }
140
141 static jmethodID voidnotifyjstringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "notify", "(Ljava/lang/String;)V" ) ;
142 if (voidnotifyjstringjava_lang_StringID == NULL) {
143 throw GiwsException::JniMethodNotFoundException(curEnv, "notify");
144 }
145
146 jstring ID_ = curEnv->NewStringUTF( ID );
147 if (ID != NULL && ID_ == NULL)
148 {
149 throw GiwsException::JniBadAllocException(curEnv);
150 }
151
152
153                          curEnv->CallStaticVoidMethod(cls, voidnotifyjstringjava_lang_StringID ,ID_);
154                         curEnv->DeleteLocalRef(ID_);
155 if (curEnv->ExceptionCheck()) {
156 throw GiwsException::JniCallMethodException(curEnv);
157 }
158 }
159
160 }