#include <Trader_Interfaces.h>
Inheritance diagram for TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >:
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::LinkInfo * | describe_link (const char *name) throw (CORBA::SystemException, CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName) |
virtual CosTrading::LinkNameSeq * | list_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_ |
|
Definition at line 930 of file Trader_Interfaces.h. |
|
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 } |
|
Definition at line 1665 of file Trader_Interfaces.cpp.
01666 { 01667 } |
|
|
|
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 } |
|
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 } |
|
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 } |
|
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 } |
|
|
|
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 } |
|
The collection of link connecting this trader to others in the federation. Definition at line 934 of file Trader_Interfaces.h. |
|
Definition at line 936 of file Trader_Interfaces.h. |