]> rtime.felk.cvut.cz Git - orte.git/blob - orte/libjorte/JORTEDomainMgrCreate.c
5fb4c9669c94d205fffb0d0a3d42d0a572ed4aaf
[orte.git] / orte / libjorte / JORTEDomainMgrCreate.c
1 /* JORTEDomainMgrCreate.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 <stdlib.h>
29 // origin orte headers
30 #include "orte.h"
31 // pregenerated header
32 #include "jorte/org_ocera_orte_DomainMgr.h"
33 #include "jorte/4all.h"
34 #include "jorte/jorte_typedefs_defines.h"
35 #include "jorte/jorte_protos_api.h"
36
37 /* ****************************** *
38  *  create default manager domain *
39  * ****************************** */
40 JNIEXPORT jlong JNICALL
41 Java_org_ocera_orte_DomainMgr_jORTEDomainDefaultMgrCreate
42 (JNIEnv *env, jobject obj, jint jdomain, jboolean susp)
43 {
44   jlong      d;
45
46   // call ORTE function
47   d = (jlong) ORTEDomainMgrCreate((int)jdomain,
48                                  NULL,
49                                  NULL,
50                                  (Boolean) susp);
51   if(d == 0)
52   {
53     printf(":!c: creating mgrDomain failed! \n");
54     return 0;
55   }
56   #ifdef TEST_STAGE
57      printf(":c: mgrDomain created.. \n");
58   #endif
59   return (d);
60 }
61
62
63 /* *************************** *
64  *  create user manager domain *
65  * *************************** */
66 JNIEXPORT jlong JNICALL
67 Java_org_ocera_orte_DomainMgr_jORTEDomainMgrCreate
68 (JNIEnv *env, jobject obj,
69  jint jdomain,
70  jlong propHandle,
71  jlong eventsHandle,
72  jobject obj_de,
73  jboolean susp)
74 {
75   JavaVM     *jvm;
76   jclass      cls;
77   jfieldID    fid;
78   jlong       d;
79   //
80   ORTEDomainAppEvents    *dom_events;
81   JORTEDomainEventsContext_t  *domain_events_cont;
82   //assign domain events only if not null
83   if(obj_de != NULL) {
84     // memory alocation
85     domain_events_cont = (JORTEDomainEventsContext_t *) malloc(sizeof(JORTEDomainEventsContext_t));
86     // get jvm
87     jint b = (*env)->GetJavaVM(env,&jvm);
88     if (b < 0)
89     {
90       printf(":!c: getJavaVM() failed! \n");
91       return 0;
92     }
93     // create global references
94     domain_events_cont->jvm = jvm;
95     // domain events
96     domain_events_cont->obj_de = (*env)->NewGlobalRef(env, obj_de);
97     // get new events
98     dom_events = (ORTEDomainAppEvents *) eventsHandle;
99     ////////////////////////////////////////////////
100     // set new events & their prarameters
101     // onRegFail
102     dom_events->onRegFail = (ORTEOnRegFail) onRegFail;
103     dom_events->onRegFailParam = (void *) domain_events_cont;
104     // onMgrNew
105     dom_events->onMgrNew = (ORTEOnMgrNew) onMgrNew;
106     dom_events->onMgrNewParam = (void *) domain_events_cont;
107     // onMgrDelete
108     dom_events->onMgrDelete = (ORTEOnMgrDelete) onMgrDelete;
109     dom_events->onMgrDeleteParam = (void *) domain_events_cont;
110     // onAppRemoteNew
111     dom_events->onAppRemoteNew = (ORTEOnAppRemoteNew) onAppRemoteNew;
112     dom_events->onAppRemoteNewParam = (void *) domain_events_cont;
113     // onAppDelete
114     dom_events->onAppDelete = (ORTEOnAppDelete) onAppDelete;
115     dom_events->onAppDeleteParam = (void *) domain_events_cont;
116     // onPubRemoteNew
117     dom_events->onPubRemoteNew = (ORTEOnPubRemote) onPubRemoteNew;
118     dom_events->onPubRemoteNewParam = (void *) domain_events_cont;
119     // onPubRemoteChanged
120     dom_events->onPubRemoteChanged = (ORTEOnPubRemote) onPubRemoteChanged;
121     dom_events->onPubRemoteChangedParam = (void *) domain_events_cont;
122     // onPubDelete
123     dom_events->onPubDelete = (ORTEOnPubDelete) onPubDelete;
124     dom_events->onPubDeleteParam = (void *) domain_events_cont;
125     // onSubRemoteNew
126     dom_events->onSubRemoteNew = (ORTEOnSubRemote) onSubRemoteNew;
127     dom_events->onSubRemoteNewParam = (void *) domain_events_cont;
128     // onSubRemoteChanged
129     dom_events->onSubRemoteChanged = (ORTEOnSubRemote) onSubRemoteChanged;
130     dom_events->onSubRemoteChangedParam = (void *) domain_events_cont;
131     // onSubDelete
132     dom_events->onSubDelete = (ORTEOnSubDelete) onSubDelete;
133     dom_events->onSubDeleteParam = (void *) domain_events_cont;
134     ////////////////////////////////////////////////
135     cls = (*env)->GetObjectClass(env, obj);
136     if(cls == 0)
137     {
138       #ifdef TEST_STAGE
139         printf(":!c: cls = NULL \n");
140       #endif
141       return 0;
142     }
143     // fieldID - domainEventsContextHandle
144     fid = (*env)->GetFieldID(env,
145                              cls,
146                              "domainEventsContextHandle",
147                              "J");
148     if(fid == 0)
149     {
150       #ifdef TEST_STAGE
151         printf(":!c: fid = NULL \n");
152       #endif
153       return 0;
154     }
155     (*env)->SetLongField(env,
156                         obj,
157                         fid,
158                         (jlong) domain_events_cont);
159   }
160   // call ORTE function
161   d = (jlong) ORTEDomainMgrCreate((int)jdomain,
162                                   (ORTEDomainProp *) propHandle,
163                                   (ORTEDomainAppEvents *) eventsHandle,
164                                   (Boolean) susp);
165   if(d == 0)
166   {
167     printf(":!c: creating mgrDomain failed! \n");
168     return 0;
169   }
170   #ifdef TEST_STAGE
171      printf(":c: mgrDomain created.. \n");
172   #endif
173   return (d);
174 }