From Giona
(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
/*
* This class implements a Generic Attribute list
* =================================================
* Author: Rosario Marino
*/
#include "GenericAttributeList.h"
/*
* Constructor
*/
GenericAttributeList::GenericAttributeList()
{
this->attributeList = new GenericList();
this->lastError = ERROR_NO;
}
/*
* Destructor
*/
GenericAttributeList::~GenericAttributeList()
{
delete(attributeList);
}
/*
* Returns last error code
*/
int GenericAttributeList::getLastError()
{
Debug::debug("int GenericAttributeList::getLastError()");
return this->lastError;
}
/*
* Returns the number of attributes
*/
int GenericAttributeList::getAttributeNumber()
{
Debug::debug("int GenericAttributeList::getAttributeNumber()");
return this->attributeList->getLength();
}
/*
* Returns the value of the attribute.
* Returns NULL in case of error
*/
STRING GenericAttributeList::getAttributeValue(STRING name)
{
Debug::debug("STRING GenericAttributeList::getAttributeValue(STRING name)");
if(name==NULL)
{
Debug::debugError("STRING GenericAttributeList::getAttributeValue(STRING name)", "ERROR_NULL_PARAMETER", "parameter: name");
this->lastError=ERROR_NULL_PARAMETER;
return NULL;
}
if(strcmp(name, EMPTY_STRING)==0)
{
Debug::debugError("STRING GenericAttributeList::getAttributeValue(STRING name)", "ERROR_EMPTY_STRING", "parameter: name");
this->lastError=ERROR_EMPTY_STRING;
return NULL;
}
STRING value = EMPTY_STRING;
GenericAttribute* att = this->getAttribute(name);
if(att!= NULL)
{
value = att->getValue();
return value;
}
Debug::debugError("STRING GenericAttributeList::getAttributeValue(STRING name)", "ERROR_ATTRIBUTE_NOT_FOUND", EMPTY_STRING);
this->lastError=ERROR_ATTRIBUTE_NOT_FOUND;
return NULL;
}
/*
* Returns the description of the attribute. Returns NULL in case of error
*/
STRING GenericAttributeList::getAttributeDescription(STRING name)
{
Debug::debug("STRING GenericAttributeList::getAttributeDescription(STRING name)");
if(name==NULL)
{
Debug::debugError("STRING GenericAttributeList::getAttributeDescription(STRING name)", "ERROR_NULL_PARAMETER", "parameter: name");
this->lastError=ERROR_NULL_PARAMETER;
return NULL;
}
if(strcmp(name, EMPTY_STRING)==0)
{
Debug::debugError("STRING GenericAttributeList::getAttributeDescription(STRING name)", "ERROR_EMPTY_STRING", "parameter: name");
this->lastError=ERROR_EMPTY_STRING;
return NULL;
}
STRING value = EMPTY_STRING;
GenericAttribute* att = this->getAttribute(name);
if(att!= NULL)
{
value = att->getDescription();
return value;
}
Debug::debugError("STRING GenericAttributeList::getAttributeDescription(STRING name)", "ERROR_ATTRIBUTE_NOT_FOUND", EMPTY_STRING);
this->lastError=ERROR_ATTRIBUTE_NOT_FOUND;
return NULL;
}
/*
* Delete the attribute
* Returns false in case of error
*/
bool GenericAttributeList::deleteAttibute(STRING name)
{
Debug::debug("bool GenericAttributeList::deleteAttibute(STRING name)");
if(name==NULL)
{
Debug::debugError("GenericAttributeList::deleteAttibute(STRING name)", "ERROR_NULL_PARAMETER", "parameter: name");
this->lastError=ERROR_NULL_PARAMETER;
return false;
}
if(strcmp(name, EMPTY_STRING)==0)
{
Debug::debugError("GenericAttributeList::deleteAttibute(STRING name)", "ERROR_EMPTY_STRING", "parameter: name");
this->lastError=ERROR_EMPTY_STRING;
return false;
}
GenericListNode* node= this->attributeList->getHead();
while(node!=NULL)
{
GenericAttribute* attribute = (GenericAttribute*)(node->getElem());
if(strcmp(attribute->getName(),name)==0)
{
if(!this->attributeList->deleteNode(node))
{
Debug::debugError("bool GenericAttributeList::deleteAttibute(STRING name)", "ERROR_GENERIC_LIST_ERROR", "An error in attribute list occurred. Try to run with error debug option on");
this->lastError=ERROR_GENERIC_LIST_ERROR;
return false;
}
else
return true;
}
node=node->getNext();
}
Debug::debugError("bool GenericAttributeList::deleteAttibute(STRING name)", "ERROR_ATTRIBUTE_NOT_FOUND", EMPTY_STRING);
this->lastError=ERROR_ATTRIBUTE_NOT_FOUND;
return false;
}
/*
* Sets the value of the attribute
* If the attribute with such name does not exists, a new one
* is created. Returns false in case of error.
*/
bool GenericAttributeList::setAttributeValue(STRING name, STRING value)
{
Debug::debug("void GenericAttributeList::setAttributeValue(STRING name, STRING value)");
if(name==NULL)
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "ERROR_NULL_PARAMETER", "parameter: name");
this->lastError=ERROR_NULL_PARAMETER;
return false;
}
if(strcmp(name, EMPTY_STRING)==0)
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "ERROR_EMPTY_STRING", "parameter: name");
this->lastError=ERROR_EMPTY_STRING;
return false;
}
if(value==NULL)
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "ERROR_NULL_PARAMETER", "parameter: value");
this->lastError=ERROR_NULL_PARAMETER;
return false;
}
if(strcmp(value, EMPTY_STRING)==0)
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "ERROR_EMPTY_STRING", "parameter: value");
this->lastError=ERROR_EMPTY_STRING;
return false;
}
GenericAttribute* att = this->getAttribute(name);
if(att == NULL)
{
att = new GenericAttribute();
if (!att->setName(name))
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "GENERIC ERROR", "error in setting name");
return false;
}
GenericListNode * node = new GenericListNode();
node->setElem((genericListElemT)att);
if(!this->attributeList->addNode(node))
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "GENERIC ERROR", "error in adding attribute in attribute list");
return false;
}
}
if(!att->setValue(value))
{
Debug::debugError("bool GenericAttributeList::setAttributeValue(STRING name, STRING value)", "GENERIC ERROR", "error in setting attribute value");
return false;
}
return true;
}
/*
* Sets the description of the attribute if it exists.
* returns FALSE if the attribute does not exist
*/
bool GenericAttributeList::setAttributeDescription(STRING name, STRING description)
{
Debug::debug("bool GenericAttributeList::setAttributeDescription(STRING name, STRING description)");
if(name==NULL)
{
Debug::debugError("bool GenericAttributeList::setAttributeDescription(STRING name, STRING description)", "ERROR_NULL_PARAMETER", "parameter: name");
this->lastError=ERROR_NULL_PARAMETER;
return false;
}
if(strcmp(name, EMPTY_STRING)==0)
{
Debug::debugError("bool GenericAttributeList::setAttributeDescription(STRING name, STRING description)", "ERROR_EMPTY_STRING", "parameter: name");
this->lastError=ERROR_EMPTY_STRING;
return false;
}
GenericAttribute* att = this->getAttribute(name);
if(att == NULL)
{
Debug::debugError("bool GenericAttributeList::setAttributeDescription(STRING name, STRING description)", "ERROR_ATTRIBUTE_NOT_FOUND", EMPTY_STRING);
this->lastError=ERROR_ATTRIBUTE_NOT_FOUND;
return false;
}
if (!att->setDescription(description))
{
Debug::debugError("bool GenericAttributeList::setAttributeDescription(STRING name, STRING description)", "GENERIC ERROR", "error in setting attribute description");
return false;
}
return true;
}
/*
* Returns the array of all attribute names
*/
STRING* GenericAttributeList::getAttributeNameList()
{
Debug::debug("STRING* GenericAttributeList::getAttributeNameList()");
int i = 0;
int length = this->attributeList->getLength();
STRING* array= new STRING [length];
GenericListNode * node = this->attributeList->getHead();
while(node != NULL)
{
GenericAttribute * att = (GenericAttribute *) (node->getElem());
STRING name = att->getName();
array[i] = name;
i++;
node = node->getNext();
}
return array;
}
/*
* Private function
* ===================
* Returns the pointer of the attribute whose name is the one passed
*/
GenericAttribute* GenericAttributeList::getAttribute(STRING name)
{
GenericAttribute * att = NULL;
GenericListNode* node = this->attributeList->getHead();
bool found = false;
while(node != NULL)
{
att = (GenericAttribute*) node->getElem();
STRING attName = att->getName();
if(strcmp(name, attName)==0)
return att;
node = node->getNext();
}
return NULL;
}
BACK