34ea6091832ac95663c4d65735930fa282354fa3
[scilab.git] / scilab / modules / commons / src / jni / GiwsException.hxx
1 /* Generated by GIWS (version 2.0.1) */
2 /*
3
4 This is generated code.
5
6 This software is a computer program whose purpose is to hide the complexity
7 of accessing Java objects/methods from C++ code.
8
9 This software is governed by the CeCILL-B license under French law and
10 abiding by the rules of distribution of free software.  You can  use, 
11 modify and/ or redistribute the software under the terms of the CeCILL-B
12 license as circulated by CEA, CNRS and INRIA at the following URL
13 "http://www.cecill.info". 
14
15 As a counterpart to the access to the source code and  rights to copy,
16 modify and redistribute granted by the license, users are provided only
17 with a limited warranty  and the software's author,  the holder of the
18 economic rights,  and the successive licensors  have only  limited
19 liability. 
20
21 In this respect, the user's attention is drawn to the risks associated
22 with loading,  using,  modifying and/or developing or reproducing the
23 software by the user in light of its specific status of free software,
24 that may mean  that it is complicated to manipulate,  and  that  also
25 therefore means  that it is reserved for developers  and  experienced
26 professionals having in-depth computer knowledge. Users are therefore
27 encouraged to load and test the software's suitability as regards their
28 requirements in conditions enabling the security of their systems and/or 
29 data to be ensured and,  more generally, to use and operate it in the 
30 same conditions as regards security. 
31
32 The fact that you are presently reading this means that you have had
33 knowledge of the CeCILL-B license and that you accept its terms.
34 */
35
36
37 #ifndef __GIWSEXCEPTION__
38 #define __GIWSEXCEPTION__
39 #include <iostream>
40 #include <string>
41 #include <string.h>
42 #include <stdlib.h>
43 #include <jni.h>
44
45         #if !defined(byte) | !defined(_MSC_VER) /* Defined anyway with Visual */
46                 typedef signed char byte;
47         #else
48                 #pragma message("Byte has been redefined elsewhere. Some problems can happen")
49         #endif
50 #include <exception>
51
52
53 #ifndef GIWSEXPORT
54 # if defined(_MSC_VER) || defined(__WIN32__) || defined(__CYGWIN__)
55 #   if defined(STATIC_LINKED)
56 #     define GIWSEXPORT
57 #   else
58 #     define GIWSEXPORT __declspec(dllexport)
59 #   endif
60 # else
61 #   if __GNUC__ >= 4
62 #     define GIWSEXPORT __attribute__ ((visibility ("default")))
63 #   else
64 #     define GIWSEXPORT
65 #   endif
66 # endif
67 #endif
68
69
70 namespace GiwsException {
71
72
73
74 /**
75 * Parent class for exceptions which may occure in JNI code.
76 */
77 class GIWSEXPORT JniException : public std::exception
78 {
79
80 /** Error message to display */
81 std::string m_oErrorMessage;
82
83 /** Java description of the exception*/
84 std::string m_oJavaMessage;
85
86 /** Java stackTrace when the exception occured */
87 std::string m_oJavaStackTrace;
88
89 /** Name of the exception (ie class name).*/
90 std::string m_oJavaExceptionName;
91
92 /** The exception itself ... we store as a member otherwise JNI
93 complains about 'WARNING in native method: JNI call made with
94 exception pending' */
95 jthrowable javaException;
96
97 public:
98
99 /**
100 * Each subclass of JniExcpetion should call the super constructor
101 * and the setErrorMessage function to set the message.
102 * @param curEnv java environment where the exception occured.
103 */
104 JniException(JNIEnv * curEnv) throw() ;
105 JniException() throw() : exception() { };
106
107
108 virtual ~JniException(void) throw();
109
110 /**
111 * @return a description of the exception
112 * @deprecated This function could lead to side effect error. Please use whatStr
113 */
114 virtual const char * what(void) const throw();
115
116 /**
117 * @return a description of the exception
118 */
119 virtual std::string whatStr(void) const throw();
120
121 /**
122 * @return Java description of the exception.
123 */
124 std::string getJavaDescription(void) const throw();
125
126 /**
127 * @return Java stack trace where the exception occured.
128 */
129 std::string getJavaStackTrace(void) const throw();
130
131 /**
132 * Get the name of the exception (ie its class name).
133 */
134 std::string getJavaExceptionName(void) const throw();
135
136 protected:
137
138 /**
139 * Set the error message that the exception should print.
140 */
141 void setErrorMessage(const std::string & errorMessage);
142
143 /**
144 * Get the message that the exception will print.
145 */
146 std::string getErrorMessage(void) const;
147
148 private:
149   /**
150 * @return error message of the exception.
151 */
152 std::string retrieveExceptionMessage(JNIEnv * curEnv);
153 /**
154 * @return full stack trace when the exception occured.
155 */
156 std::string retrieveStackTrace(JNIEnv * curEnv);
157
158 /**
159 * @return string containing the name of the exception (ie its class name).
160 */
161 std::string retrieveExceptionName(JNIEnv * curEnv);
162 /**
163 * To be called when all the information about the exceptions have been
164 * retrived.
165 * Remove the exception from the environment.
166 */
167 void closeException(JNIEnv * curEnv);
168
169 /**
170 * Convert a Java string (jstring) into a C++ string
171 */
172 std::string convertJavaString(JNIEnv * curEnv, jstring javaString);
173 };
174
175 /**
176 * Exception that should be thrown when allocation of Java resources from C++
177 * code fails (sur as NewDoubleArray or NewStringUTF).
178 */
179 class GIWSEXPORT JniBadAllocException : public JniException
180 {
181 public:
182
183 JniBadAllocException(JNIEnv * curEnv) throw();
184 virtual ~JniBadAllocException(void) throw();
185 };
186
187 /**
188 * Exception that should be thrown when a call to a Java method
189 * using Jni throw an exception.
190 * If possible, user should try to avoid this sitution because of the loss
191 * of information.
192 */
193 class GIWSEXPORT JniCallMethodException : public JniException
194 {
195 public:
196
197   /**
198    * @param curEnv java envirnonment where the exception occured.
199    */
200   JniCallMethodException(JNIEnv * curEnv) throw();
201
202   virtual ~JniCallMethodException(void) throw();
203 };
204
205 /**
206 * Exception that should be thrown when Jni code could not find a Java class
207 */
208 class GIWSEXPORT JniClassNotFoundException : public JniException
209 {
210 public:
211
212 /**
213 * @param className name of the class which haven't been found
214 */
215 JniClassNotFoundException(JNIEnv * curEnv, const std::string & className) throw();
216
217 virtual ~JniClassNotFoundException(void) throw();
218
219 };
220
221 /**
222 * Exception that should be thrown when Jni code could not find a Java method
223 */
224 class GIWSEXPORT JniMethodNotFoundException : public JniException
225 {
226 public:
227
228 /**
229 * @param className name of the method which haven't been found
230 */
231 JniMethodNotFoundException(JNIEnv * curEnv, const std::string & methodName) throw();
232 virtual ~JniMethodNotFoundException(void) throw();
233
234 };
235
236 /**
237 * Exception that should be thrown when a call to a Java method
238 * using Jni throw an exception.
239 * If possible, user should try to avoid this sitution because of the loss
240 * of information.
241 */
242 class GIWSEXPORT JniObjectCreationException : public JniException
243 {
244 public:
245
246 /**
247 * @param curEnv java envirnonment where the exception occured.
248 */
249 JniObjectCreationException(JNIEnv * curEnv, const std::string & className) throw();
250 virtual ~JniObjectCreationException(void) throw();
251
252 };
253
254
255 /**
256 * Exception that should be thrown when a call to the Java monitor
257 * failed
258 */
259 class GIWSEXPORT JniMonitorException : public JniException
260 {
261 public:
262
263 /**
264 * @param curEnv java envirnonment where the exception occured.
265 */
266 JniMonitorException(JNIEnv * curEnv, const std::string & className) throw();
267 virtual ~JniMonitorException(void) throw();
268
269 };
270
271
272 }
273 #endif
274