]> rtime.felk.cvut.cz Git - orte.git/blob - orte/libjorte/JORTEPublicationGetStatus.c
87892ffe6a01c4d018c981fc3a4468b00b714ba3
[orte.git] / orte / libjorte / JORTEPublicationGetStatus.c
1 /* JORTEPublicationGetStatus.c */
2
3 /**
4   * This code provides conversion between JAVA a C environments.
5   * The C functions are calling here and results are send to JAVA
6   * native functions. It uses the header pregenerated by JAVA
7   * (by command 'javah -jni class_with_native_function')
8   *
9   * @author Lukas Pokorny (lukas_pokorny@centrum.cz)
10   * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz)
11   * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org)
12   * @author dedication to Kj
13   * @version 0.1
14   *
15   *
16   * This program is free software; you can redistribute it and/or modify
17   * it under the terms of the GNU General Public License as published by
18   * the Free Software Foundation; either version 2 of the License, or
19   * (at your option) any later version.
20   *
21   * This program is distributed in the hope that it will be useful,
22   * but WITHOUT ANY WARRANTY; without even the implied warranty of
23   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24   * GNU General Public License for more details.
25   *
26   */
27
28 #include <string.h>
29 #include <stdlib.h>
30 // library header file's path
31 #include "orte.h"
32 // enable TEST_STAGE run level
33 #include "jorte/4all.h"
34 // pregenerated header
35 #include "jorte/org_ocera_orte_Publication.h"
36
37
38 JNIEXPORT jobject JNICALL
39 Java_org_ocera_orte_Publication_jORTEPublicationGetStatus
40 (JNIEnv *env, jobject obj, jlong j_appDomain_handle)
41 {
42   // jni types
43   jclass           cls_ps = NULL; // class of PubStatus
44   jobject          obj_ps = NULL; // instance of PubStatus
45   jfieldID         fid    = NULL;
46   jmethodID        mid    = NULL;
47   //
48   int              b = 0; // boolean
49   int              flag_ok = 0;
50   ORTEPublStatus   ps;
51   ORTEPublStatus  *publ_stat = &ps;
52
53   #ifdef TEST_STAGE
54     printf(":c: ORTEPublicationGetStatus() called.. \n");
55   #endif
56
57   do
58   {
59     // call ORTE function
60     b = ORTEPublicationGetStatus((ORTEPublication *)j_appDomain_handle, publ_stat);
61     if(b == ORTE_BAD_HANDLE)
62     {
63      printf(":!c: publicationGetStatus() failed! [bad pub handle] \n");
64      break;
65     }
66     // find cls
67     cls_ps = findClass(env,"org.ocera.orte.types.Status");
68     if(cls_ps == 0)
69     {
70       #ifdef TEST_STAGE
71        printf(":!c: cls_ps = NULL \n");
72       #endif
73       break;
74     }
75     // call object constructor
76     mid = (*env)->GetMethodID(env,cls_ps,"<init>","()V");
77     if(mid == 0)
78     {
79       #ifdef TEST_STAGE
80        printf(":!c: mid = NULL \n");
81       #endif
82       break;
83     }
84     // new object
85     obj_ps = (*env)->NewObject(env, cls_ps, mid);
86     if(obj_ps == 0)
87     {
88       #ifdef TEST_STAGE
89        printf(":!c: obj_ps = NULL \n");
90       #endif
91       break;
92     }
93     // ///////////////////////////////////////////////
94     // setting object's fields
95     // fieldID - strict
96     fid = (*env)->GetFieldID(env,
97                              cls_ps,
98                              "strict",
99                              "J");
100     if(fid == NULL)
101     {
102       #ifdef TEST_STAGE
103        printf(":!c: fid = NULL \n");
104       #endif
105       break;
106     }
107     (*env)->SetLongField(env,
108                          obj_ps,
109                          fid,
110                          (jlong) publ_stat->strict);
111     // fieldID - bestEffort
112     fid = (*env)->GetFieldID(env,
113                              cls_ps,
114                              "bestEffort",
115                              "J");
116     if(fid == NULL)
117     {
118       #ifdef TEST_STAGE
119        printf(":!c: fid = NULL \n");
120       #endif
121       break;
122     }
123     (*env)->SetLongField(env,
124                          obj_ps,
125                          fid,
126                          (jlong) publ_stat->bestEffort);
127     // fieldID - issues
128     fid = (*env)->GetFieldID(env,
129                              cls_ps,
130                              "issues",
131                              "J");
132     if(fid == NULL)
133     {
134       #ifdef TEST_STAGE
135         printf(":!c: fid = NULL \n");
136       #endif
137       break;
138     }
139     (*env)->SetLongField(env,
140                          obj_ps,
141                          fid,
142                          (jlong) publ_stat->issues);
143     // set flag
144     flag_ok = 1;
145
146   } while(0);
147
148   if(flag_ok == 0)
149   {
150     return NULL;
151   }
152   return obj_ps;
153
154 }