aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ic/examples/pre_post_condition
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ic/examples/pre_post_condition')
-rw-r--r--lib/ic/examples/pre_post_condition/Makefile128
-rw-r--r--lib/ic/examples/pre_post_condition/ReadMe.txt73
-rw-r--r--lib/ic/examples/pre_post_condition/ex.idl29
-rw-r--r--lib/ic/examples/pre_post_condition/m_i_impl.erl49
-rw-r--r--lib/ic/examples/pre_post_condition/tracer.erl56
5 files changed, 335 insertions, 0 deletions
diff --git a/lib/ic/examples/pre_post_condition/Makefile b/lib/ic/examples/pre_post_condition/Makefile
new file mode 100644
index 0000000000..68e2168e1e
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/Makefile
@@ -0,0 +1,128 @@
+#
+# %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%
+#
+#
+# ``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 via the world wide web 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.
+#
+# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+# AB. All Rights Reserved.''
+#
+# $Id$
+#
+include $(ERL_TOP)/make/target.mk
+
+EBIN= ./
+
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../../vsn.mk
+VSN=$(IC_VSN)
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/ic-$(VSN)
+
+# ----------------------------------------------------
+# Target Specs
+# ----------------------------------------------------
+
+IDL_FILES = \
+ ex.idl
+
+GEN_ERL_MODULES = \
+ oe_ex \
+ m_i \
+ m_NotAnInteger
+
+MODULES= \
+ m_i_impl \
+ tracer
+
+GEN_HRL_FILES = \
+ oe_ex.hrl \
+ m.hrl \
+ m_i.hrl
+
+HRL_FILES =
+TXT_FILES = ReadMe.txt
+
+ERL_FILES= $(MODULES:%=%.erl)
+
+
+TARGET_FILES = \
+ $(GEN_ERL_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
+ $(MODULES:%=$(EBIN)/%.$(EMULATOR))
+
+# ----------------------------------------------------
+# FLAGS
+# ----------------------------------------------------
+ERL_LOCAL_FLAGS += -pa $(ERL_TOP)/lib/orber/ebin -pa $(ERL_TOP)/lib/ic/ebin
+# The -pa option is just used temporary until erlc can handle
+# includes from other directories than ../include .
+ERL_COMPILE_FLAGS += \
+ $(ERL_LOCAL_FLAGS) \
+ -pa $(ERL_TOP)/lib/orber -I$(ERL_TOP)/lib/orber
+YRL_FLAGS =
+
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+debug opt: $(TARGET_FILES)
+
+clean:
+ rm -f $(TARGET_FILES) $(GEN_ERL_MODULES:%=%.erl) $(GEN_HRL_FILES) $(CLASS_FILES)
+ rm -f errs core *~
+
+docs:
+
+test: $(TEST_TARGET_FILES)
+
+
+$(GEN_ERL_MODULES:%=%.erl) $(GEN_HRL_FILES): ex.idl
+ erlc $(ERL_LOCAL_FLAGS) +'{precond,{tracer,pre}}' \
+ +'{{postcond,"m::i::f"},{tracer,post}}' ex.idl
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+
+release_spec: opt
+ $(INSTALL_DIR) $(RELSYSDIR)/examples/pre_post_condition
+ $(INSTALL_DATA) $(ERL_FILES) $(IDL_FILES) $(TXT_FILES) $(RELSYSDIR)/examples/pre_post_condition
+
+
+release_docs_spec:
+
+
diff --git a/lib/ic/examples/pre_post_condition/ReadMe.txt b/lib/ic/examples/pre_post_condition/ReadMe.txt
new file mode 100644
index 0000000000..9db54f438d
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/ReadMe.txt
@@ -0,0 +1,73 @@
+ ``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 via the world wide web 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.
+
+ The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+ Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+ AB. All Rights Reserved.''
+
+ $Id$
+
+
+This example shows how pre and post condition can be used for a Corba server object.
+
+
+The example consists of three files;
+
+ex.idl - the interface specification
+m_i_impl.erl - the server implementation
+tracer.erl - a module which contains a pre and a post condition
+
+
+The IDL file can for example be compiled with the following options:
+
+ic:gen(ex, [{precond, {tracer, pre}},{{postcond, "m::i::f"}, {tracer, post}}]).
+
+The result is that the function m::i::f gets both a pre and post condition call while
+the function m::i::g just get a pre condition call.
+
+
+A pre/post condition function should always return the atom ok and if something is wrong
+it should raise an exception ( ex: corba:raise(#userexception{}) ).
+
+
+
+
+Compile all erlang files and test the application.
+
+First start an erlang node, then type the following commands in the erlang shell.
+
+1> mnesia:create_schema([]).
+2> orber:install([]).
+3> orber:start().
+3>
+3> X = m_i:oe_create().
+4> catch m_i:f(X, 17).
+Precond called in process <0.139.0>: m_i:f() [[],17]
+f working ....
+Postcond called in process <0.139.0>: m_i:f() [[],17] {reply,{17,17},[]}
+17
+5>
+5> catch m_i:f(X, q).
+6> {'EXCEPTION',{m_NotAnInteger,"IDL:m/NotAnInteger:1.0"}}
+7>
+7>m_i:g(X, 17).
+Precond called in process <0.139.0>: m_i:g() [[],17]
+ok
+g working ....
+8>
+8>corba_boa:dispose(X).
+9> orber:stop().
+10>
+
+
+
+
+
diff --git a/lib/ic/examples/pre_post_condition/ex.idl b/lib/ic/examples/pre_post_condition/ex.idl
new file mode 100644
index 0000000000..e632448cc5
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/ex.idl
@@ -0,0 +1,29 @@
+// ``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 via the world wide web 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.
+//
+// The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+// Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+// AB. All Rights Reserved.''
+//
+// $Id$
+//
+
+module m {
+
+ exception NotAnInteger {};
+
+ interface i {
+ short f(in short i);
+ oneway void g(in long i);
+ };
+
+};
+
diff --git a/lib/ic/examples/pre_post_condition/m_i_impl.erl b/lib/ic/examples/pre_post_condition/m_i_impl.erl
new file mode 100644
index 0000000000..d43ee0ac94
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/m_i_impl.erl
@@ -0,0 +1,49 @@
+%%
+%% %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%
+%%
+%%
+%%------------------------------------------------------------
+%%
+%% Example
+%%
+%%------------------------------------------------------------
+-module(m_i_impl).
+
+%% Standard functions
+-export([init/1, terminate/2]).
+%% Interface functions
+-export([f/2, g/2]).
+
+init(_Env) ->
+ {ok, []}.
+
+terminate(_From, _Reason) ->
+ ok.
+
+f(State, In) ->
+ io:format("f working ....\n", []),
+ {reply, In, State}.
+
+g(State, _In) ->
+ io:format("g working ....\n", []),
+ {noreply, State}.
+
+
+
+
+
diff --git a/lib/ic/examples/pre_post_condition/tracer.erl b/lib/ic/examples/pre_post_condition/tracer.erl
new file mode 100644
index 0000000000..4cba7ba9bb
--- /dev/null
+++ b/lib/ic/examples/pre_post_condition/tracer.erl
@@ -0,0 +1,56 @@
+%%
+%% %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: tracer.erl
+%%
+%% Description:
+%% This file contains an example of pre and post conditions for
+%% the corba backend.
+%%
+%%-----------------------------------------------------------------
+-module(tracer).
+-include("m.hrl").
+
+%%-----------------------------------------------------------------
+%% External exports
+%%-----------------------------------------------------------------
+-export([pre/3, post/4]).
+
+%%-----------------------------------------------------------------
+%% Internal exports
+%%-----------------------------------------------------------------
+-export([]).
+
+%%-----------------------------------------------------------------
+%% External functions
+%%-----------------------------------------------------------------
+pre(M, F, [State, I]) when is_integer(I) ->
+ io:format("Precond called in process ~p: ~s:~s() ~p\n", [self(), M, F, [State, I]]),
+ ok;
+pre(_M, _F, _A) -> %% Just an silly example to get an exception case
+ corba:raise(#'m_NotAnInteger'{}).
+
+post(M, F, A, R) ->
+ io:format("Postcond called in process ~p: ~s:~s() ~p ~p\n", [self(), M, F, A, R]),
+ ok.
+
+%%-----------------------------------------------------------------
+%% Internal functions
+%%-----------------------------------------------------------------