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