#ifndef _UTIL_H
#define _UTIL_H

#include "BankS.h"
#include "BankC.h"

#include "CosNamingC.h"
#include "CosNamingS.h"

#include <tao/corba.h>

#ifndef OPENFUSION_BANK_DLL
#define OPENFUSION_BANK_DLL
#endif

class OPENFUSION_BANK_DLL Util
{
public:

  Util (CORBA::ORB_ptr orb);

  PortableServer::POA_ptr getRootPOA (void);

  void buildNameGraph (void);

  Bank::AccountManager_ptr getAccManagerObject (void);

  void bindAccountManager (CORBA::Object_ptr obj);

  void addAccount (const char *name, CORBA::Object_ptr obj);

  Bank::Account_ptr getAccount (const char* name);

private:

  CosNaming::NamingContextExt_ptr getRootNamingCtx (void);

  CosNaming::NamingContext_ptr getAccManagerCtx (void);

  CosNaming::NamingContext_ptr getAccountsCtx (void);

  CosNaming::NamingContext_ptr myBindContext (CosNaming::NamingContext_ptr parentCtx,
                                              const char *ctxName);

  CORBA::ORB_var orbVar_;

  PortableServer::POA_var rootPoaVar_;

  CosNaming::NamingContextExt_var rootCtxVar_;

  CosNaming::NamingContext_var accMgrCtxVar_;

  CosNaming::NamingContext_var accountsCtxVar_;
};

#endif // _UTIL_H
