1/*	$NetBSD: LDAPEntry.h,v 1.1.1.3 2010/03/08 02:14:14 lukem Exp $	*/
2
3// OpenLDAP: pkg/ldap/contrib/ldapc++/src/LDAPEntry.h,v 1.6.8.6 2008/07/08 19:31:00 quanah Exp
4/*
5 * Copyright 2000, OpenLDAP Foundation, All Rights Reserved.
6 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
7 */
8
9
10#ifndef LDAP_ENTRY_H
11#define LDAP_ENTRY_H
12#include <ldap.h>
13
14#include <LDAPAttributeList.h>
15
16class LDAPAsynConnection;
17
18/**
19 * This class is used to store every kind of LDAP Entry.
20 */
21class LDAPEntry{
22
23    public :
24        /**
25         * Copy-constructor
26         */
27        LDAPEntry(const LDAPEntry& entry);
28
29        /**
30         * Constructs a new entry (also used as standard constructor).
31         *
32         * @param dn    The Distinguished Name for the new entry.
33         * @param attrs The attributes for the new entry.
34         */
35        LDAPEntry(const std::string& dn=std::string(),
36                const LDAPAttributeList *attrs=0);
37
38        /**
39         * Used internally only.
40         *
41         * The constructor is used internally to create a LDAPEntry from
42         * the C-API's data structurs.
43         */
44        LDAPEntry(const LDAPAsynConnection *ld, LDAPMessage *msg);
45
46        /**
47         * Destructor
48         */
49        ~LDAPEntry();
50
51        /**
52         * Assignment operator
53         */
54        LDAPEntry& operator=(const LDAPEntry& from);
55
56        /**
57         * Sets the DN-attribute.
58         * @param dn: The new DN for the entry.
59         */
60        void setDN(const std::string& dn);
61
62        /**
63         * Sets the attributes of the entry.
64         * @param attr: A pointer to a std::list of the new attributes.
65         */
66        void setAttributes(LDAPAttributeList *attrs);
67
68	/**
69	 * Get an Attribute by its AttributeType (simple wrapper around
70         * LDAPAttributeList::getAttributeByName() )
71	 * @param name The name of the Attribute to look for
72	 * @return a pointer to the LDAPAttribute with the AttributeType
73	 *	"name" or 0, if there is no Attribute of that Type
74	 */
75	const LDAPAttribute* getAttributeByName(const std::string& name) const;
76
77        /**
78         * Adds one Attribute to the List of Attributes (simple wrapper around
79         * LDAPAttributeList::addAttribute() ).
80         * @param attr The attribute to add to the list.
81         */
82        void addAttribute(const LDAPAttribute& attr);
83
84        /**
85         * Deletes all values of an Attribute from the list of Attributes
86         * (simple wrapper around LDAPAttributeList::delAttribute() ).
87         * @param type The attribute to delete.
88         */
89        void delAttribute(const std::string& type);
90
91        /**
92         * Replace an Attribute in the List of Attributes (simple wrapper
93         * around LDAPAttributeList::replaceAttribute() ).
94         * @param attr The attribute to add to the list.
95         */
96        void replaceAttribute(const LDAPAttribute& attr);
97
98        /**
99         * @returns The current DN of the entry.
100         */
101        const std::string& getDN() const ;
102
103        /**
104         * @returns A const pointer to the attributes of the entry.
105         */
106        const LDAPAttributeList* getAttributes() const;
107
108        /**
109         * This method can be used to dump the data of a LDAPResult-Object.
110         * It is only useful for debugging purposes at the moment
111         */
112        friend std::ostream& operator << (std::ostream& s, const LDAPEntry& le);
113
114    private :
115        LDAPAttributeList *m_attrs;
116        std::string m_dn;
117};
118#endif  //LDAP_ENTRY_H
119