GenericAttributeList.cpp

From Giona

/*
 * 	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

Personal tools