]> rtime.felk.cvut.cz Git - orte.git/blob - orte/libjorte/JORTEPublicationGetStatus.c
Reformat the sources with orte/uncrustify script
[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 #include "jorte/jorte_protos_api.h"
37
38
39 JNIEXPORT jobject JNICALL
40 Java_org_ocera_orte_Publication_jORTEPublicationGetStatus
41   (JNIEnv *env, jobject obj, jlong j_appDomain_handle)
42 {
43   // jni types
44   jclass           cls_ps = NULL; // class of PubStatus
45   jobject          obj_ps = NULL; // instance of PubStatus
46   jfieldID         fid    = NULL;
47   jmethodID        mid    = NULL;
48   //
49   int              b = 0; // boolean
50   int              flag_ok = 0;
51   ORTEPublStatus   ps;
52   ORTEPublStatus  *publ_stat = &ps;
53
54   #ifdef TEST_STAGE
55   printf(":c: ORTEPublicationGetStatus() called.. \n");
56   #endif
57
58   do {
59     // call ORTE function
60     b = ORTEPublicationGetStatus((ORTEPublication *)j_appDomain_handle, publ_stat);
61     if (b == ORTE_BAD_HANDLE) {
62       printf(":!c: publicationGetStatus() failed! [bad pub handle] \n");
63       break;
64     }
65     // find cls
66     cls_ps = findClass(env, "org.ocera.orte.types.Status");
67     if (cls_ps == 0) {
68       #ifdef TEST_STAGE
69       printf(":!c: cls_ps = NULL \n");
70       #endif
71       break;
72     }
73     // call object constructor
74     mid = (*env)->GetMethodID(env, cls_ps, "<init>", "()V");
75     if (mid == 0) {
76       #ifdef TEST_STAGE
77       printf(":!c: mid = NULL \n");
78       #endif
79       break;
80     }
81     // new object
82     obj_ps = (*env)->NewObject(env, cls_ps, mid);
83     if (obj_ps == 0) {
84       #ifdef TEST_STAGE
85       printf(":!c: obj_ps = NULL \n");
86       #endif
87       break;
88     }
89     // ///////////////////////////////////////////////
90     // setting object's fields
91     // fieldID - strict
92     fid = (*env)->GetFieldID(env,
93                              cls_ps,
94                              "strict",
95                              "J");
96     if (fid == NULL) {
97       #ifdef TEST_STAGE
98       printf(":!c: fid = NULL \n");
99       #endif
100       break;
101     }
102     (*env)->SetLongField(env,
103                          obj_ps,
104                          fid,
105                          (jlong)publ_stat->strict);
106     // fieldID - bestEffort
107     fid = (*env)->GetFieldID(env,
108                              cls_ps,
109                              "bestEffort",
110                              "J");
111     if (fid == NULL) {
112       #ifdef TEST_STAGE
113       printf(":!c: fid = NULL \n");
114       #endif
115       break;
116     }
117     (*env)->SetLongField(env,
118                          obj_ps,
119                          fid,
120                          (jlong)publ_stat->bestEffort);
121     // fieldID - issues
122     fid = (*env)->GetFieldID(env,
123                              cls_ps,
124                              "issues",
125                              "J");
126     if (fid == NULL) {
127       #ifdef TEST_STAGE
128       printf(":!c: fid = NULL \n");
129       #endif
130       break;
131     }
132     (*env)->SetLongField(env,
133                          obj_ps,
134                          fid,
135                          (jlong)publ_stat->issues);
136     // set flag
137     flag_ok = 1;
138
139   } while (0);
140
141   if (flag_ok == 0) {
142     return NULL;
143   }
144   return obj_ps;
145
146 }