text: // $OpenLDAP$
  /*
   * Copyright 2000-2017 The OpenLDAP Foundation, All Rights Reserved.
   * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
   */
  
  
  #include "debug.h"
  #include "LDAPEntry.h"
  
  #include "LDAPAsynConnection.h"
  #include "LDAPException.h"
  
  using namespace std;
  
  LDAPEntry::LDAPEntry(const LDAPEntry& entry){
      DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPEntry::LDAPEntry(&)" << endl);
      m_dn=entry.m_dn;
      m_attrs=new LDAPAttributeList( *(entry.m_attrs));
  }
  
  
  LDAPEntry::LDAPEntry(const string& dn, const LDAPAttributeList *attrs){
      DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPEntry::LDAPEntry()" << endl);
      DEBUG(LDAP_DEBUG_CONSTRUCT | LDAP_DEBUG_PARAMETER,
              "   dn:" << dn << endl);
      if ( attrs )
          m_attrs=new LDAPAttributeList(*attrs);
      else
          m_attrs=new LDAPAttributeList();
      m_dn=dn;
  }
  
  LDAPEntry::LDAPEntry(const LDAPAsynConnection *ld, LDAPMessage *msg){
      DEBUG(LDAP_DEBUG_CONSTRUCT,"LDAPEntry::LDAPEntry()" << endl);
      char* tmp=ldap_get_dn(ld->getSessionHandle(),msg);
      m_dn=string(tmp);
      ldap_memfree(tmp);
      m_attrs = new LDAPAttributeList(ld, msg);
  }
  
  LDAPEntry::~LDAPEntry(){
      DEBUG(LDAP_DEBUG_DESTROY,"LDAPEntry::~LDAPEntry()" << endl);
      delete m_attrs;
  }
  
  LDAPEntry& LDAPEntry::operator=(const LDAPEntry& from){
      m_dn = from.m_dn;
      delete m_attrs;
      m_attrs = new LDAPAttributeList( *(from.m_attrs));
      return *this;
  }
  
  void LDAPEntry::setDN(const string& dn){
      DEBUG(LDAP_DEBUG_TRACE,"LDAPEntry::setDN()" << endl);
      DEBUG(LDAP_DEBUG_TRACE | LDAP_DEBUG_PARAMETER,
              "   dn:" << dn << endl);
      m_dn=dn;
  }
  
  void LDAPEntry::setAttributes(LDAPAttributeList *attrs){
      DEBUG(LDAP_DEBUG_TRACE,"LDAPEntry::setAttributes()" << endl);
      DEBUG(LDAP_DEBUG_TRACE | LDAP_DEBUG_PARAMETER,
              "   attrs:" << *attrs << endl);
      if (m_attrs != 0){
          delete m_attrs;
      }
      m_attrs=attrs;
  }
  
  const string& LDAPEntry::getDN() const{
      DEBUG(LDAP_DEBUG_TRACE,"LDAPEntry::getDN()" << endl);
      return m_dn;
  }
  
  const LDAPAttributeList* LDAPEntry::getAttributes() const{
      DEBUG(LDAP_DEBUG_TRACE,"LDAPEntry::getAttributes()" << endl);
      return m_attrs;
  }
  
  const LDAPAttribute* LDAPEntry::getAttributeByName(const std::string& name) const 
  {
      return m_attrs->getAttributeByName(name);
  }
  
  void LDAPEntry::addAttribute(const LDAPAttribute& attr)
  {
      m_attrs->addAttribute(attr);
  }
  
  void LDAPEntry::delAttribute(const std::string& type)
  {
      m_attrs->delAttribute(type);
  }
  
  void LDAPEntry::replaceAttribute(const LDAPAttribute& attr)
  {
      m_attrs->replaceAttribute(attr); 
  }
  
  ostream& operator << (ostream& s, const LDAPEntry& le){
      s << "DN: " << le.m_dn << ": " << *(le.m_attrs); 
      return s;
  }
  