%%-------------------------------------------------------------------- %% %% %CopyrightBegin% %% %% Copyright Ericsson AB 1997-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: lname.erl %%----------------------------------------------------------------- -module(lname). -include_lib("orber/include/corba.hrl"). -include("CosNaming.hrl"). -include("lname.hrl"). %%----------------------------------------------------------------- %% External exports %%----------------------------------------------------------------- -export([create/0, insert_component/3, get_component/2, delete_component/2, num_component/1, equal/2, less_than/2, to_idl_form/1, from_idl_form/1, check_name/1, new/1]). %%----------------------------------------------------------------- %% Internal exports %%----------------------------------------------------------------- -export([]). %% DEBUG INFO -define(DEBUG_LEVEL, 5). %%----------------------------------------------------------------- %% External interface functions %%----------------------------------------------------------------- create() -> []. insert_component(_, I, _) when I < 1-> corba:raise(#'LName_NoComponent'{}); insert_component([], I, _) when I > 1-> corba:raise(#'LName_NoComponent'{}); insert_component(Name, 1, Component) when is_record(Component, 'CosNaming_NameComponent') -> [Component |Name]; insert_component([H|T], I, Component) when is_record(Component, 'CosNaming_NameComponent') -> [H |insert_component(T, I-1, Component)]; insert_component(_, _, Component) -> orber:dbg("[~p] ~p:insert_component(~p); Not a NameComponent.~n", [?LINE, ?MODULE, Component], ?DEBUG_LEVEL), corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}). get_component(_, I) when I < 1-> corba:raise(#'LName_NoComponent'{}); get_component([], _) -> corba:raise(#'LName_NoComponent'{}); get_component([H|_T], 1) -> H; get_component([_|T], I) -> get_component(T, I-1). delete_component(_, I) when I < 1-> corba:raise(#'LName_NoComponent'{}); delete_component([], _) -> corba:raise(#'LName_NoComponent'{}); delete_component([_|T], 1) -> T; delete_component([H|T], I) -> [H | delete_component(T, I-1)]. num_component(Name) -> num_component(Name, 0). equal(Name, N) -> N == Name. less_than(Name, N) -> Name < N. to_idl_form(Name) -> case check_name(Name) of false -> corba:raise(#'LName_InvalidName'{}); true -> Name end. from_idl_form(Name) -> Name. %%destroy() -> % not needed in erlang %% ok. %%----------------------------------------------------------------- %% External Functions not in the CosNaming standard %%----------------------------------------------------------------- new([]) -> []; new([{Id, Kind} | List]) -> [lname_component:new(Id, Kind) | new(List)]; new([Id |List]) when is_list(Id) -> [lname_component:new(Id) | new(List)]. %%----------------------------------------------------------------- %% Internal Functions %%----------------------------------------------------------------- num_component([], N) -> N; num_component([_|T], N) -> num_component(T, N+1). check_name([]) -> true; check_name([H|T]) -> case catch lname_component:get_id(H) of {'EXCEPTION', _E} -> false; _ -> check_name(T) end.