diff options
Diffstat (limited to 'lib/cosEventDomain/src/cosEventDomainApp.erl')
-rw-r--r-- | lib/cosEventDomain/src/cosEventDomainApp.erl | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/lib/cosEventDomain/src/cosEventDomainApp.erl b/lib/cosEventDomain/src/cosEventDomainApp.erl new file mode 100644 index 0000000000..d57f51443c --- /dev/null +++ b/lib/cosEventDomain/src/cosEventDomainApp.erl @@ -0,0 +1,363 @@ +%%-------------------------------------------------------------------- +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2001-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +%% +%%-------------------------------------------------------------------- +%% File : cosEventDomainApp.erl +%% Purpose : +%%-------------------------------------------------------------------- + +-module(cosEventDomainApp). + +%%--------------- INCLUDES ----------------------------------- +-include_lib("orber/include/corba.hrl"). +-include_lib("orber/include/ifr_types.hrl"). +-include_lib("cosNotification/include/CosNotification.hrl"). +%% Application files +-include("cosEventDomainApp.hrl"). +-include("CosEventDomainAdmin.hrl"). + +%%--------------- EXPORTS ------------------------------------ +%% External MISC +-export([get_option/3, + create_name/2, + create_name/1, + create_id/0, + create_id/1, + is_debug_compiled/0, + install/0, + uninstall/0, + start_factory/0, + start_factory/1, + start_factory_link/0, + start_factory_link/1, + stop_factory/1, + start/0, + stop/0, + create_link/3, + get_qos/1, + get_admin/1]). + +%% Application callbacks +-export([start/2, init/1, stop/1]). + +%%--------------- DEFINES ------------------------------------ + +-define(SUPERVISOR_NAME, oe_cosEventDomainSup). +-define(SUP_FLAG, {simple_one_for_one,50,10}). + +-define(SUP_SPEC(Name, Args), + ['CosEventDomainAdmin_EventDomain',Args, + [{sup_child, true}, {regname, {global, Name}}]]). +-define(SUP_CHILD, + {"oe_EventDomainChild", + {cosEventDomainApp,create_link, []}, + transient,100000,worker, + ['CosEventDomainAdmin_EventDomain']}). + + +-define(DEFAULT_OPTIONS, []). + +%%--------------- DEFINITIONS OF CONSTANTS ------------------- +%%--------------- EXTERNAL MISC FUNCTIONS -------------------- +%%-----------------------------------------------------------% +%% function : install +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +install() -> + oe_CosEventDomainAdmin:oe_register(). + +%%-----------------------------------------------------------% +%% function : uninstall +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +uninstall() -> + oe_CosEventDomainAdmin:oe_unregister(). + +%%-----------------------------------------------------------% +%% function : start/stop +%% Arguments: +%% Returns : +%% Effect : Starts or stops the cosTime application. +%%------------------------------------------------------------ + +start() -> + application:start(cosEventDomain). +stop() -> + application:stop(cosEventDomain). + +%%-----------------------------------------------------------% +%% function : start +%% Arguments: Type - see module application +%% Arg - see module application +%% Returns : +%% Effect : Module callback for application +%%------------------------------------------------------------ + +start(_, _) -> + supervisor:start_link({local, ?SUPERVISOR_NAME}, cosEventDomainApp, app_init). + + +%%-----------------------------------------------------------% +%% function : stop +%% Arguments: Arg - see module application +%% Returns : +%% Effect : Module callback for application +%%------------------------------------------------------------ + +stop(_) -> + ok. + +%%-----------------------------------------------------------% +%% function : start_channel +%% Arguments: - +%% Returns : +%% Effect : +%%------------------------------------------------------------ +start_factory() -> + start_factory(?DEFAULT_OPTIONS). + +start_factory(Options) when is_list(Options) -> + 'CosEventDomainAdmin_EventDomainFactory':oe_create(Options); +start_factory(Options) -> + orber:dbg("[~p] cosEventDomainApp:start_factory(~p);~n" + "Options not correct.", + [?LINE, Options], ?DEBUG_LEVEL), + corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}). + +%%-----------------------------------------------------------% +%% function : start_channel +%% Arguments: - +%% Returns : +%% Effect : +%%------------------------------------------------------------ +start_factory_link() -> + start_factory_link(?DEFAULT_OPTIONS). + +start_factory_link(Options) when is_list(Options) -> + 'CosEventDomainAdmin_EventDomainFactory':oe_create_link(Options); +start_factory_link(Options) -> + orber:dbg("[~p] cosEventDomainApp:start_factory_link(~p);~n" + "Options not correct.", + [?LINE, Options], ?DEBUG_LEVEL), + corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}). + +%%-----------------------------------------------------------% +%% function : stop_factory +%% Arguments: ChannelObj +%% Returns : +%% Effect : +%%------------------------------------------------------------ +stop_factory(ChannelObj) -> + corba:dispose(ChannelObj). + +%%-----------------------------------------------------------% +%% function : init +%% Arguments: +%% Returns : +%% Effect : +%%------------------------------------------------------------ + +%% Starting using create_factory/X +init(own_init) -> + {ok,{?SUP_FLAG, [?SUP_CHILD]}}; +%% When starting as an application. +init(app_init) -> + {ok,{?SUP_FLAG, [?SUP_CHILD]}}. + + +%%------------------------------------------------------------ +%% function : create_link +%% Arguments: Module - which Module to call +%% Env/ArgList - ordinary oe_create arguments. +%% Returns : +%% Exception: +%% Effect : Necessary since we want the supervisor to be a +%% 'simple_one_for_one'. Otherwise, using for example, +%% 'one_for_one', we have to call supervisor:delete_child +%% to remove the childs startspecification from the +%% supervisors internal state. +%%------------------------------------------------------------ +create_link(Module, Env, ArgList) -> + Module:oe_create_link(Env, ArgList). + +%%-----------------------------------------------------------% +%% function : get_option +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +get_option(Key, OptionList, DefaultList) -> + case lists:keysearch(Key, 1, OptionList) of + {value,{Key,Value}} -> + Value; + _ -> + case lists:keysearch(Key, 1, DefaultList) of + {value,{Key,Value}} -> + Value; + _-> + {error, "Invalid option"} + end + end. +%%-----------------------------------------------------------% +%% function : create_name/2 +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +create_name(Name,Type) -> + {MSec, Sec, USec} = erlang:now(), + lists:concat(['oe_',node(),'_',Type,'_',Name,'_',MSec, '_', Sec, '_', USec]). + +%%-----------------------------------------------------------% +%% function : create_name/1 +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +create_name(Type) -> + {MSec, Sec, USec} = erlang:now(), + lists:concat(['oe_',node(),'_',Type,'_',MSec, '_', Sec, '_', USec]). + +%%------------------------------------------------------------ +%% function : create_id/0 +%% Arguments: - +%% Returns : CosEventDomainAdmin::DomainID (long) +%% Exception: +%% Purpose : +%%------------------------------------------------------------ +create_id(2147483647) -> + -2147483648; +create_id(OldID) -> + OldID+1. + + +create_id() -> + {_A,_B,C}=now(), + C. +%%------------------------------------------------------------ +%% function : get_qos +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +get_qos([]) -> + []; +get_qos(Properties) -> + get_qos(Properties, [], []). + +get_qos([], Supported, []) -> + Supported; +get_qos([], _, Unsupported) -> + corba:raise(#'CosNotification_UnsupportedQoS'{qos_err = Unsupported}); +get_qos([#'CosNotification_Property'{name = ?CycleDetection, + value= #any{value = ?AuthorizeCycles}}|T], + Supported, Unsupported) -> + get_qos(T, [{?CycleDetection, ?AuthorizeCycles}|Supported], Unsupported); +get_qos([#'CosNotification_Property'{name = ?CycleDetection, + value= #any{value = ?ForbidCycles}}|T], + Supported, Unsupported) -> + get_qos(T, [{?CycleDetection, ?ForbidCycles}|Supported], Unsupported); +get_qos([#'CosNotification_Property'{name = ?CycleDetection}|T], + Supported, Unsupported) -> + %% Illegal value supplied. + get_qos(T, Supported, + [#'CosNotification_PropertyError' + {code = 'UNSUPPORTED_VALUE', + name = ?CycleDetection, + available_range = #'CosNotification_PropertyRange' + {low_val=any:create(orber_tc:short(), ?AuthorizeCycles), + high_val=any:create(orber_tc:short(), ?ForbidCycles)}}|Unsupported]); +get_qos([#'CosNotification_Property'{name = ?DiamondDetection, + value= #any{value = ?AuthorizeDiamonds}}|T], + Supported, Unsupported) -> + get_qos(T, [{?DiamondDetection, ?AuthorizeDiamonds}|Supported], Unsupported); +get_qos([#'CosNotification_Property'{name = ?DiamondDetection, + value= #any{value = ?ForbidDiamonds}}|T], + Supported, Unsupported) -> + get_qos(T, [{?DiamondDetection, ?ForbidDiamonds}|Supported], Unsupported); +get_qos([#'CosNotification_Property'{name = ?DiamondDetection}|T], + Supported, Unsupported) -> + %% Illegal value supplied. + get_qos(T, Supported, + [#'CosNotification_PropertyError' + {code = 'UNSUPPORTED_VALUE', + name = ?DiamondDetection, + available_range = #'CosNotification_PropertyRange' + {low_val=any:create(orber_tc:short(), ?AuthorizeDiamonds), + high_val=any:create(orber_tc:short(), ?ForbidDiamonds) + }} | Unsupported]); +get_qos([#'CosNotification_Property'{name = Name}|T], Supported, Unsupported) -> + %% Unknown QoS supplied. + get_qos(T, Supported, + [#'CosNotification_PropertyError' + {code = 'BAD_PROPERTY', + name = Name, + available_range = #'CosNotification_PropertyRange' + {low_val=any:create(orber_tc:null(), null), + high_val=any:create(orber_tc:null(), null)}} | Unsupported]). + +%%------------------------------------------------------------ +%% function : get_admin +%% Arguments: +%% Returns : {"EXCEPTION', #'CosNotification_PropertyError'{}} +%% Exception: +%% Effect : No Admin supported. +%%------------------------------------------------------------ +get_admin([]) -> + []; +get_admin(Properties) -> + get_admin(Properties, []). + +get_admin([], Unsupported) -> + corba:raise(#'CosNotification_UnsupportedAdmin'{admin_err = Unsupported}); +get_admin([#'CosNotification_Property'{name = Name}|T], Unsupported) -> + %% Unknown QoS supplied. + get_admin(T, [#'CosNotification_PropertyError' + {code = 'BAD_PROPERTY', + name = Name, + available_range = #'CosNotification_PropertyRange' + {low_val=any:create(orber_tc:null(), null), + high_val=any:create(orber_tc:null(), null)}} | Unsupported]). + + +%%------------------------------------------------------------ +%% function : is_debug_compiled +%% Arguments: +%% Returns : +%% Exception: +%% Effect : +%%------------------------------------------------------------ +-ifdef(debug). + is_debug_compiled() -> true. +-else. + is_debug_compiled() -> false. +-endif. + +%%--------------- END OF MODULE ------------------------------ |