1 : //=============================================================================
2 : // File <$/src/cpp/prod/poa/POA.cpp>
3 : // This file is part of YaOrb : Yet Another Object Request Broker,
4 : // Copyright (c) 2000-2003, Marc Alff.
5 : //
6 : // This program is free software; you can redistribute it and/or
7 : // modify it under the terms of the GNU General Public License
8 : // as published by the Free Software Foundation; either version 2
9 : // of the License, or (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program; if not, write to the Free Software
18 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 : //
20 : //=============================================================================
21 :
22 : // MANUAL Part of PortableServer::POAManager.
23 :
24 : // Portability
25 : #include "yaorb/config.h"
26 : #include "src/cpp/prod/port/port_stdc.h"
27 :
28 : #include <stdio.h>
29 :
30 : #include <yaorb/CORBA.h>
31 : #include <yaorb/YAORB.h>
32 :
33 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
34 : #include "src/cpp/prod/tool/Assert.h"
35 : #include "src/cpp/prod/tool/Log.h"
36 : #include "src/cpp/prod/poa/policy_impl.h"
37 :
38 12 : void PortableServer::POA::IncRefCount(void)
39 : {
40 12 : _refCount ++ ;
41 : }
42 :
43 8 : void PortableServer::POA::DecRefCount(void)
44 : {
45 8 : _refCount -- ;
46 :
47 8 : if (_refCount == 0L)
48 : {
49 : PortableServer::POA* that = (PortableServer::POA*) this ;
50 0 : delete that ;
51 : }
52 : }
53 :
54 : PortableServer::POA_ptr
55 : PortableServer::POA::_duplicate(
56 17 : PortableServer::POA_ptr ptr)
57 : {
58 17 : if (ptr)
59 : {
60 12 : ptr->IncRefCount() ;
61 : }
62 : return ptr ;
63 : }
64 :
65 : PortableServer::POA_ptr
66 2 : PortableServer::POA::_narrow(CORBA::Object_ptr obj)
67 : {
68 : // FIXME : POA::_narrow
69 :
70 : return ((PortableServer::POA_ptr) obj) ;
71 : }
72 :
73 2 : PortableServer::POA::POA()
74 : : _refCount(1),
75 : _threadPolicy(PortableServer::ORB_CTRL_MODEL),
76 : _lifespanPolicy(PortableServer::TRANSIENT),
77 : _idUniquenessPolicy(PortableServer::UNIQUE_ID),
78 : _idAssignmentPolicy(PortableServer::SYSTEM_ID),
79 : _implicitActivationPolicy(PortableServer::IMPLICIT_ACTIVATION),
80 : _servantRetentionPolicy(PortableServer::RETAIN),
81 : _requestProcessingPolicy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY),
82 : _name("RootPOA"),
83 : _the_POAManager(NULL),
84 : _the_parent(NULL),
85 : _the_children(),
86 : _the_activator(NULL),
87 6 : _the_servant_manager(NULL)
88 : {
89 : //==========================================================================
90 : // This constructor is used by RootPOA only.
91 : // REFERENCE : OMG Document 99-07-15, section 11.2.3, page 11-6.
92 : //==========================================================================
93 :
94 2 : _the_POAManager = PortableServer::POAManager::create() ;
95 :
96 2 : NON_DEV("POA") ;
97 0 : }
98 :
99 : PortableServer::POA::POA(
100 : const char* adapter_name,
101 : PortableServer::POAManager_ptr a_POAManager,
102 : PortableServer::POA_var the_parent,
103 2 : const CORBA::PolicyList& policies)
104 : : _refCount(1),
105 : _threadPolicy(PortableServer::ORB_CTRL_MODEL),
106 : _lifespanPolicy(PortableServer::TRANSIENT),
107 : _idUniquenessPolicy(PortableServer::UNIQUE_ID),
108 : _idAssignmentPolicy(PortableServer::SYSTEM_ID),
109 : _implicitActivationPolicy(PortableServer::NO_IMPLICIT_ACTIVATION),
110 : _servantRetentionPolicy(PortableServer::RETAIN),
111 : _requestProcessingPolicy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY),
112 : _name(adapter_name),
113 : _the_POAManager(a_POAManager),
114 : _the_parent(the_parent),
115 : _the_children(),
116 : _the_activator(NULL),
117 6 : _the_servant_manager(NULL)
118 :
119 : {
120 2 : if ( CORBA::is_nil(_the_POAManager) )
121 : {
122 1 : _the_POAManager = PortableServer::POAManager::create() ;
123 : }
124 :
125 : // Policies provided by the caller
126 :
127 : CORBA::Policy_var policy ;
128 :
129 22 : for (CORBA::ULong i=0 ;
130 : i < policies.length() ;
131 : i++)
132 : {
133 : policy = policies[i] ;
134 :
135 9 : if ( CORBA::is_nil(policy) )
136 : {
137 0 : throw PortableServer::POA::InvalidPolicy() ;
138 : }
139 :
140 9 : switch(policy->policy_type())
141 : {
142 : case PortableServer::THREAD_POLICY_ID :
143 : {
144 : PortableServer::ThreadPolicy_var typed ;
145 2 : typed = PortableServer::ThreadPolicy::_narrow(policy) ;
146 :
147 2 : if ( CORBA::is_nil(typed) )
148 : {
149 0 : throw PortableServer::POA::InvalidPolicy() ;
150 : }
151 :
152 2 : _threadPolicy = typed->value() ;
153 :
154 : break ;
155 : }
156 : case PortableServer::LIFESPAN_POLICY_ID :
157 : {
158 : PortableServer::LifespanPolicy_var typed ;
159 2 : typed = PortableServer::LifespanPolicy::_narrow(policy) ;
160 :
161 2 : if ( CORBA::is_nil(typed) )
162 : {
163 0 : throw PortableServer::POA::InvalidPolicy() ;
164 : }
165 :
166 2 : _lifespanPolicy = typed->value() ;
167 :
168 : break ;
169 : }
170 : case PortableServer::ID_UNIQUENESS_POLICY_ID :
171 : {
172 : PortableServer::IdUniquenessPolicy_var typed ;
173 1 : typed = PortableServer::IdUniquenessPolicy::_narrow(policy) ;
174 :
175 1 : if ( CORBA::is_nil(typed) )
176 : {
177 0 : throw PortableServer::POA::InvalidPolicy() ;
178 : }
179 :
180 1 : _idUniquenessPolicy = typed->value() ;
181 :
182 : break ;
183 : }
184 : case PortableServer::ID_ASSIGNMENT_POLICY_ID :
185 : {
186 : PortableServer::IdAssignmentPolicy_var typed ;
187 1 : typed = PortableServer::IdAssignmentPolicy::_narrow(policy) ;
188 :
189 1 : if ( CORBA::is_nil(typed) )
190 : {
191 0 : throw PortableServer::POA::InvalidPolicy() ;
192 : }
193 :
194 1 : _idAssignmentPolicy = typed->value() ;
195 :
196 : break ;
197 : }
198 : case PortableServer::IMPLICIT_ACTIVATION_POLICY_ID :
199 : {
200 : PortableServer::ImplicitActivationPolicy_var typed ;
201 1 : typed = PortableServer::ImplicitActivationPolicy::_narrow(policy) ;
202 :
203 1 : if ( CORBA::is_nil(typed) )
204 : {
205 0 : throw PortableServer::POA::InvalidPolicy() ;
206 : }
207 :
208 1 : _implicitActivationPolicy = typed->value() ;
209 :
210 : break ;
211 : }
212 : case PortableServer::SERVANT_RETENTION_POLICY_ID :
213 : {
214 : PortableServer::ServantRetentionPolicy_var typed ;
215 1 : typed = PortableServer::ServantRetentionPolicy::_narrow(policy) ;
216 :
217 1 : if ( CORBA::is_nil(typed) )
218 : {
219 0 : throw PortableServer::POA::InvalidPolicy() ;
220 : }
221 :
222 1 : _servantRetentionPolicy = typed->value() ;
223 :
224 : break ;
225 : }
226 : case PortableServer::REQUEST_PROCESSING_POLICY_ID :
227 : {
228 : PortableServer::RequestProcessingPolicy_var typed ;
229 1 : typed = PortableServer::RequestProcessingPolicy::_narrow(policy) ;
230 :
231 1 : if ( CORBA::is_nil(typed) )
232 : {
233 0 : throw PortableServer::POA::InvalidPolicy() ;
234 : }
235 :
236 1 : _requestProcessingPolicy = typed->value() ;
237 :
238 : break ;
239 : }
240 : default :
241 : {
242 : break ;
243 : }
244 : }
245 : }
246 :
247 2 : if ( (_servantRetentionPolicy == NON_RETAIN)
248 : && (_requestProcessingPolicy != USE_DEFAULT_SERVANT)
249 : && (_requestProcessingPolicy != USE_SERVANT_MANAGER)
250 : )
251 : {
252 0 : LOG("NON_RETAIN policy ==> USE_DEFAULT_SERVANT or USE_SERVANT_MANAGER") ;
253 0 : throw PortableServer::POA::InvalidPolicy() ;
254 : }
255 :
256 2 : if ( (_requestProcessingPolicy == USE_ACTIVE_OBJECT_MAP_ONLY)
257 : && (_servantRetentionPolicy != RETAIN)
258 : )
259 : {
260 0 : LOG("USE_ACTIVE_OBJECT_MAP_ONLY policy ==> RETAIN") ;
261 0 : throw PortableServer::POA::InvalidPolicy() ;
262 : }
263 :
264 1 : if ( (_requestProcessingPolicy == USE_DEFAULT_SERVANT)
265 : && (_idUniquenessPolicy != MULTIPLE_ID)
266 : )
267 : {
268 0 : LOG("USE_DEFAULT_SERVANT policy ==> MULTIPLE_ID") ;
269 0 : throw PortableServer::POA::InvalidPolicy() ;
270 : }
271 :
272 2 : if ( (_implicitActivationPolicy == IMPLICIT_ACTIVATION)
273 : && (_idAssignmentPolicy != SYSTEM_ID)
274 : )
275 : {
276 0 : LOG("IMPLICIT_ACTIVATION policy ==> SYSTEM_ID") ;
277 0 : throw PortableServer::POA::InvalidPolicy() ;
278 : }
279 :
280 0 : if ( (_implicitActivationPolicy == IMPLICIT_ACTIVATION)
281 : && (_servantRetentionPolicy != RETAIN)
282 : )
283 : {
284 0 : LOG("IMPLICIT_ACTIVATION policy ==> RETAIN") ;
285 0 : throw PortableServer::POA::InvalidPolicy() ;
286 : }
287 0 : }
288 :
289 0 : PortableServer::POA::~POA()
290 : {
291 : ASSERT(_refCount == 0) ;
292 0 : NON_DEV("POA") ;
293 0 : }
294 :
295 : PortableServer::POA_ptr
296 : PortableServer::POA::create_POA(
297 : const char* adapter_name,
298 : PortableServer::POAManager_ptr a_POAManager,
299 2 : const CORBA::PolicyList& policies)
300 : {
301 : POA_var myself = this ;
302 :
303 2 : return new POA(adapter_name, a_POAManager, myself, policies) ;
304 : }
305 :
306 : PortableServer::POA_ptr
307 : PortableServer::POA::find_POA(
308 : const char* adapter_name,
309 2 : CORBA::Boolean activate_it)
310 : {
311 : PortableServer::POA_var child ;
312 : PortableServer::POA_var aPOA ;
313 : const char* aName = NULL ;
314 :
315 : CORBA::ULong i = 0 ;
316 2 : CORBA::ULong length = _the_children.length() ;
317 :
318 2 : for (i = 0 ; i < length ; i ++)
319 : {
320 : aPOA = _the_children[i] ;
321 0 : aName = aPOA->the_name() ;
322 :
323 0 : if (strcmp(adapter_name, aName) == 0)
324 : {
325 : child = aPOA ;
326 : break ;
327 : }
328 : }
329 :
330 : return child._retn() ;
331 : }
332 :
333 : void
334 : PortableServer::POA::destroy(
335 : CORBA::Boolean etherealize_objects,
336 0 : CORBA::Boolean wait_for_completion)
337 : {
338 0 : NON_DEV("POA") ;
339 : }
340 :
341 : PortableServer::ThreadPolicy_ptr
342 : PortableServer::POA::create_thread_policy(
343 2 : PortableServer::ThreadPolicyValue value)
344 : {
345 2 : return new ThreadPolicyImpl(value) ;
346 : }
347 :
348 : PortableServer::LifespanPolicy_ptr
349 : PortableServer::POA::create_lifespan_policy(
350 2 : PortableServer::LifespanPolicyValue value)
351 : {
352 2 : return new LifespanPolicyImpl(value) ;
353 : }
354 :
355 : PortableServer::IdUniquenessPolicy_ptr
356 : PortableServer::POA::create_id_uniqueness_policy(
357 1 : PortableServer::IdUniquenessPolicyValue value)
358 : {
359 1 : return new IdUniquenessPolicyImpl(value) ;
360 : }
361 :
362 : PortableServer::IdAssignmentPolicy_ptr
363 : PortableServer::POA::create_id_assignment_policy(
364 1 : PortableServer::IdAssignmentPolicyValue value)
365 : {
366 1 : return new IdAssignmentPolicyImpl(value) ;
367 : }
368 :
369 : PortableServer::ImplicitActivationPolicy_ptr
370 : PortableServer::POA::create_implicit_activation_policy(
371 1 : PortableServer::ImplicitActivationPolicyValue value)
372 : {
373 1 : return new ImplicitActivationPolicyImpl(value) ;
374 : }
375 :
376 : PortableServer::ServantRetentionPolicy_ptr
377 : PortableServer::POA::create_servant_retention_policy(
378 1 : PortableServer::ServantRetentionPolicyValue value)
379 : {
380 1 : return new ServantRetentionPolicyImpl(value) ;
381 : }
382 :
383 : PortableServer::RequestProcessingPolicy_ptr
384 : PortableServer::POA::create_request_processing_policy(
385 1 : PortableServer::RequestProcessingPolicyValue value)
386 : {
387 1 : return new RequestProcessingPolicyImpl(value) ;
388 : }
389 :
390 : char*
391 0 : PortableServer::POA::the_name(void)
392 : {
393 0 : return _name ;
394 : }
395 :
396 : PortableServer::POA_ptr
397 0 : PortableServer::POA::the_parent(void)
398 : {
399 : return _the_parent ;
400 : }
401 :
402 : PortableServer::POAList*
403 0 : PortableServer::POA::the_children(void)
404 : {
405 0 : NON_DEV("POA") ;
406 : return NULL ;
407 : }
408 :
409 : PortableServer::POAManager_ptr
410 1 : PortableServer::POA::the_POAManager(void)
411 : {
412 : return _the_POAManager ;
413 : }
414 :
415 : PortableServer::AdapterActivator_ptr
416 0 : PortableServer::POA::the_activator(void)
417 : {
418 0 : NON_DEV("POA") ;
419 : return NULL ;
420 : }
421 :
422 : void
423 0 : PortableServer::POA::the_activator(PortableServer::AdapterActivator_ptr)
424 : {
425 0 : NON_DEV("POA") ;
426 : }
427 :
428 : PortableServer::ServantManager_ptr
429 0 : PortableServer::POA::get_servant_manager(void)
430 : {
431 0 : NON_DEV("POA") ;
432 : return NULL ;
433 : }
434 :
435 : void
436 : PortableServer::POA::set_servant_manager(
437 0 : PortableServer::ServantManager_ptr imgr)
438 : {
439 0 : NON_DEV("POA") ;
440 : }
441 :
442 : PortableServer::Servant
443 0 : PortableServer::POA::get_servant(void)
444 : {
445 0 : NON_DEV("POA") ;
446 : return NULL ;
447 : }
448 :
449 : void
450 : PortableServer::POA::set_servant(
451 1 : const PortableServer::Servant& p_servant)
452 : {
453 1 : NON_DEV("POA") ;
454 : }
455 :
456 : PortableServer::ObjectId*
457 : PortableServer::POA::activate_object(
458 0 : const PortableServer::Servant& p_servant)
459 : {
460 0 : NON_DEV("POA") ;
461 : return NULL ;
462 : }
463 :
464 : void
465 : PortableServer::POA::activate_object_with_id(
466 : const PortableServer::ObjectId& id,
467 0 : const PortableServer::Servant& p_servant)
468 : {
469 0 : NON_DEV("POA") ;
470 : }
471 :
472 : void
473 : PortableServer::POA::deactivate_object(
474 0 : const PortableServer::ObjectId& oid)
475 : {
476 0 : NON_DEV("POA") ;
477 : }
478 :
479 : CORBA::Object_ptr
480 : PortableServer::POA::create_reference(
481 0 : const char* intf)
482 : {
483 0 : if (_idAssignmentPolicy != SYSTEM_ID)
484 : {
485 0 : throw PortableServer::POA::WrongPolicy() ;
486 : }
487 :
488 0 : NON_DEV("POA") ;
489 0 : return CORBA::Object::_nil() ;
490 : }
491 :
492 : CORBA::Object_ptr
493 : PortableServer::POA::create_reference_with_id(
494 : const PortableServer::ObjectId& oid,
495 1 : const char* intf)
496 : {
497 1 : if (_idAssignmentPolicy != USER_ID)
498 : {
499 0 : throw PortableServer::POA::WrongPolicy() ;
500 : }
501 :
502 1 : NON_DEV("POA") ;
503 1 : return CORBA::Object::_nil() ;
504 : }
505 :
506 : PortableServer::ObjectId*
507 : PortableServer::POA::servant_to_id(
508 0 : const PortableServer::Servant& p_servant)
509 : {
510 0 : NON_DEV("POA") ;
511 : return NULL ;
512 : }
513 :
514 : CORBA::Object_ptr
515 : PortableServer::POA::servant_to_reference(
516 0 : const PortableServer::Servant& p_servant)
517 : {
518 0 : NON_DEV("POA") ;
519 : return NULL ;
520 : }
521 :
522 : PortableServer::Servant
523 : PortableServer::POA::reference_to_servant(
524 0 : const CORBA::Object_ptr reference)
525 : {
526 0 : NON_DEV("POA") ;
527 : return NULL ;
528 : }
529 :
530 : PortableServer::ObjectId*
531 : PortableServer::POA::reference_to_id(
532 0 : const CORBA::Object_ptr reference)
533 : {
534 0 : NON_DEV("POA") ;
535 : return NULL ;
536 : }
537 :
538 : PortableServer::Servant
539 : PortableServer::POA::id_to_servant(
540 0 : const PortableServer::ObjectId& oid)
541 : {
542 0 : NON_DEV("POA") ;
543 : return NULL ;
544 : }
545 :
546 : CORBA::Object_ptr
547 : PortableServer::POA::id_to_reference(
548 0 : const PortableServer::ObjectId& oid)
549 : {
550 0 : NON_DEV("POA") ;
551 : return NULL ;
552 : }
553 :
554 : //=============================================================================
555 : // END of file <src/cpp/prod/poa/POA.cpp>
556 : //=============================================================================
|