(* ---------------------------------------------------------------------- *)
(* Common Object Service
*)
(* ---------------------------------------------------------------------- *)
(* ICosNaming - Interface Module for the Common Object Service
"Naming Service"
Purpose:
Provide a way to locate a service (object) given
a name and a type.
Notes:
Names are strings and unique to a Naming Context.
Naming Contexts can contain other Naming Contexts.
* Most of this is defined by OMG in the
Common Object Services Volume 1 specification.
Differences:
The ANY type is not available in ILU so SBH (string
binding handles) were used instead.
*)
(* ---------------------------------------------------------------------- *)
INTERFACE ICosNaming
IMPORTS
ICosLifeCycle
END;
TYPE TString = OPTIONAL ilu.CString;
TYPE TObjectSBH = OPTIONAL ilu.CString;
(* ---------------------------------------------------------------------- *)
(* A few suggested kinds for Names *)
(* ---------------------------------------------------------------------- *)
CONSTANT kObjectKind : TString = "Object";
CONSTANT kNamingContextKind : TString = "Naming Context";
CONSTANT kModuleInterfaceKind : TString = "Module Interface";
CONSTANT kObjectInterfaceKind : TString = "Object Interface";
CONSTANT kObjectImplementationKind : TString = "Object Implementation";
(* ---------------------------------------------------------------------- *)
(* Names *)
(* ---------------------------------------------------------------------- *)
TYPE TNameComponent = RECORD
aId : TString, (* identifier *)
aKind : TString (* the type *)
END;
TYPE TName = SEQUENCE OF TNameComponent;
(* ---------------------------------------------------------------------- *)
(* Name Binding Types *)
(* --Notes: *)
(* These structures are only used with the List() method for *)
(* dumping the contents of the database. *)
(* ---------------------------------------------------------------------- *)
TYPE EBindingType = ENUMERATION
kObject,
kContext
END;
TYPE TBinding = RECORD
aName : TName,
aType : EBindingType
END;
TYPE TBindingList = SEQUENCE OF TBinding;
(* ---------------------------------------------------------------------- *)
(* Forward declaration for CNamingContext. *)
TYPE CPNamingContext = CNamingContext;
(* ---------------------------------------------------------------------- *)
(* Exception Definitions *)
(* ---------------------------------------------------------------------- *)
TYPE ENotFoundReason = ENUMERATION
kMissingNode, (* cannot find binding. *)
kNotContext, (* found object, expecting context *)
kNotObject (* found context, expecting context *)
END;
TYPE TNotFoundReason = RECORD
aReason : ENotFoundReason, (* why? *)
aContext : CPNamingContext, (* where? *)
aRestOfName : TName (* what? *)
END;
TYPE TCannotProceed = RECORD
aContext : CPNamingContext, (* where? *)
aRestOfName : TName (* what? *)
END;
EXCEPTION NotFound : TNotFoundReason "Name not found, returning reason.";
EXCEPTION CannotProceed : TCannotProceed "Cannot proceed, returning reason.";
EXCEPTION InvalidName "Invalid Name";
EXCEPTION AlreadyBound "Name Already Bound";
EXCEPTION NotEmpty "Not Empty";
(* ---------------------------------------------------------------------- *)
(* CNamingContext *)
(* ---------------------------------------------------------------------- *)
TYPE CNamingContext = OBJECT
SUPERTYPES
ICosLifeCycle.CLifeCycle
(* methods: Ping and Remove *)
END
METHODS
Bind(pName : TName, pObject : TObjectSBH)
RAISES NotFound, CannotProceed, InvalidName, AlreadyBound END,
(* Creates a binding of a name and an object in the naming
context. *)
Rebind(pName : TName, pObject : TObjectSBH)
RAISES NotFound, CannotProceed, InvalidName END,
(* Creates a binding of a name and an object in the naming
context even if the name is already bound in the context. *)
BindContext(pName : TName, pNameContext : CNamingContext)
RAISES NotFound, CannotProceed, InvalidName, AlreadyBound END,
(* Names an object that is a naming context. *)
RebindContext(pName : TName, pNameContext : CNamingContext)
RAISES NotFound, CannotProceed, InvalidName END,
(* Created a binding of a name and a naming context in the
naming context even if the name is already bound in the
context. *)
Resolve(pName : TName) : TObjectSBH
RAISES NotFound, CannotProceed, InvalidName END,
(* Retrieves an object bound to a name in a given context.
The given name must exactly match the bound name. *)
ResolveContext(pName : TName) : CNamingContext
RAISES NotFound, CannotProceed, InvalidName END,
(* Retrieves a naming context bound to a name in a given
context. The given name must exactly match the bound name.*)
UnBind(pName : TName, pObject : TObjectSBH)
RAISES NotFound, CannotProceed, InvalidName, NotEmpty END,
(* Removes the name from the naming context. The given name
must exactly match the bound name. *)
NewContext() : CNamingContext,
(* Creates a new naming context and returns it. It is not
currently bound to any context. *)
BindNewContext(pName : TName)
RAISES NotFound, CannotProceed, InvalidName, AlreadyBound END,
(* Creates a new naming context and returns it. It binds
it to the given name in the current naming context. *)
List(pHowMany : CARDINAL) : TBindingList
(* returns the first 'pHowMany' name bindings in the current
context. *)
END;
(* ---------------------------------------------------------------------- *)
(* Symbol prefixing: I - Interface Module
C - Class Interface
T - Non-class Type
E - Enumeration Type
k - constant
p - parameter to a method
a - variable
*)
(* ---------------------------------------------------------------------- *)