LTP GCOV extension - code coverage report
Current view: directory - src/cpp/prod/poa - POA.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 139
Code covered: 51.1 % Executed lines: 71

       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                 : //=============================================================================

Generated by: LTP GCOV extension version 1.4