//
//   COMPONENT_NAME: somnm
//
//   ORIGINS: 27
//
//
//    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1996,1996
//   All Rights Reserved
//   Licensed Materials - Property of IBM
//   US Government Users Restricted Rights - Use, duplication or
//   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//
//#  @(#) 1.18 src/somnm/naming/xnamingf.idl, somnm, som3.0 12/15/96 18:01:15 [12/22/96 21:32:14]


#ifndef xnamingF_idl
#define xnamingF_idl

#include <somobj.idl>
#include <xnaming.idl>
#include <somos.idl>


        //# forward declartions
interface DataBase;
interface BackingStore;

module FileXNaming {

        const unsigned long STARTINGLENGTH = 16;
        const long MAXSTACK = 100;



        // File system based ENC. Concrete implementation of
        // ExtendedNamingContext
        interface FileENC : ExtendedNaming::ExtendedNamingContext
          , somOS::ServiceBase
{

                typedef string Constraint;
                typedef char * Strings;




        #ifdef __SOMIDL__
                implementation {
                        functionprefix = FENC_;

                                //# instance variables
                        sequence<Strings> allowedObjTypes;
                        sequence<Strings> allowedPropTypes;
                        sequence<Strings> allowedPropNames;

                        somToken cs_mutex;
                        // Mutex used to serialize access to FileENC.

                        dllname = "somnmf.dll";


                        //# Method Modifiers

                        //# override somobj methods
                        somDefaultInit: override, init;
                        somDestruct: override;
                        somDumpSelfInt: override;


                        //# override methods introduced by NamingContext
                        bind: override;
                        rebind: override;
                        bind_context: override;
                        rebind_context: override;
                        resolve: override;
                        unbind: override;
                        new_context: override;
                        bind_new_context: override;
                        destroy: override;
                        list: override;

                //# override methods introduced by ExtendedNamingContext
                        get_features_supported: override;
                        add_property: override;
                        add_properties: override;
                        bind_with_properties: override;
                        bind_context_with_properties: override;
                        rebind_with_properties: override;
                        rebind_context_with_properties: override;
                        share_property: override;
                        share_properties: override;
                        unshare_property: override;
                        unshare_properties: override;
                        list_properties: override;
                        get_property: override;
                        get_properties: override;
                        get_all_properties: override;
                        resolve_with_property: override;
                        resolve_with_properties: override;
                        resolve_with_all_properties: override;
                        remove_property: override;
                        remove_properties: override;
                        remove_all_properties: override;
                        find_any: override;
                        find_all: override;
                        find_any_name_binding: override;
                        add_index: override;
                        list_indexes: override;
                        remove_index: override;
                        _get_allowed_object_types: override;
                        _get_allowed_property_types: override;
                        _get_allowed_property_names: override;
                        _get_shared_property_names: override;
                        _get_shared_property_types: override;

                        //# methods introduced by somOS::ServiceBase
                        reinit: override;
                        capture: override;
                        init_for_object_creation: override;
                        uninit_for_object_destruction: override;





                };

        #endif

        };

        // default implementation of BindingIterator
        interface FileBindingIterator: CosNaming::BindingIterator {


            typedef sequence<string> stringSeq;

            void FileBindingIterator_Init1(
                        inout somInitCtrl ctrl,
                        in stringSeq key,
                        in string databaseFile);
            void FileBindingIterator_Init2(
                        inout somInitCtrl ctrl,
                        in CosNaming::BindingList bl);

#ifdef __SOMIDL__
            implementation {
                        //# instance variables

                CosNaming::BindingIterator obj;


                releaseorder:
                  FileBindingIterator_Init1,
                    FileBindingIterator_Init2
                ;
                FileBindingIterator_Init1: init;
                FileBindingIterator_Init2: init;

                functionprefix=FBI_;
                dllname = "somnmf.dll";

                                //# method modifiers
                next_one: override;
                next_n: override;
                destroy: override;

            };
#endif //# __SOMIDL__
        };


        interface FPropertyBindingIterator : ExtendedNaming::PropertyBindingIterator{

                #ifdef __SOMIDL__
                        implementation {
                                next_one: override;
                                next_n: override;
                                destroy: override;

                                functionprefix = FPB_;
                                dllname = "somnmf.dll";
                        };
                #endif

        };

        interface FPropertyIterator:ExtendedNaming::PropertyIterator{

                #ifdef __SOMIDL__
                        implementation {
                                next_one: override;
                                next_n: override;
                                destroy: override;

                                functionprefix = FP_;
                                dllname = "somnmf.dll";
                        };
                #endif

        };


        interface FileIndexIterator: ExtendedNaming::IndexIterator {

            void FileIndexIterator_Init(
                        inout somInitCtrl ctrl,
                        in sequence<octet> key,
                        in string databaseFile);

#ifdef __SOMIDL__
            implementation {

                releaseorder:
                  FileIndexIterator_Init;

                FileIndexIterator_Init: init;

                functionprefix=II_;
                dllname = "somnmf.dll";

                                //# method modifiers
                next_one: override;
                next_n: override;
                destroy: override;

            };
#endif //# __SOMIDL__
        };
};



#endif //# xnamingF_idl
