orber_web.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 863 行 · 第 1/3 页

ERL
863
字号
%%--------------------------------------------------------------------%% ``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$%%%%----------------------------------------------------------------------%% File    : orber_web.erl%% Purpose : %% Created : 19 Oct 2001%%-----------------------------------------------------------------------module(orber_web).-export([menu/2, 	 configure/2,	 info/2,	 nameservice/2,	 ifr_select/2,	 ifr_data/2, 	 create/2,	 delete_ctx/2,	 add_ctx/2,	 delete_obj/2]).%%----------------------------------------------------------------------%%-------------- Defines & Includes ------------------------------------%%-----------------------------------------------------------------------include("ifr_objects.hrl").-include_lib("orber/COSS/CosNaming/CosNaming.hrl").-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").-include_lib("orber/include/corba.hrl").-include_lib("orber/src/orber_iiop.hrl").-define(DEBUG_LEVEL, 5).-define(INFO_DATA, 	[{iiop_timeout, "IIOP Request Timeout"},	 {iiop_connection_timeout, "IIOP Connection Timeout"},	 {iiop_setup_connection_timeout, "IIOP Setup Connection Timeout"},	 {iiop_port, "IIOP Port"},	 {domain, "Orber Domain"},	 {orber_nodes, "Nodes in Domain"},	 {giop_version, "Default GIOP Version"},	 {objectkeys_gc_time, "Objectkeys GC"},	 {get_interceptors, "Using Interceptors"},	 {get_debug_level, "Debug Level"},	 {get_ORBInitRef, "ORBInitRef"},	 {get_ORBDefaultInitRef, "ORBDefaultInitRef"}]).-define(IFR_DATA, [{"ir_ModuleDef", "Modules"},		   {"ir_InterfaceDef", "Interfaces"},		   {"ir_StructDef", "Structs"},		   {"ir_UnionDef", "Unions"},		   {"ir_ExceptionDef", "Exceptions"},		   {"ir_ConstantDef", "Constants"},		   {"ir_EnumDef", "Enumerants"},		   {"ir_AliasDef", "Aliases"},		   {"ir_AttributeDef", "Attributes"},		   {"ir_OperationDef", "Operations"},		   {"ir_Contained", "Contained"},		   {"ir_TypedefDef", "Typedef"}]).%%----------------------------------------------------------------------%%-------------- External API ------------------------------------------%%----------------------------------------------------------------------%% Function   : create%% Returns    : %% Description: %%----------------------------------------------------------------------create(_Env, [{"node",NodeStr}]) ->    Node  = list_to_atom(NodeStr),    is_running(Node, NodeStr),    ["<BODY BGCOLOR=\"#FFFFFF\">      <TABLE border=0 BGCOLOR=\"#FFFFFF\">      <TD ALIGN=\"center\" COLSPAN=2><FONT SIZE=6>Create a New Object</FONT></TD></TR>      <TR><TD><FORM METHOD=\"POST\" ACTION=\"./create\">      <TR><TD><INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">      <TR><TD><B>Module</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"module\" VALUE=\"\"></TD></TR>      <TR><TD><B>Arguments</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"arguments\"></TD></TR>      <TR><TD><B>Options</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"options\"></TD></TR>      <TR><TD><B>Name String</B></TD><TD><INPUT TYPE=\"TEXT\" SIZE=\"50\" NAME=\"namestr\"></TD></TR>      <TR><TD><B>Operation to use</B></TD>      <TD><B>&nbsp;&nbsp;&nbsp;<INPUT type=\"radio\" name=\"bind\" value=\"bind\" CHECKED=\"true\">Bind</B>      <B>&nbsp;&nbsp;&nbsp;<INPUT type=\"radio\" name=\"bind\" value=\"rebind\">Rebind</B></TD></TR>      <TR><TD ALIGN=\"center\" COLSPAN=2><INPUT TYPE=\"SUBMIT\" VALUE=\"Create it\"></FORM></TD></TR></TABLE>"];create(_Env, [{"node",NodeStr}, {"module", ModStr}, {"arguments",ArgsStr},	      {"options",OptionsStr}, {"namestr", Name}, {"bind", How}]) ->    Node  = list_to_atom(NodeStr),    Mod   = list_to_atom(ModStr),    Args = parse_data(ArgsStr),    Options = parse_data(OptionsStr),    case catch rpc:call(Node, Mod, oe_create, [Args, [{sup_child, true}|Options]]) of	{ok, Pid, Object} ->	    case catch bind(Node, Object, Name, How) of		{ok, IOR} ->		    ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created the object:</B><BR><BR>", IOR];		{ok, IOR, Path} ->		    ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created and stored the object as: \"", 		     Path, "\" (", pid_to_list(Pid), ")</B><BR><BR>", IOR];		What ->		    rpc:call(Node, corba, dispose, [Object]),		    orber:dbg("[~p] orber_web:create(~p, ~p, ~p, ~p, ~p); Unable to bind object: ~p", [?LINE, Node, Mod, Args, Options, Name, What], ?DEBUG_LEVEL),		    ["<BODY BGCOLOR=\"#FFFFFF\">Unable to bind object in the NameService using: ", Name]	    end;	Object when element(2, Object) == pseudo ->	    case catch bind(Node, Object, Name, How) of		{ok, IOR} ->		    ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created the object:</B><BR><BR>", IOR];		{ok, IOR, _} ->		    ["<BODY BGCOLOR=\"#FFFFFF\"><BR><B>Successfully created and stored the object as :\"", Name, "\"</B><BR><BR>", IOR];		What ->		    rpc:call(Node, corba, dispose, [Object]),		    orber:dbg("[~p] orber_web:create(~p, ~p, ~p, ~p, ~p); Unable to bind object: ~p", [?LINE, Node, Mod, Args, Options, Name, What], ?DEBUG_LEVEL),		    ["<BODY BGCOLOR=\"#FFFFFF\">Unable to bind object in the NameService using: ", Name]	    end;	What->	    orber:dbg("[~p] orber_web:create(~p, ~p, ~p, ~p, ~p); Unable to create object: ~p", [?LINE, Node, Mod, Args, Options, Name, What], ?DEBUG_LEVEL),	    ["<BODY BGCOLOR=\"#FFFFFF\">Unable to create the object."]    end.bind(Node, Obj, "", _) ->    IOR = rpc:call(Node, corba, object_to_string, [Obj]),    {ok, IOR};bind(Node, Obj, NameStr, How) ->    NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])),    Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, NameStr])),    case How of	"bind" ->	    check(rpc:call(Node, 'CosNaming_NamingContext', bind, [NS, Name, Obj])),	    IOR = rpc:call(Node, corba, object_to_string, [Obj]),	    {ok, IOR, NameStr};	"rebind" ->	    check(rpc:call(Node, 'CosNaming_NamingContext', rebind, [NS, Name, Obj])),	    IOR = rpc:call(Node, corba, object_to_string, [Obj]),	    {ok, IOR, NameStr}    end.%%----------------------------------------------------------------------%% Function   : delete_ctx%% Returns    : %% Description: %%----------------------------------------------------------------------delete_ctx(_Env, [{"node",NodeStr}, {"context", Ref}]) ->    Node = list_to_atom(NodeStr),    {Ctx, NS} = remote_resolve(Node, Ref),    Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Ref])),    check(rpc:call(Node, 'CosNaming_NamingContextExt', unbind, [NS, Name])),    check(rpc:call(Node, 'CosNaming_NamingContextExt', destroy, [Ctx])),    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=6>Successfully deleted the Context: ", Ref, "</FONT>\n      </TD></TR></TABLE>      <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-2) VALUE=\"Go Back\">\n</FORM>"].	%%----------------------------------------------------------------------%% Function   : add_ctx%% Returns    : %% Description: %%----------------------------------------------------------------------add_ctx(_Env, [{"node",_NodeStr}, {"context", "root"}, {"id", ""}]) ->    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=4>You must supply a NameString such as:<BR>                   See also 'Interoperable Naming Service' in the User's Guide.</FONT>\n      </TD></TR></TABLE>      <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\">\n</FORM>"];add_ctx(_Env, [{"node",NodeStr}, {"context", "root"}, {"id", Id}]) ->    Node = list_to_atom(NodeStr),    NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])),    Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Id])),    check(rpc:call(Node, 'CosNaming_NamingContextExt', bind_new_context, [NS, Name])),    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=6>Successfully bound the new Context: ", Id, "</FONT>\n      </TD></TR></TABLE>      <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\">\n</FORM>"];add_ctx(_Env, [{"node",NodeStr}, {"context", Ref}, {"id", Id}]) ->    NameStr = Ref ++ "/" ++ Id,    Node = list_to_atom(NodeStr),    NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])),    Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, NameStr])),    check(rpc:call(Node, 'CosNaming_NamingContextExt', bind_new_context, [NS, Name])),    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=6>Successfully bound the new Context: ", NameStr, "</FONT>\n      </TD></TR></TABLE>      <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\">\n</FORM>"].	%%----------------------------------------------------------------------%% Function   : delete_obj%% Returns    : %% Description: %%----------------------------------------------------------------------delete_obj(_Env, [{"node",NodeStr}, {"context", Ref}, {"action", "unbind"}]) ->    Node = list_to_atom(NodeStr),    NS = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])),    Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Ref])),    check(rpc:call(Node, 'CosNaming_NamingContextExt', unbind, [NS, Name])),    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=6>Successfully unbound the Object: ", Ref, "</FONT>\n      </TD></TR></TABLE>      <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-2) VALUE=\"Go Back\">\n</FORM>"];delete_obj(_Env, [{"node",NodeStr}, {"context", Ref}, {"action", "both"}]) ->    Node = list_to_atom(NodeStr),    {Obj, NS} = remote_resolve(Node, Ref),    check(rpc:call(Node, corba, dispose, [Obj])),    Name = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_name, [NS, Ref])),    check(rpc:call(Node, 'CosNaming_NamingContextExt', unbind, [NS, Name])),    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=6>Successfully disposed an unbound the Object: ", Ref, "</FONT>\n      </TD></TR></TABLE>      <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-2) VALUE=\"Go Back\">\n</FORM>"].	%%----------------------------------------------------------------------%% Function   : nameservice%% Returns    : %% Description: %%----------------------------------------------------------------------nameservice(_Env, [{"node",NodeStr}, {"context", "root"}]) ->    Node = list_to_atom(NodeStr),    is_running(Node, NodeStr),    Object = check(rpc:call(Node, corba, resolve_initial_references, ["NameService"])),    Prefix = "<TR><TD><A HREF=\"./nameservice?node=" ++ NodeStr ++ "&context=",    case catch create_context_list(Node, NodeStr, Prefix, Object, "root") of	{ok, Data} ->	    ["<BODY BGCOLOR=\"#FFFFFF\">              <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=2>               <FONT SIZE=6>NameService</FONT>\n              </TD></TR><TR BGCOLOR=\"#FFFF00\"><TD ALIGN=\"center\" COLSPAN=2>               <FONT SIZE=4>Root Context</FONT>\n              </TD></TR>", Data,              "<TR><TD><FORM Name=addctx METHOD=\"POST\" ACTION=\"./add_ctx\">              <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">              <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"root\">              <INPUT TYPE=\"TEXT\" SIZE=\"20\" NAME=\"id\"></TD>              <TD><INPUT TYPE=\"SUBMIT\" VALUE=\"New Context\"></TD></FORM></TR></TABLE>"];	Why ->	    orber:dbg("[~p] orber_web:nameservice(~p, root); Unable to create context list: ~p", [?LINE, NodeStr, Why], ?DEBUG_LEVEL),	    throw({error, "<BODY BGCOLOR=\"#FFFFFF\">Unable to create a look up the Root Context data"})      end;nameservice(_Env, [{"node",NodeStr}, {"context", Ref}]) ->    Node = list_to_atom(NodeStr),    {Object, _NS} = remote_resolve(Node, Ref),    Prefix = "<TR><TD><A HREF=\"./nameservice?node=" ++ NodeStr ++ "&context="++Ref++"/",    case catch create_context_list(Node, NodeStr, Prefix, Object, Ref) of	{ok, Data} ->	    ["<BODY BGCOLOR=\"#FFFFFF\">             <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=2>               <FONT SIZE=6>NameService</FONT></TD></TR>              <TR BGCOLOR=\"#FFFF00\"><TD ALIGN=\"center\" COLSPAN=2>               <FONT SIZE=4>", Ref, "</FONT></TD></TR>", Data,               "<TR><TD><FORM Name=addctx METHOD=\"POST\" ACTION=\"./add_ctx\">               <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">               <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\">               <INPUT TYPE=\"TEXT\" SIZE=\"20\" NAME=\"id\"></TD>               <TD><INPUT TYPE=\"SUBMIT\" VALUE=\"New Context\"></TD></FORM></TR>	      </TABLE>              <FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM></TD>"];	Why -> 	    orber:dbg("[~p] orber_web:nameservice(~p, ~p); Unable to create context list: ~p", [?LINE, NodeStr, Ref, Why], ?DEBUG_LEVEL),	    throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Context: ", Ref, 			   "<BR><BR>If You just deleted it, use the 'Go Back' button next time."]})    end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?