orber_web.erl

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

ERL
863
字号
nameservice(_Env, [{"node",NodeStr}, {"context", Ref}, {"object", Obj}]) ->    case catch create_object_data(NodeStr, Ref, Obj) of	{ok, Data} ->	    Data;	Why ->	    orber:dbg("[~p] orber_web:nameservice(~p, ~p, ~p); Unable to create data for object: ~p", [?LINE, NodeStr, Ref, Obj, Why], ?DEBUG_LEVEL),	    throw({error, ["<BODY BGCOLOR=\"#FFFFFF\">Unable to look up the Object stored as: ", Ref, 			   "<BR><BR>If You just unbound it, use the 'Go Back' button next time."]})    end.create_context_list(Node, NodeStr, Prefix, Object, Ref) ->    case check(rpc:call(Node, 'CosNaming_NamingContext', list, [Object, 100])) of	{ok, [], BI} when Ref == "root" ->	    catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]),	    {ok, "<TR><TD ALIGN=\"center\" COLSPAN=2><FONT SIZE=3><B>EMPTY<B></FONT></TD></TR>"};	{ok, [], BI} ->	    catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]),	    {ok, "<TR><TD ALIGN=\"center\"><FONT SIZE=3><B>EMPTY<B></FONT></TD>                  <TD ALIGN=\"center\"><FORM Name=deletectx METHOD=\"POST\" ACTION=\"./delete_ctx\">                  <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"" ++ NodeStr ++ "\">                  <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"" ++ Ref ++ "\">                  <INPUT TYPE=\"SUBMIT\" VALUE=\"Delete Context\"></FORM></TD></TR>"};	{ok, BL, BI} when length(BL) < 100 ->	    catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]),	    {ok, convert_contexts(BL, [], Prefix, Object, Node)};	{ok, BL, BI} ->	    Data = convert_contexts(BL, [], Prefix, Object, Node),	    {ok, create_context_list_helper(Node, BI, Data, Object, Prefix)}    end.create_context_list_helper(Node, BI, Acc, Ctx, Prefix) ->    case check(rpc:call(Node, 'CosNaming_BindingIterator', next_n, [BI, 100])) of	{true, BL} ->	    NewAcc = convert_contexts(BL, Acc, Prefix, Ctx, Node),	    create_context_list_helper(Node, BI, NewAcc, Ctx, Prefix);	{false, BL} ->	    catch rpc:call(Node, 'CosNaming_BindingIterator', destroy, [BI]),	    convert_contexts(BL, Acc, Prefix, Ctx, Node)    end.convert_contexts([], Acc, _Prefix, _Ctx, _Node) ->    Acc;convert_contexts([#'CosNaming_Binding'{binding_name = Name, 				       binding_type = ncontext}|T], 		 Acc, Prefix, Ctx, Node) ->    NameStr = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_string, [Ctx, Name])),    convert_contexts(T, [Prefix, NameStr, "\" TARGET=main><B>", NameStr, "</B></A></TD><TD><B>ncontext</B></TD></TR>"|Acc],		     Prefix, Ctx, Node);convert_contexts([#'CosNaming_Binding'{binding_name = Name, 				       binding_type = nobject}|T], 		 Acc, Prefix, Ctx, Node) ->    NameStr = check(rpc:call(Node, 'CosNaming_NamingContextExt', to_string, [Ctx, Name])),    convert_contexts(T, [Prefix, NameStr, "&object=o \" TARGET=main><B>", NameStr, "</B></A></TD><TD><B>nobject</B></A></TD></TR>"|Acc],		     Prefix, Ctx, Node).create_object_data(NodeStr, Ref, _Obj) ->    Node = list_to_atom(NodeStr),    {Object, _NS} = remote_resolve(Node, Ref),    LongIORStr = check(rpc:call(Node, corba, object_to_string, [Object])),    IFRId  = check(rpc:call(Node, iop_ior, get_typeID, [Object])),    Exists = check(rpc:call(Node, corba_object, non_existent, [Object])),    IORStr = split_IOR(1, LongIORStr, []),    {Data, External}	= case rpc:call(Node, iop_ior, get_key, [Object]) of	      {external, {Host, Port, _OK, _, _, #host_data{version = {Ma, Mi}}}} ->		  {[{"IFR Id", IFRId},		    {"Stored As", Ref},		    {"External Object", "true"},		    {"Non Existent", atom_to_list(Exists)},		    {"Host", Host},		    {"Port", integer_to_list(Port)},		    {"IIOP Version", integer_to_list(Ma) ++"."++ integer_to_list(Mi)},		    {"IOR String", IORStr}], true};	       {'internal', _Key, _, _, _} ->		  Pid = check(rpc:call(Node, corba, get_pid, [Object])),		  Interface = check(rpc:call(Node, corba, request_from_iiop, 					     [Object, oe_get_interface, false, false, false, []])),		   InterfaceData = parse_interface(Interface, []),		  {[{"IFR Id", IFRId},		    {"Stored As", Ref},		    {"External Object", "false"},		    {"Non Existent", atom_to_list(Exists)},		    {"Pid", pid_to_list(Pid)},		    {"IOR String", IORStr}|InterfaceData], false};	      {'internal_registered', {pseudo, Key}, _, _, _} ->		  Interface = check(rpc:call(Node, corba, request_from_iiop, 					     [Object, oe_get_interface, false, false, false, []])),		  InterfaceData = parse_interface(Interface, []),		  {[{"IFR Id", IFRId},		    {"Stored As", Ref},		    {"External Object", "false"},		    {"Non Existent", atom_to_list(Exists)},		    {"Pseudo Object", atom_to_list(Key)},		    {"IOR", IORStr}|InterfaceData], false};	      {'internal_registered', Key, _, _, _} ->		  Pid = check(rpc:call(Node, corba, get_pid, [Object])),		  Interface = check(rpc:call(Node, corba, request_from_iiop, 					     [Object, oe_get_interface, false, false, false, []])),		  InterfaceData = parse_interface(Interface, []),		  {[{"IFR Id", IFRId},		    {"Stored As", Ref},		    {"External Object", "false"},		    {"Non Existent", atom_to_list(Exists)},		    {"Locally Registered", atom_to_list(Key)},		    {"Pid", pid_to_list(Pid)},		    {"IOR String", IORStr}|InterfaceData], false}	  end,    Buttons = case {Exists, External} of		  {false, false} ->		      ["<TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\"> 		        <TD><FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM></TD>		        <TD ALIGN=\"center\"><FORM Name=unbindobj METHOD=\"POST\" ACTION=\"./delete_obj\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"unbind\">                        <INPUT TYPE=\"SUBMIT\" VALUE=\"Unbind\"></FORM></TD>  		        <TD ALIGN=\"center\"><FORM Name=unbinddeletobj METHOD=\"POST\" ACTION=\"./delete_obj\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"both\">                        <INPUT TYPE=\"SUBMIT\" VALUE=\"Unbind & Dispose\"></FORM></TD></TR></TABLE>"];		  _ ->		      ["<TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\"> 		        <TD><FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM></TD>		        <TD ALIGN=\"center\"><FORM Name=unbindobj METHOD=\"POST\" ACTION=\"./delete_obj\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"context\" VALUE=\"", Ref, "\">                        <INPUT TYPE=\"HIDDEN\" NAME=\"action\" VALUE=\"unbind\">                        <INPUT TYPE=\"SUBMIT\" VALUE=\"Unbind\"></FORM></TD></TR></TABLE>"]	      end,    {ok, ["<BODY BGCOLOR=\"#FFFFFF\">",	  simple_table("2", "NameService", [{"Key", "Value"}|Data]),	  Buttons]}.parse_interface([],  [{_, Op}|Acc]) ->    [{"Operations", Op}|Acc];parse_interface([], []) ->    [{"Operations", "-"}];parse_interface([{Operation,{_,Args,_}}|T], Acc) ->    parse_interface(T, [{"", Operation ++ "/" ++ integer_to_list(length(Args))}|Acc]).split_IOR(_, [], Acc) ->    lists:reverse(Acc);split_IOR(50, Str, Acc) ->    split_IOR(1, Str, ["<BR>"|Acc]);split_IOR(N, [H|T], Acc) ->    split_IOR(N+1, T, [H|Acc]).%%----------------------------------------------------------------------%% Function   : configure%% Returns    : %% Description: %%----------------------------------------------------------------------configure(_Env, [{"node",NodeStr}, {"data", DataStr}]) ->    Node = list_to_atom(NodeStr),    Data =  parse_data(DataStr),    case catch rpc:call(Node, orber, multi_configure, [Data]) of	ok ->	    "<BODY BGCOLOR=\"#FFFFFF\">Configuration successfull.";	Why -> 	    orber:dbg("[~p] orber_web:configure(~p, ~p); Unable to change configuration due to: ~p", [?LINE, NodeStr, DataStr, Why], ?DEBUG_LEVEL),	    "<BODY BGCOLOR=\"#FFFFFF\">Unable to change the configuration.<BR>             Check the spelling and/or if it is possible to update all the keys if Orber is started."    end.%%----------------------------------------------------------------------%% Function   : ifr_select%% Returns    : %% Description: %%----------------------------------------------------------------------ifr_select(_Env, [{"node",NodeStr}]) ->    Node = list_to_atom(NodeStr),    is_running(Node, NodeStr),    ["<BODY BGCOLOR=\"#FFFFFF\">       <TABLE BORDER=0><TR BGCOLOR=\"#FFFFFF\"><TD ALIGN=\"center\" COLSPAN=1>       <FONT SIZE=6>Interface Repository</FONT>      </TD></TR>", create_ifr_table(?IFR_DATA, NodeStr, []), "</TABLE>"].%%----------------------------------------------------------------------%% Function   : ifr_data%% Returns    : %% Description: %%----------------------------------------------------------------------ifr_data(_Env, [{"node",NodeStr}, {"table", TableStr}]) ->    Node = list_to_atom(NodeStr),    Table =  list_to_atom(TableStr),    WildPattern = get_wild_pattern(Table, Node),    Records = check(rpc:call(Node, mnesia, dirty_match_object, [WildPattern])),    Data = extract_ids(Records, []),    ["<BODY BGCOLOR=\"#FFFFFF\">",	simple_table("1", "Interface Repository", [TableStr|Data]),     "<FORM Name=goback><INPUT TYPE=\"button\" onClick=javascript:history.go(-1) VALUE=\"Go Back\"></FORM>"].extract_ids([], Acc) ->    lists:sort(Acc);extract_ids([#ir_ModuleDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_InterfaceDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_StructDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_UnionDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_ExceptionDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_ConstantDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_EnumDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_AliasDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_AttributeDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_OperationDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_Contained{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]);extract_ids([#ir_TypedefDef{id=Id}|T], Acc) ->    extract_ids(T, [Id|Acc]).get_wild_pattern(ir_ModuleDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_ModuleDef, wild_pattern])),    P#ir_ModuleDef{id='$1'};get_wild_pattern(ir_InterfaceDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_InterfaceDef, wild_pattern])),    P#ir_InterfaceDef{id='$1'};get_wild_pattern(ir_StructDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_StructDef, wild_pattern])),    P#ir_StructDef{id='$1'};get_wild_pattern(ir_UnionDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_UnionDef, wild_pattern])),    P#ir_UnionDef{id='$1'};get_wild_pattern(ir_ExceptionDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_ExceptionDef, wild_pattern])),    P#ir_ExceptionDef{id='$1'};get_wild_pattern(ir_ConstantDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_ConstantDef, wild_pattern])),    P#ir_ConstantDef{id='$1'};get_wild_pattern(ir_EnumDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_EnumDef, wild_pattern])),    P#ir_EnumDef{id='$1'};get_wild_pattern(ir_AliasDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_AliasDef, wild_pattern])),    P#ir_AliasDef{id='$1'};get_wild_pattern(ir_AttributeDef, Node) ->    P = check(rpc:call(Node, mnesia, table_info, [ir_AttributeDef, wild_pattern])),    P#ir_AttributeDef{id='$1'};get_wild_pattern(ir_OperationDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_OperationDef, wild_pattern])),    P#ir_OperationDef{id='$1'};get_wild_pattern(ir_Contained, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_Contained, wild_pattern])),    P#ir_Contained{id='$1'};get_wild_pattern(ir_TypedefDef, Node) ->     P = check(rpc:call(Node, mnesia, table_info, [ir_TypedefDef, wild_pattern])),    P#ir_TypedefDef{id='$1'}.create_ifr_table([], _Node, Result) ->    lists:append(lists:reverse(Result));create_ifr_table([{Table,Desc}|Rest], Node, Result) ->    create_ifr_table(Rest, Node, 		     ["<TR><TD><A HREF=\"./ifr_data?node=" ++ Node ++ 		      "&table="++Table++"\" TARGET=main><B>" ++ Desc ++"</B></A></TD></TR>"|Result]).%%----------------------------------------------------------------------%% Function   : info%% Returns    : %% Description: %%----------------------------------------------------------------------info(_Env, [{"node",NodeStr}]) ->    Node = list_to_atom(NodeStr),    is_running(Node, NodeStr),    Data = create_info_data(?INFO_DATA, Node, []),    ["<BODY BGCOLOR=\"#FFFFFF\">",     simple_table("2", "Configuration", [{"Key", "Value"}|Data],		  ["<TR><TD><FORM METHOD=\"POST\" ACTION=\"./configure\">                    <INPUT TYPE=\"HIDDEN\" NAME=\"node\" VALUE=\"", NodeStr, "\">                    <INPUT TYPE=\"TEXT\" SIZE=\"35\" NAME=\"data\" VALUE=\"[{Key, Value}]\">                    </TD><TD><INPUT TYPE=\"SUBMIT\" VALUE=\"Change it\"></TD></FORM></TR>"])].

⌨️ 快捷键说明

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