aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cosNotification/src/cosNotificationApp.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cosNotification/src/cosNotificationApp.erl')
-rw-r--r--lib/cosNotification/src/cosNotificationApp.erl447
1 files changed, 447 insertions, 0 deletions
diff --git a/lib/cosNotification/src/cosNotificationApp.erl b/lib/cosNotification/src/cosNotificationApp.erl
new file mode 100644
index 0000000000..ba44163272
--- /dev/null
+++ b/lib/cosNotification/src/cosNotificationApp.erl
@@ -0,0 +1,447 @@
+%%--------------------------------------------------------------------
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-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 : cosNotificationApp.erl
+%% Purpose :
+%%----------------------------------------------------------------------
+
+-module(cosNotificationApp).
+
+%%--------------- INCLUDES -----------------------------------
+%% Local
+-include_lib("orber/include/corba.hrl").
+-include_lib("orber/include/ifr_types.hrl").
+%% Application files
+-include("CosNotification.hrl").
+-include("CosNotifyChannelAdmin.hrl").
+-include("CosNotifyComm.hrl").
+-include("CosNotifyFilter.hrl").
+
+-include("CosNotification_Definitions.hrl").
+%%--------------- EXPORTS-------------------------------------
+%% cosNotification API external
+-export([start/0, stop/0,
+ start_factory/1, start_factory/0, stop_factory/1,
+ start_global_factory/0, start_global_factory/1,
+ start_filter_factory/1, start_filter_factory/0, stop_filter_factory/1,
+ install/0, install/1, uninstall/0, uninstall/1,
+ install_event/0, install_event/1, uninstall_event/0, uninstall_event/1,
+ install_typed/0, install_typed/1, uninstall_typed/0, uninstall_typed/1,
+ create_structured_event/6, type_check/0, notify/0, max_events/0,
+ timeout_events/0, interval_events/0]).
+
+%% Application callbacks
+-export([start/2, init/1, stop/1]).
+
+%%--------------- DEFINES ------------------------------------
+-define(IDL_MODULES, ['oe_CosNotification',
+ 'oe_cosNotificationAppComm',
+ 'oe_CosNotifyComm',
+ 'oe_CosNotifyFilter',
+ 'oe_CosNotifyChannelAdmin']).
+-define(EVENT_IDL_MODULES, ['oe_CosEventComm',
+ 'oe_CosEventChannelAdmin']).
+-define(TYPED_IDL_MODULES, ['oe_CosTypedEvent',
+ 'oe_CosTypedNotification']).
+
+-define(FACTORY_NAME, oe_cosNotificationFactory).
+-define(SUPERVISOR_NAME, cosNotificationSup).
+
+
+%%------------------------------------------------------------
+%% function : install/X
+%% Arguments: - | Time (seconds)
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Install necessary data in the IFR DB
+%%------------------------------------------------------------
+
+install() ->
+ install(0).
+
+install(Time) when is_integer(Time) ->
+ install_loop(?IDL_MODULES, timer:seconds(Time));
+install(_Time) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%------------------------------------------------------------
+%% function : install_event/X
+%% Arguments: - | Time (seconds)
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Install necessary data in the IFR DB
+%%------------------------------------------------------------
+
+install_event() ->
+ install_event(0).
+
+install_event(Time) when is_integer(Time) ->
+ install_loop(?EVENT_IDL_MODULES, timer:seconds(Time));
+install_event(_Time) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%------------------------------------------------------------
+%% function : install_typed/X
+%% Arguments: - | Time (seconds)
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Install necessary data in the IFR DB
+%%------------------------------------------------------------
+
+install_typed() ->
+ install_typed(0).
+
+install_typed(Time) when is_integer(Time) ->
+ install_loop(?TYPED_IDL_MODULES, timer:seconds(Time));
+install_typed(_Time) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+install_loop([], _) ->
+ ok;
+install_loop([H|T], Time) ->
+ H:'oe_register'(),
+ timer:sleep(Time),
+ install_loop(T, Time).
+
+%%------------------------------------------------------------
+%% function : uninstall/X
+%% Arguments: - | Time (seconds)
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Remove data related to cosNotificationin from the IFR DB
+%%------------------------------------------------------------
+
+uninstall() ->
+ uninstall(0).
+
+uninstall(Time) when is_integer(Time) ->
+ uninstall_loop(lists:reverse(?IDL_MODULES), timer:seconds(Time));
+uninstall(_Time) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%------------------------------------------------------------
+%% function : uninstall_event/X
+%% Arguments: - | Time (seconds)
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Remove data related to cosNotificationin from the IFR DB
+%%------------------------------------------------------------
+
+uninstall_event() ->
+ uninstall_event(0).
+
+uninstall_event(Time) when is_integer(Time) ->
+ uninstall_loop(lists:reverse(?EVENT_IDL_MODULES), timer:seconds(Time));
+uninstall_event(_Time) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%------------------------------------------------------------
+%% function : uninstall_typed/X
+%% Arguments: - | Time (seconds)
+%% Returns : ok | EXIT | EXCEPTION
+%% Effect : Remove data related to cosNotificationin from the IFR DB
+%%------------------------------------------------------------
+
+uninstall_typed() ->
+ uninstall_typed(0).
+
+uninstall_typed(Time) when is_integer(Time) ->
+ uninstall_loop(lists:reverse(?TYPED_IDL_MODULES), timer:seconds(Time));
+uninstall_typed(_Time) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+uninstall_loop([], _) ->
+ ok;
+uninstall_loop([H|T], Time) ->
+ H:'oe_unregister'(),
+ timer:sleep(Time),
+ uninstall_loop(T, Time).
+
+
+%%------------------------------------------------------------
+%% function : start/stop
+%% Arguments:
+%% Returns :
+%% Effect : Starts or stops the cosTRansaction application.
+%%------------------------------------------------------------
+
+start() ->
+ application:start(cosNotification).
+stop() ->
+ application:stop(cosNotification).
+
+%%------------------------------------------------------------
+%% function : start_factory
+%% Arguments: none or an argumentlist whith default values.
+%% Returns : ObjectRef | {'EXCEPTION', _} | {'EXIT', Reason}
+%% Effect : Starts a CosNotifyChannelAdmin_EventChannelFactory
+%%------------------------------------------------------------
+start_factory() ->
+ start_factory(?not_DEFAULT_SETTINGS).
+
+start_factory(Args) when is_list(Args) ->
+ SO = 'CosNotification_Common':get_option(server_options, Args, ?not_DEFAULT_SETTINGS),
+ SPEC = ['CosNotifyChannelAdmin_EventChannelFactory',Args,
+ [{sup_child, true},
+ {regname, {local, oe_cosNotificationFactory}}|SO]],
+ case supervisor:start_child(?SUPERVISOR_NAME, SPEC) of
+ {ok, Pid, Obj} when is_pid(Pid) ->
+ Obj;
+ Other->
+ orber:dbg("[~p] cosNotificationApp:start_factory( ~p ).~n"
+ "Reason: ~p~n", [?LINE, Args, Other], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO})
+ end;
+start_factory(Args) ->
+ orber:dbg("[~p] cosNotificationApp:start_factory( ~p ).~n"
+ "Bad parameters~n", [?LINE, Args], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+%%------------------------------------------------------------
+%% function : start_global_factory
+%% Arguments: none or an argumentlist whith default values.
+%% Returns : ObjectRef | {'EXCEPTION', _} | {'EXIT', Reason}
+%% Effect : Starts a CosNotifyChannelAdmin_EventChannelFactory
+%%------------------------------------------------------------
+start_global_factory() ->
+ start_global_factory(?not_DEFAULT_SETTINGS).
+
+start_global_factory(Args) when is_list(Args) ->
+ SO = 'CosNotification_Common':get_option(server_options, Args, ?not_DEFAULT_SETTINGS),
+ Name = create_name(),
+ SPEC = ['CosNotifyChannelAdmin_EventChannelFactory',Args,
+ [{sup_child, true},
+ {regname, {global, Name}}|SO]],
+ case supervisor:start_child(?SUPERVISOR_NAME, SPEC) of
+ {ok, Pid, Obj} when is_pid(Pid) ->
+ Obj;
+ Other->
+ orber:dbg("[~p] cosNotificationApp:start_global_factory( ~p ).~n"
+ "Reason: ~p~n", [?LINE, Args, Other], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO})
+ end;
+start_global_factory(Args) ->
+ orber:dbg("[~p] cosNotificationApp:start_global_factory( ~p ).~n"
+ "Bad parameters~n", [?LINE, Args], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+
+%%------------------------------------------------------------
+%% function : stop_factory
+%% Arguments: Factory Object Reference
+%% Returns : ok | {'EXCEPTION', _}
+%% Effect :
+%%------------------------------------------------------------
+
+stop_factory(Fac)->
+ corba:dispose(Fac).
+
+%%------------------------------------------------------------
+%% function : start_filter_factory
+%% Arguments: none or an argumentlist which by default is defined
+%% in CosNotification_Definitions.hrl, i.e., '?not_FILTERFAC_DEF'
+%% Returns : ObjectRef | {'EXCEPTION', _} | {'EXIT', Reason}
+%% Effect : Starts a CosNotifyChannelAdmin_EventChannelFactory
+%%------------------------------------------------------------
+start_filter_factory() ->
+ start_filter_factory([{typecheck, true},
+ {tty, false},
+ {logfile, false},
+ {server_options, []}]).
+start_filter_factory(Args) when is_list(Args) ->
+ SO = 'CosNotification_Common':get_option(server_options, Args,
+ ?not_DEFAULT_SETTINGS),
+ SPEC = ['CosNotifyFilter_FilterFactory',Args, [{sup_child, true}|SO]],
+ case supervisor:start_child(?SUPERVISOR_NAME, SPEC) of
+ {ok, Pid, Obj} when is_pid(Pid) ->
+ Obj;
+ Other->
+ orber:dbg("[~p] cosNotificationApp:start_filter_factory( ~p ).~n"
+ "Reason: ~p~n", [?LINE, Args, Other], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO})
+ end;
+start_filter_factory(Args) ->
+ orber:dbg("[~p] cosNotificationApp:start_filter_factory( ~p ).~n"
+ "Bad parameters~n", [?LINE, Args], ?DEBUG_LEVEL),
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+
+%%------------------------------------------------------------
+%% function : stop_filter_factory
+%% Arguments: FilterFactory Object Reference
+%% Returns : ok | {'EXCEPTION', _}
+%% Effect :
+%%------------------------------------------------------------
+
+stop_filter_factory(Fac)->
+ corba:dispose(Fac).
+
+
+%%------------------------------------------------------------
+%% function : create_structured_event
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+create_structured_event(StrD,StrT,StrE,PSeqV,PSeqF,AnyR)
+ when is_list(StrD) andalso is_list(StrT) andalso is_list(StrE)
+ andalso is_list(PSeqV) andalso is_list(PSeqF) andalso
+ is_record(AnyR, any) ->
+#'CosNotification_StructuredEvent'{header =
+ #'CosNotification_EventHeader'{fixed_header =
+ #'CosNotification_FixedEventHeader'{event_type =
+ #'CosNotification_EventType'{domain_name=StrD,
+ type_name=StrT},
+ event_name = StrE},
+ variable_header = PSeqV},
+ filterable_data = PSeqF,
+ remainder_of_body = AnyR};
+create_structured_event(_StrD,_StrT,_StrE,_PSeqV,_PSeqF,_AnyR) ->
+ corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).
+
+
+%%------------------------------------------------------------
+%% function : type_check
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+type_check() ->
+ case application:get_env(cosNotification, type_check) of
+ {ok, Boolean} when is_atom(Boolean) ->
+ Boolean;
+ _ ->
+ true
+ end.
+
+%%------------------------------------------------------------
+%% function : notify
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+notify() ->
+ case application:get_env(cosNotification, notify) of
+ {ok, Module} when is_atom(Module) ->
+ Module;
+ _ ->
+ false
+ end.
+
+%%------------------------------------------------------------
+%% function : max_events
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+max_events() ->
+ case application:get_env(cosNotification, max_events) of
+ {ok, Max} when is_integer(Max) ->
+ Max;
+ _ ->
+ 50
+ end.
+
+%%------------------------------------------------------------
+%% function : timeout_events
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+timeout_events() ->
+ case application:get_env(cosNotification, timeout_events) of
+ {ok, Max} when is_integer(Max) ->
+ Max;
+ _ ->
+ 3000000 %% 5 minutes
+ end.
+
+
+%%------------------------------------------------------------
+%% function : interval_events
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+interval_events() ->
+ case application:get_env(cosNotification, interval_events) of
+ {ok, Max} when is_integer(Max) ->
+ Max;
+ _ ->
+ 10000 %% 10 seconds
+ end.
+
+
+%%------------------------------------------------------------
+%% function : start
+%% Arguments: Type - see module application
+%% Arg - see module application
+%% Returns :
+%% Effect : Module callback for application
+%%------------------------------------------------------------
+
+start(_, _) ->
+ supervisor:start_link({local, ?SUPERVISOR_NAME}, cosNotificationApp, app_init).
+
+
+%%------------------------------------------------------------
+%% function : stop
+%% Arguments: Arg - see module application
+%% Returns :
+%% Effect : Module callback for application
+%%------------------------------------------------------------
+
+stop(_) ->
+ ok.
+
+%%------------------------------------------------------------
+%% function : init
+%% Arguments:
+%% Returns :
+%% Effect :
+%%------------------------------------------------------------
+
+%% Starting using create_factory/X
+init(own_init) ->
+ {ok,{{simple_one_for_one,50,10},
+ [{"oe_NotChild",
+ {'CosNotification_Common',create_link, []},
+ transient,100000,worker,
+ ['CosNotifyChannelAdmin_EventChannel',
+ 'CosNotifyChannelAdmin_EventChannel_impl']}]}};
+%% When starting as an application.
+init(app_init) ->
+ {ok,{{simple_one_for_one,50,10},
+ [{"oe_NotChild",
+ {'CosNotification_Common',create_link, []},
+ transient,100000,worker,
+ ['CosNotifyChannelAdmin_EventChannel',
+ 'CosNotifyChannelAdmin_EventChannel_impl']}]}}.
+
+
+
+%%------------------------------------------------------------
+%% function : create_name
+%% Arguments:
+%% Returns :
+%% Effect : Create a unique name to use when, for eaxmple, starting
+%% a new server.
+%%------------------------------------------------------------
+create_name() ->
+ {MSec, Sec, USec} = erlang:now(),
+ lists:concat(['oe_',node(),'_',MSec, '_', Sec, '_', USec]).
+
+%%--------------- END OF MODULE ------------------------------