/********************************************************************************
 COPYRIGHT(C):  IAAA-2003
 PROYECTO:      Búsquedas
 ARCHIVO:       AVOFilterBuilder.js
 CREACION:      
 ULTIMA MODIF:
 LENGUAJE:      Javascript
 PLATAFORMA:    Windows 95-NT, debe funcionar en todas
 REQUERIM.:     
 DESCRIPCION:  
*******************************************************************************/


 function AVOFilterBuilder(name)
 {
	this._attributesArray = null;
	this._valuesArray = null;
	this._operatorsArray = null;
	this._innerOperator = null;
	this._name = name;
	this._queryOperator= "CONTAINS WORD";
	this._negateQuery = false;
	this._filterBuilderToolkitObject = new FilterBuilderToolkitObject();
 }


 AVOFilterBuilder.prototype.setAttributes = function(attributesArray)
 {
    this._attributesArray = attributesArray;
 }

 AVOFilterBuilder.prototype.setValues = function(valuesArray)
 {
    this._valuesArray = valuesArray;
 }

 AVOFilterBuilder.prototype.setOperators = function(operatorsArray)
 {
    this._operatorsArray = operatorsArray;
 }

 AVOFilterBuilder.prototype.setInnerOperator = function(innerOperator)
 {
    this._innerOperator = innerOperator;
 }

 AVOFilterBuilder.prototype.setQueryOperator = function(queryOperator)
 {
    this._queryOperator = queryOperator;
 }

 AVOFilterBuilder.prototype.setNegateQuery = function()
 {
    this._negateQuery = true;
 }

 /**
  *    Devuelve el queryTree que cumple la regla especificada en la descripción
  *  de la cabecera de este fichero.
  */
AVOFilterBuilder.prototype.getFilter = function()
 {
    var queryTreeArray = new Array();
    var nextPositionInArray = 0;
    var queryTree = null;

    if (isArray(this._valuesArray))
    {
    	for (var i=0; i < this._valuesArray.length; i++)
    	{
		queryTree = this.createFilterForValue(this._valuesArray[i]);
		queryTreeArray[nextPositionInArray] = queryTree;
		nextPositionInArray++;
	}
    }
    else
    {
	queryTree = this.createFilterForValue(this._valuesArray);
	queryTreeArray[nextPositionInArray] = queryTree;
    }

    // Llamada a un método de QueryTreeBuilderToolkit.
    queryTree = this._filterBuilderToolkitObject.logicalMultipleUnification(queryTreeArray, this._operatorsArray);
    
    if (this._negateQuery) {
    	queryTree = this._filterBuilderToolkitObject.logicalNegation(queryTree);
    }

    return queryTree;
 }



 // ZONA PRIVADA


 /**
  *   Método para crear una consulta por todos los campos de this._attributesArray
  *  dado el valor value y utilizando el operador this._innerOperator.
  */
 AVOFilterBuilder.prototype.createFilterForValue = function(value)
 {
    var queryTreeArrayAux = new Array();

    var nextPositionInArrayAux = 0;
    var queryOperator = this._queryOperator;

    for (var i = 0; i < this._attributesArray.length; i++)
    {
       queryTree = this._filterBuilderToolkitObject.createFilterRestriction(this._attributesArray[i], value, queryOperator);

       queryTreeArrayAux[nextPositionInArrayAux] = queryTree;
       nextPositionInArrayAux++;
    }

    // Llamada a un método de QueryTreeBuilderToolkit.
    queryTree = this._filterBuilderToolkitObject.logicalMultipleUnification(queryTreeArrayAux, this._innerOperator);

    return queryTree;
 }



