// $OpenLDAP$
/*
 * Copyright 2003-2022 The OpenLDAP Foundation, All Rights Reserved.
 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
 */

#include "debug.h"
#include "LDAPAttrType.h"


LDAPAttrType::LDAPAttrType(){
    DEBUG(LDAP_DEBUG_CONSTRUCT,
            "LDAPAttrType::LDAPAttrType( )" << endl);

    oid = string ();
    desc = string ();
    names = StringList ();
    single = false;
    usage = 0;
}

LDAPAttrType::LDAPAttrType (string at_item, int flags ) { 

    DEBUG(LDAP_DEBUG_CONSTRUCT,
            "LDAPAttrType::LDAPAttrType( )" << endl);

    LDAPAttributeType *a;
    int ret;
    const char *errp;
    a = ldap_str2attributetype (at_item.c_str(), &ret, &errp, flags);

    if (a) {
	this->setNames( a->at_names );
	this->setDesc( a->at_desc );
	this->setOid( a->at_oid );
	this->setSingle( a->at_single_value );
	this->setUsage( a->at_usage );
        this->setSuperiorOid( a->at_sup_oid );
        this->setEqualityOid( a->at_equality_oid );
        this->setOrderingOid( a->at_ordering_oid );
        this->setSubstringOid( a->at_substr_oid );
        this->setSyntaxOid( a->at_syntax_oid );
    }
    // else? -> error
}

LDAPAttrType::~LDAPAttrType() {
    DEBUG(LDAP_DEBUG_DESTROY,"LDAPAttrType::~LDAPAttrType()" << endl);
}

void LDAPAttrType::setSingle (int at_single) {
    single = (at_single == 1);
}
    
void LDAPAttrType::setNames ( char **at_names ) {
    names = StringList(at_names);
}

void LDAPAttrType::setDesc (const char *at_desc) {
    desc = string ();
    if (at_desc)
	desc = at_desc;
}

void LDAPAttrType::setOid (const char *at_oid) {
    oid = string ();
    if (at_oid)
	oid = at_oid;
}

void LDAPAttrType::setUsage (int at_usage) {
    usage = at_usage;
}

void LDAPAttrType::setSuperiorOid( const char *oid ){
    if ( oid )
        superiorOid = oid;
}

void LDAPAttrType::setEqualityOid( const char *oid ){
    if ( oid )
        equalityOid = oid;
}

void LDAPAttrType::setOrderingOid( const char *oid ){
    if ( oid )
        orderingOid = oid;
}

void LDAPAttrType::setSubstringOid( const char *oid ){
    if ( oid )
        substringOid = oid;
}

void LDAPAttrType::setSyntaxOid( const char *oid ){
    if ( oid )
        syntaxOid = oid;
}

bool LDAPAttrType::isSingle() const {
    return single;
} 

string LDAPAttrType::getOid() const {
    return oid;
}

string LDAPAttrType::getDesc() const {
    return desc;
}

StringList LDAPAttrType::getNames() const {
    return names;
}

string LDAPAttrType::getName() const {

    if (names.empty())
	return "";
    else
	return *(names.begin());
}

int LDAPAttrType::getUsage() const {
    return usage;
}

std::string LDAPAttrType::getSuperiorOid() const {
    return superiorOid;
}

std::string LDAPAttrType::getEqualityOid() const {
    return equalityOid;
}

std::string LDAPAttrType::getOrderingOid() const {
    return orderingOid;
}

std::string LDAPAttrType::getSubstringOid() const {
    return substringOid;
}

std::string LDAPAttrType::getSyntaxOid() const {
    return syntaxOid;
}


