aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cosEventDomain/src/cosEventDomainApp.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cosEventDomain/src/cosEventDomainApp.erl')
-rw-r--r--lib/cosEventDomain/src/cosEventDomainApp.erl363
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 ------------------------------