TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > Class Template Reference

#include <Trader_Interfaces.h>

Inheritance diagram for TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >:

Inheritance graph
[legend]
Collaboration diagram for TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_Link (TAO_Trader< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &trader)
 ~TAO_Link (void)
virtual void add_link (const char *name, CosTrading::Lookup_ptr target, CosTrading::FollowOption def_pass_on_follow_rule, CosTrading::FollowOption limiting_follow_rule)
virtual void remove_link (const char *name)
virtual CosTrading::Link::LinkInfodescribe_link (const char *name)
virtual CosTrading::LinkNameSeqlist_links (void)
virtual void modify_link (const char *name, CosTrading::FollowOption def_pass_on_follow_rule, CosTrading::FollowOption limiting_follow_rule)

Private Types

typedef ACE_Hash_Map_Manager_Ex<
CORBA::String_var, CosTrading::Link::LinkInfo,
ACE_Hash< CORBA::String_var >,
ACE_Equal_To< CORBA::String_var >,
MAP_LOCK_TYPE > 
Links

Private Member Functions

void operator= (const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &)
 TAO_Link (const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &)

Private Attributes

Links links_
TAO_Trader< TRADER_LOCK_TYPE,
MAP_LOCK_TYPE > & 
trader_

Detailed Description

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
class TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >

Definition at line 626 of file Trader_Interfaces.h.


Member Typedef Documentation

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
typedef ACE_Hash_Map_Manager_Ex< CORBA::String_var, CosTrading::Link::LinkInfo, ACE_Hash<CORBA::String_var>, ACE_Equal_To<CORBA::String_var>, MAP_LOCK_TYPE > TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::Links [private]

Definition at line 772 of file Trader_Interfaces.h.


Constructor & Destructor Documentation

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::TAO_Link ( TAO_Trader< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &  trader  ) 

Definition at line 1450 of file Trader_Interfaces.cpp.

01451   : TAO_Trader_Components <POA_CosTrading::Link> (trader.trading_components ()),
01452     TAO_Support_Attributes <POA_CosTrading::Link> (trader.support_attributes ()),
01453     TAO_Link_Attributes <POA_CosTrading::Link> (trader.link_attributes ()),
01454     trader_ (trader)
01455 {
01456 }

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::~TAO_Link ( void   ) 

Definition at line 1459 of file Trader_Interfaces.cpp.

01460 {
01461 }

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::TAO_Link ( const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &   )  [private]


Member Function Documentation

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::add_link ( const char *  name,
CosTrading::Lookup_ptr  target,
CosTrading::FollowOption  def_pass_on_follow_rule,
CosTrading::FollowOption  limiting_follow_rule 
) [virtual]

BEGIN SPEC The add_link operation allows a trader subsequently to use the service of another trader in the performance of its own trading service operations.

Definition at line 1466 of file Trader_Interfaces.cpp.

References ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind(), CosTrading::Link::LinkInfo::def_pass_on_follow_rule, CORBA::is_nil(), TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_, TAO_Link_Attributes< POA_CosTrading::Link >::max_link_follow_policy(), and CosTrading::Link::LinkInfo::target.

01470 {
01471   // Ensure the link name is valid.
01472   if (! TAO_Trader_Base::is_valid_link_name (name))
01473     throw CosTrading::Link::IllegalLinkName (name);
01474 
01475   // Ensure this isn't a duplicate link name.
01476   CORBA::String_var link_name (name);
01477   if (this->links_.find (link_name) == 0)
01478     throw CosTrading::Link::DuplicateLinkName (name);
01479 
01480   // Ensure the lookup_ptr isn't nil.
01481   if (CORBA::is_nil (target))
01482     throw CosTrading::InvalidLookupRef (target);
01483 
01484   // Ensure that the default link behavior isn't stronger than the
01485   // limiting link behavior.
01486   if (def_pass_on_follow_rule > limiting_follow_rule)
01487     throw CosTrading::Link::DefaultFollowTooPermissive(
01488       def_pass_on_follow_rule,
01489       limiting_follow_rule);
01490 
01491   // Ensure that the limiting link behavior for this link doesn't
01492   // exceed the maximum allowed for a link.
01493   CosTrading::FollowOption follow_policy =
01494     this->max_link_follow_policy ();
01495   if (limiting_follow_rule < follow_policy)
01496     throw CosTrading::Link::LimitingFollowTooPermissive(
01497       limiting_follow_rule,
01498       follow_policy);
01499 
01500   // Create a link info structure for this link of the federation.
01501   CosTrading::Link::LinkInfo link_info;
01502 
01503   link_info.target = CosTrading::Lookup::_duplicate (target);
01504 
01505   link_info.def_pass_on_follow_rule = def_pass_on_follow_rule;
01506   link_info.limiting_follow_rule = limiting_follow_rule;
01507 
01508   // Insert this link into the collection of links.
01509   this->links_.bind (link_name, link_info);
01510 }

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
CosTrading::Link::LinkInfo * TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::describe_link ( const char *  name  )  [virtual]

Definition at line 1532 of file Trader_Interfaces.cpp.

References ACE_NEW_THROW_EX, CosTrading::Link::LinkInfo::def_pass_on_follow_rule, TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, CosTrading::Link::LinkInfo::target, and CosTrading::Link::LinkInfo::target_reg.

01533 {
01534   // Ensure the link name is valid.
01535   if (! TAO_Trader_Base::is_valid_link_name (name))
01536     throw CosTrading::Link::IllegalLinkName (name);
01537 
01538   // Ensure this isn't a duplicate link name.
01539   typename Links::ENTRY* link_entry = 0;
01540   CORBA::String_var link_name (name);
01541   if (this->links_.find (link_name, link_entry) == -1)
01542     throw CosTrading::Link::UnknownLinkName (name);
01543 
01544   // Build a new Link Info structure.
01545   CosTrading::Link::LinkInfo* new_link_info = 0;
01546   CosTrading::Link::LinkInfo& old_link_info = link_entry->int_id_;
01547 
01548   ACE_NEW_THROW_EX (new_link_info,
01549                     CosTrading::Link::LinkInfo,
01550                     CORBA::NO_MEMORY ());
01551 
01552   new_link_info->def_pass_on_follow_rule = old_link_info.def_pass_on_follow_rule;
01553   new_link_info->limiting_follow_rule = old_link_info.limiting_follow_rule;
01554 
01555   new_link_info->target = old_link_info.target;
01556 
01557   // Delayed retrieval of register interface.
01558   // This avoids the nested upcall that would occur were we to invoke
01559   // this method in the add_link method.
01560 
01561   new_link_info->target_reg = old_link_info.target->register_if ();
01562 
01563   // return the link information for this link name.
01564   return new_link_info;
01565 }

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
CosTrading::LinkNameSeq * TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::list_links ( void   )  [virtual]

Definition at line 1569 of file Trader_Interfaces.cpp.

References ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::current_size(), TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_, size, and CORBA::string_dup().

01570 {
01571   // Allocate space for the link names.
01572   size_t size = this->links_.current_size ();
01573   CORBA::ULong i = 0;
01574   CosTrading::LinkName* link_seq =
01575     CosTrading::LinkNameSeq::allocbuf (static_cast<CORBA::ULong> (size));
01576 
01577   // Copy the link names into the buffer.
01578   for (typename Links::iterator links_iter (this->links_);
01579        ! links_iter.done ();
01580        links_iter++)
01581     link_seq[i++] = CORBA::string_dup ((*links_iter).ext_id_.in ());
01582 
01583   // Return a sequence of the buf names.
01584   return new CosTrading::LinkNameSeq (i, i, link_seq, 1);
01585 }

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::modify_link ( const char *  name,
CosTrading::FollowOption  def_pass_on_follow_rule,
CosTrading::FollowOption  limiting_follow_rule 
) [virtual]

Definition at line 1590 of file Trader_Interfaces.cpp.

References CosTrading::Link::LinkInfo::def_pass_on_follow_rule, TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, and TAO_Link_Attributes< POA_CosTrading::Link >::max_link_follow_policy().

01593 {
01594   // Ensure the link name is valid.
01595   if (! TAO_Trader_Base::is_valid_link_name (name))
01596     throw CosTrading::Link::IllegalLinkName (name);
01597 
01598   // Ensure this isn't a duplicate link name.
01599   typename Links::ENTRY* link_entry = 0;
01600   CORBA::String_var link_name (name);
01601   if (this->links_.find (link_name, link_entry) == -1)
01602     throw CosTrading::Link::UnknownLinkName (name);
01603 
01604   // Ensure that the default link behavior isn't stronger than the
01605   // limiting link behavior.
01606   if (def_pass_on_follow_rule > limiting_follow_rule)
01607     throw CosTrading::Link::DefaultFollowTooPermissive(
01608       def_pass_on_follow_rule,
01609       limiting_follow_rule);
01610 
01611   // Ensure that the limiting link behavior for this link doesn't
01612   // exceed the maximum allowed for a link.
01613   CosTrading::FollowOption follow_policy =
01614     this->max_link_follow_policy ();
01615 
01616   if (limiting_follow_rule < follow_policy)
01617     throw CosTrading::Link::LimitingFollowTooPermissive(
01618       limiting_follow_rule,
01619       follow_policy);
01620 
01621   // Adjust the link settings
01622   CosTrading::Link::LinkInfo& link_info = link_entry->int_id_;
01623   link_info.def_pass_on_follow_rule = def_pass_on_follow_rule;
01624   link_info.limiting_follow_rule = limiting_follow_rule;
01625 }

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::operator= ( const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &   )  [private]

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::remove_link ( const char *  name  )  [virtual]

Definition at line 1515 of file Trader_Interfaces.cpp.

References TAO_Trader_Base::is_valid_link_name(), TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_, and ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind().

01516 {
01517   // Ensure the link name is valid.
01518   if (! TAO_Trader_Base::is_valid_link_name (name))
01519     throw CosTrading::Link::IllegalLinkName (name);
01520 
01521   // Ensure this isn't a duplicate link name.
01522   CORBA::String_var link_name (name);
01523   if (this->links_.find (link_name) == -1)
01524     throw CosTrading::Link::UnknownLinkName (name);
01525 
01526   // Erase the link state from the map.
01527   this->links_.unbind (link_name);
01528 }


Member Data Documentation

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
Links TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_ [private]

The collection of link connecting this trader to others in the federation.

Definition at line 776 of file Trader_Interfaces.h.

Referenced by TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::add_link(), TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::list_links(), and TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::remove_link().

template<class TRADER_LOCK_TYPE, class MAP_LOCK_TYPE>
TAO_Trader<TRADER_LOCK_TYPE,MAP_LOCK_TYPE>& TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::trader_ [private]

Definition at line 778 of file Trader_Interfaces.h.


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:49:32 2010 for TAO_CosTrader by  doxygen 1.4.7