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) throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::DuplicateLinkName, CosTrading::InvalidLookupRef, CosTrading::Link::DefaultFollowTooPermissive, CosTrading::Link::LimitingFollowTooPermissive)
virtual void remove_link (const char *name) throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName)
virtual CosTrading::Link::LinkInfodescribe_link (const char *name) throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName)
virtual CosTrading::LinkNameSeqlist_links () throw (CORBA::SystemException)
virtual void modify_link (const char *name, CosTrading::FollowOption def_pass_on_follow_rule, CosTrading::FollowOption limiting_follow_rule) throw (CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName, CosTrading::Link::DefaultFollowTooPermissive, CosTrading::Link::LimitingFollowTooPermissive)

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_

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


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 930 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 1656 of file Trader_Interfaces.cpp.

01657   : TAO_Trader_Components <POA_CosTrading::Link> (trader.trading_components ()),
01658     TAO_Support_Attributes <POA_CosTrading::Link> (trader.support_attributes ()),
01659     TAO_Link_Attributes <POA_CosTrading::Link> (trader.link_attributes ()),
01660     trader_ (trader)
01661 {
01662 }

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

Definition at line 1665 of file Trader_Interfaces.cpp.

01666 {
01667 }

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
throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::DuplicateLinkName, CosTrading::InvalidLookupRef, CosTrading::Link::DefaultFollowTooPermissive, CosTrading::Link::LimitingFollowTooPermissive) [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 1672 of file Trader_Interfaces.cpp.

References ACE_CHECK, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_THROW, CosTrading::Link::LinkInfo::def_pass_on_follow_rule, CORBA::is_nil(), TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, and CosTrading::Link::LinkInfo::target.

01683 {
01684   // Ensure the link name is valid.
01685   if (! TAO_Trader_Base::is_valid_link_name (name))
01686     ACE_THROW (CosTrading::Link::IllegalLinkName (name));
01687 
01688   // Ensure this isn't a duplicate link name.
01689   CORBA::String_var link_name (name);
01690   if (this->links_.find (link_name) == 0)
01691     ACE_THROW (CosTrading::Link::DuplicateLinkName (name));
01692 
01693   // Ensure the lookup_ptr isn't nil.
01694   if (CORBA::is_nil (target))
01695     ACE_THROW (CosTrading::InvalidLookupRef (target));
01696 
01697   // Ensure that the default link behavior isn't stronger than the
01698   // limiting link behavior.
01699   if (def_pass_on_follow_rule > limiting_follow_rule)
01700     ACE_THROW (CosTrading::Link::DefaultFollowTooPermissive
01701                (def_pass_on_follow_rule, limiting_follow_rule));
01702 
01703   // Ensure that the limiting link behavior for this link doesn't
01704   // exceed the maximum allowed for a link.
01705   CosTrading::FollowOption follow_policy =
01706     this->max_link_follow_policy (ACE_ENV_SINGLE_ARG_PARAMETER);
01707   ACE_CHECK;
01708   if (limiting_follow_rule < follow_policy)
01709     ACE_THROW (CosTrading::Link::LimitingFollowTooPermissive
01710                (limiting_follow_rule, follow_policy));
01711 
01712   // Create a link info structure for this link of the federation.
01713   CosTrading::Link::LinkInfo link_info;
01714 
01715   link_info.target = CosTrading::Lookup::_duplicate (target);
01716 
01717   link_info.def_pass_on_follow_rule = def_pass_on_follow_rule;
01718   link_info.limiting_follow_rule = limiting_follow_rule;
01719   ACE_CHECK;
01720 
01721   // Insert this link into the collection of links.
01722   this->links_.bind (link_name, link_info);
01723 }

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  )  throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName) [virtual]
 

Definition at line 1749 of file Trader_Interfaces.cpp.

References ACE_CHECK_RETURN, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_NEW_THROW_EX, ACE_THROW_RETURN, 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.

01754 {
01755   // Ensure the link name is valid.
01756   if (! TAO_Trader_Base::is_valid_link_name (name))
01757     ACE_THROW_RETURN (CosTrading::Link::IllegalLinkName (name), 0);
01758 
01759   // Ensure this isn't a duplicate link name.
01760   ACE_TYPENAME Links::ENTRY* link_entry = 0;
01761   CORBA::String_var link_name (name);
01762   if (this->links_.find (link_name, link_entry) == -1)
01763     ACE_THROW_RETURN (CosTrading::Link::UnknownLinkName (name),
01764                       0);
01765 
01766   // Build a new Link Info structure.
01767   CosTrading::Link::LinkInfo* new_link_info = 0;
01768   CosTrading::Link::LinkInfo& old_link_info = link_entry->int_id_;
01769 
01770   ACE_NEW_THROW_EX (new_link_info,
01771                     CosTrading::Link::LinkInfo,
01772                     CORBA::NO_MEMORY ());
01773   ACE_CHECK_RETURN (0);
01774 
01775   new_link_info->def_pass_on_follow_rule = old_link_info.def_pass_on_follow_rule;
01776   new_link_info->limiting_follow_rule = old_link_info.limiting_follow_rule;
01777 
01778   new_link_info->target = old_link_info.target;
01779 
01780   // Delayed retrieval of register interface.
01781   // This avoids the nested upcall that would occur were we to invoke
01782   // this method in the add_link method.
01783 
01784   new_link_info->target_reg = old_link_info.target->register_if (ACE_ENV_SINGLE_ARG_PARAMETER);
01785   ACE_CHECK_RETURN (new_link_info);
01786 
01787   // return the link information for this link name.
01788   return new_link_info;
01789 }

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

Definition at line 1793 of file Trader_Interfaces.cpp.

References CosTrading::LinkName, CosTrading::LinkNameSeq, and CORBA::string_dup().

01795 {
01796   // Allocate space for the link names.
01797   size_t size = this->links_.current_size ();
01798   CORBA::ULong i = 0;
01799   CosTrading::LinkName* link_seq =
01800     CosTrading::LinkNameSeq::allocbuf (static_cast<CORBA::ULong> (size));
01801 
01802   // Copy the link names into the buffer.
01803   for (ACE_TYPENAME Links::iterator links_iter (this->links_);
01804        ! links_iter.done ();
01805        links_iter++)
01806     link_seq[i++] = CORBA::string_dup ((*links_iter).ext_id_.in ());
01807 
01808   // Return a sequence of the buf names.
01809   return new CosTrading::LinkNameSeq (i, i, link_seq, 1);
01810 }

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
throw (CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName, CosTrading::Link::DefaultFollowTooPermissive, CosTrading::Link::LimitingFollowTooPermissive) [virtual]
 

Definition at line 1815 of file Trader_Interfaces.cpp.

References ACE_CHECK, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_THROW, CosTrading::Link::LinkInfo::def_pass_on_follow_rule, TAO_Trader_Base::is_valid_link_name(), and CosTrading::Link::LinkInfo::limiting_follow_rule.

01823 {
01824   // Ensure the link name is valid.
01825   if (! TAO_Trader_Base::is_valid_link_name (name))
01826     ACE_THROW (CosTrading::Link::IllegalLinkName (name));
01827 
01828   // Ensure this isn't a duplicate link name.
01829   ACE_TYPENAME Links::ENTRY* link_entry = 0;
01830   CORBA::String_var link_name (name);
01831   if (this->links_.find (link_name, link_entry) == -1)
01832     ACE_THROW (CosTrading::Link::UnknownLinkName (name));
01833 
01834   // Ensure that the default link behavior isn't stronger than the
01835   // limiting link behavior.
01836   if (def_pass_on_follow_rule > limiting_follow_rule)
01837     ACE_THROW (CosTrading::Link::DefaultFollowTooPermissive
01838                (def_pass_on_follow_rule, limiting_follow_rule));
01839 
01840   // Ensure that the limiting link behavior for this link doesn't
01841   // exceed the maximum allowed for a link.
01842   CosTrading::FollowOption follow_policy =
01843     this->max_link_follow_policy (ACE_ENV_SINGLE_ARG_PARAMETER);
01844   ACE_CHECK;
01845 
01846   if (limiting_follow_rule < follow_policy)
01847     ACE_THROW (CosTrading::Link::LimitingFollowTooPermissive
01848                (limiting_follow_rule, follow_policy));
01849 
01850   // Adjust the link settings
01851   CosTrading::Link::LinkInfo& link_info = link_entry->int_id_;
01852   link_info.def_pass_on_follow_rule = def_pass_on_follow_rule;
01853   link_info.limiting_follow_rule = limiting_follow_rule;
01854 }

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  )  throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName) [virtual]
 

Definition at line 1728 of file Trader_Interfaces.cpp.

References ACE_THROW, and TAO_Trader_Base::is_valid_link_name().

01733 {
01734   // Ensure the link name is valid.
01735   if (! TAO_Trader_Base::is_valid_link_name (name))
01736     ACE_THROW (CosTrading::Link::IllegalLinkName (name));
01737 
01738   // Ensure this isn't a duplicate link name.
01739   CORBA::String_var link_name (name);
01740   if (this->links_.find (link_name) == -1)
01741     ACE_THROW (CosTrading::Link::UnknownLinkName (name));
01742 
01743   // Erase the link state from the map.
01744   this->links_.unbind (link_name);
01745 }


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 934 of file Trader_Interfaces.h.

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 936 of file Trader_Interfaces.h.


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 14:00:53 2006 for TAO_CosTrader by doxygen 1.3.6