//File: CosNaming.idl
//The only module of the Naming Service
//From http://industry.ebi.ac.uk/openBSA/idl/CosNaming.idl

#ifndef _COS_NAMING_IDL_
#define _COS_NAMING_IDL_
#pragma prefix "omg.org"

module CosNaming
{
	typedef string Istring;
	struct NameComponent {
		Istring id;
		Istring kind;
	};

	typedef sequence <NameComponent> Name;

	enum BindingType {nobject, ncontext};

	struct Binding {
		Name        binding_name;
		BindingType binding_type;                                  
	};

	typedef sequence <Binding> BindingList;                                         


	interface BindingIterator;

	interface NamingContext {

		enum NotFoundReason {	missing_node, 
								not_context, 
								not_object};
        
		exception NotFound { 	NotFoundReason why;
								Name rest_of_name;};

		exception CannotProceed {   NamingContext cxt;
									Name rest_of_name;};
                                                                                                        
		exception InvalidName{};                                                                        
		exception AlreadyBound {};
		exception NotEmpty{};

		void bind(	in Name n, 
					in Object obj)             
			raises(	NotFound, 
					CannotProceed, 
					InvalidName, 
					AlreadyBound);
		void rebind(in Name n, 
					in Object obj)   
			raises(	NotFound, 
					CannotProceed, 
					InvalidName);
		void bind_context(	in Name n, 
							in NamingContext nc)               
			raises(	NotFound, 
					CannotProceed, 
					InvalidName, 
					AlreadyBound);
		void rebind_context(in Name n, 
							in NamingContext nc)     
			raises(	NotFound, 
					CannotProceed, 
					InvalidName);
		Object resolve (in Name n)
			raises(	NotFound, 
					CannotProceed, 
					InvalidName);
		void unbind(in Name n)
			raises(	NotFound, 
					CannotProceed, 
					InvalidName);
		NamingContext new_context();
		NamingContext bind_new_context(in Name n)
			raises(	NotFound, 
					AlreadyBound, 
					CannotProceed, 
					InvalidName);
		void destroy( )
			raises(NotEmpty);
		void list (	in unsigned long how_many, 
					out BindingList bl, 
					out BindingIterator bi);
        };

	interface BindingIterator {
		boolean next_one(out Binding b);
		boolean next_n(	in unsigned long how_many, 
						out BindingList bl);
		void destroy();
	};

};
#endif /* ifndef _COS_NAMING_IDL_ */
