@@ DEV @@ : Try to use Java MVC for graphics component.
[scilab.git] / scilab / modules / graphic_objects / src / jni / CallGraphicController.cpp
1 #include "CallGraphicController.hxx"
2 /* Generated by GIWS (version 1.0.5) */
3 /*
4
5 Copyright 2007-2008 INRIA
6
7 Author : Sylvestre Ledru & others
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 This software is governed by the CeCILL-B license under French law and
13 abiding by the rules of distribution of free software.  You can  use, 
14 modify and/ or redistribute the software under the terms of the CeCILL-B
15 license as circulated by CEA, CNRS and INRIA at the following URL
16 "http://www.cecill.info". 
17
18 As a counterpart to the access to the source code and  rights to copy,
19 modify and redistribute granted by the license, users are provided only
20 with a limited warranty  and the software's author,  the holder of the
21 economic rights,  and the successive licensors  have only  limited
22 liability. 
23
24 In this respect, the user's attention is drawn to the risks associated
25 with loading,  using,  modifying and/or developing or reproducing the
26 software by the user in light of its specific status of free software,
27 that may mean  that it is complicated to manipulate,  and  that  also
28 therefore means  that it is reserved for developers  and  experienced
29 professionals having in-depth computer knowledge. Users are therefore
30 encouraged to load and test the software's suitability as regards their
31 requirements in conditions enabling the security of their systems and/or 
32 data to be ensured and,  more generally, to use and operate it in the 
33 same conditions as regards security. 
34
35 The fact that you are presently reading this means that you have had
36 knowledge of the CeCILL-B license and that you accept its terms.
37 */
38
39 namespace org_scilab_modules_graphic_objects {
40
41 // Returns the current env
42
43 JNIEnv * CallGraphicController::getCurrentEnv() {
44 JNIEnv * curEnv = NULL;
45 this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
46 return curEnv;
47 }
48 // Destructor
49
50 CallGraphicController::~CallGraphicController() {
51 JNIEnv * curEnv = NULL;
52 this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
53
54 curEnv->DeleteGlobalRef(this->instance);
55 curEnv->DeleteGlobalRef(this->instanceClass);
56 }
57 // Constructors
58
59 CallGraphicController::CallGraphicController(JavaVM * jvm_) {
60 jmethodID constructObject = NULL ;
61 jobject localInstance ;
62 jclass localClass ;
63 const std::string construct="<init>";
64 const std::string param="()V";
65 jvm=jvm_;
66
67 JNIEnv * curEnv = getCurrentEnv();
68
69 localClass = curEnv->FindClass( this->className().c_str() ) ;
70 if (localClass == NULL) {
71 std::cerr << "Could not get the Class " << this->className() <<  std::endl;
72 curEnv->ExceptionDescribe();
73 exit(EXIT_FAILURE);
74 }
75
76 this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
77
78 /* localClass is not needed anymore */
79 curEnv->DeleteLocalRef(localClass);
80
81 if (this->instanceClass == NULL) {
82 std::cerr << "Could not create a Global Ref of " << this->className() <<  std::endl;
83 curEnv->ExceptionDescribe();
84 exit(EXIT_FAILURE);
85 }
86
87
88 constructObject = curEnv->GetMethodID( this->instanceClass, construct.c_str() , param.c_str() ) ;
89 if(constructObject == NULL){
90 std::cerr << "Could not retrieve the constructor of the class " << this->className() << " with the profile : " << construct << param << std::endl;
91 curEnv->ExceptionDescribe();
92 exit(EXIT_FAILURE);
93 }
94
95 localInstance = curEnv->NewObject( this->instanceClass, constructObject ) ;
96 if(localInstance == NULL){
97 std::cerr << "Could not instantiate the object " << this->className() << " with the constructor : " << construct << param << std::endl;
98 curEnv->ExceptionDescribe();
99 exit(EXIT_FAILURE);
100 }
101  
102 this->instance = curEnv->NewGlobalRef(localInstance) ;
103 if(this->instance == NULL){
104 std::cerr << "Could not create a new global ref of " << this->className() << std::endl;
105 curEnv->ExceptionDescribe();
106 exit(EXIT_FAILURE);
107 }
108 /* localInstance not needed anymore */
109 curEnv->DeleteLocalRef(localInstance);
110
111                 /* Methods ID set to NULL */
112 jstringaskGraphicObjectjstringID=NULL; 
113 jstringgetGraphicObjectPropertyAsStringjstringjstringID=NULL; 
114 voidsetGraphicObjectPropertyjstringjstringjstringID=NULL; 
115
116
117 }
118
119 CallGraphicController::CallGraphicController(JavaVM * jvm_, jobject JObj) {
120         jvm=jvm_;
121
122         JNIEnv * curEnv = getCurrentEnv();
123
124 jclass localClass = curEnv->GetObjectClass(JObj);
125         this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
126         curEnv->DeleteLocalRef(localClass);
127
128         if (this->instanceClass == NULL) {
129
130 std::cerr << "Could not create a Global Ref of " << this->className() <<  std::endl;
131 curEnv->ExceptionDescribe();
132 exit(EXIT_FAILURE);
133         }
134
135         this->instance = curEnv->NewGlobalRef(JObj) ;
136         if(this->instance == NULL){
137
138 std::cerr << "Could not create a new global ref of " << this->className() << std::endl;
139 curEnv->ExceptionDescribe();
140 exit(EXIT_FAILURE);
141         }
142         /* Methods ID set to NULL */
143         jstringaskGraphicObjectjstringID=NULL; 
144 jstringgetGraphicObjectPropertyAsStringjstringjstringID=NULL; 
145 voidsetGraphicObjectPropertyjstringjstringjstringID=NULL; 
146
147
148 }
149
150 // Generic methods
151
152 void CallGraphicController::synchronize() {
153 if (getCurrentEnv()->MonitorEnter(instance) != JNI_OK) {
154 std::cerr << "Fail to enter monitor." << std::endl;
155 exit(EXIT_FAILURE);
156
157 }
158 }
159
160 void CallGraphicController::endSynchronize() {
161 if ( getCurrentEnv()->MonitorExit(instance) != JNI_OK) {
162
163 std::cerr << "Fail to exit monitor." << std::endl;
164 exit(EXIT_FAILURE);
165 }
166 }
167 // Method(s)
168
169 char * CallGraphicController::askGraphicObject (JavaVM * jvm_, char * typeName){
170
171 JNIEnv * curEnv = NULL;
172 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
173 jclass cls = curEnv->FindClass( className().c_str() );
174
175 jmethodID jstringaskGraphicObjectjstringID = curEnv->GetStaticMethodID(cls, "askGraphicObject", "(Ljava/lang/String;)Ljava/lang/String;" ) ;
176 if (jstringaskGraphicObjectjstringID == NULL) {
177 std::cerr << "Could not access to the method " << "askGraphicObject" << std::endl;
178 curEnv->ExceptionDescribe();
179 exit(EXIT_FAILURE);
180 }
181
182 jstring typeName_ = curEnv->NewStringUTF( typeName );
183
184                         jstring res =  static_cast<jstring>( curEnv->CallStaticObjectMethod(cls, jstringaskGraphicObjectjstringID ,typeName_));if (curEnv->ExceptionCheck()) {
185 curEnv->ExceptionDescribe() ;
186 }
187
188
189 const char *tempString = curEnv->GetStringUTFChars(res, 0);
190 char * myStringBuffer = new char[strlen(tempString) + 1];
191 strcpy(myStringBuffer, tempString);
192 curEnv->ReleaseStringUTFChars(res, tempString);
193 curEnv->DeleteLocalRef(res);
194 if (curEnv->ExceptionCheck()) {
195 curEnv->ExceptionDescribe() ;
196 }
197
198 return myStringBuffer;
199
200 }
201
202 char * CallGraphicController::getGraphicObjectPropertyAsString (JavaVM * jvm_, char * id, char * propertyName){
203
204 JNIEnv * curEnv = NULL;
205 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
206 jclass cls = curEnv->FindClass( className().c_str() );
207
208 jmethodID jstringgetGraphicObjectPropertyAsStringjstringjstringID = curEnv->GetStaticMethodID(cls, "getGraphicObjectPropertyAsString", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" ) ;
209 if (jstringgetGraphicObjectPropertyAsStringjstringjstringID == NULL) {
210 std::cerr << "Could not access to the method " << "getGraphicObjectPropertyAsString" << std::endl;
211 curEnv->ExceptionDescribe();
212 exit(EXIT_FAILURE);
213 }
214
215 jstring id_ = curEnv->NewStringUTF( id );
216
217 jstring propertyName_ = curEnv->NewStringUTF( propertyName );
218
219                         jstring res =  static_cast<jstring>( curEnv->CallStaticObjectMethod(cls, jstringgetGraphicObjectPropertyAsStringjstringjstringID ,id_, propertyName_));if (curEnv->ExceptionCheck()) {
220 curEnv->ExceptionDescribe() ;
221 }
222
223
224 const char *tempString = curEnv->GetStringUTFChars(res, 0);
225 char * myStringBuffer = new char[strlen(tempString) + 1];
226 strcpy(myStringBuffer, tempString);
227 curEnv->ReleaseStringUTFChars(res, tempString);
228 curEnv->DeleteLocalRef(res);
229 if (curEnv->ExceptionCheck()) {
230 curEnv->ExceptionDescribe() ;
231 }
232
233 return myStringBuffer;
234
235 }
236
237 void CallGraphicController::setGraphicObjectProperty (JavaVM * jvm_, char * id, char * propertyName, char * value){
238
239 JNIEnv * curEnv = NULL;
240 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
241 jclass cls = curEnv->FindClass( className().c_str() );
242
243 jmethodID voidsetGraphicObjectPropertyjstringjstringjstringID = curEnv->GetStaticMethodID(cls, "setGraphicObjectProperty", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" ) ;
244 if (voidsetGraphicObjectPropertyjstringjstringjstringID == NULL) {
245 std::cerr << "Could not access to the method " << "setGraphicObjectProperty" << std::endl;
246 curEnv->ExceptionDescribe();
247 exit(EXIT_FAILURE);
248 }
249
250 jstring id_ = curEnv->NewStringUTF( id );
251
252 jstring propertyName_ = curEnv->NewStringUTF( propertyName );
253
254 jstring value_ = curEnv->NewStringUTF( value );
255
256                          curEnv->CallStaticVoidMethod(cls, voidsetGraphicObjectPropertyjstringjstringjstringID ,id_, propertyName_, value_);if (curEnv->ExceptionCheck()) {
257 curEnv->ExceptionDescribe() ;
258 }
259
260 }
261
262 }