/********************************************************************************
 COPYRIGHT(C):  IAAA-2004
 PROYECTO:      Búsquedas
 ARCHIVO:       EmbeddedRestrictionsQueryBuilder.js
 CREACION:      17-11-04 rubenm
 ULTIMA MODIF:
 LENGUAJE:      Javascript
 PLATAFORMA:    Windows 95-NT, debe funcionar en todas
 REQUERIM.:
 DESCRIPCION:   Construcción de restricciones embebidas aplicables a las búsquedas.
 HISTORIA:      17-11-04 rubenm Creación
*******************************************************************************/


 /**
  * Constructor.
  * @return nueva instancia de la clase.
  */
 function EmbeddedRestrictionsQueryBuilder()
 {
    this._avoFilterBuilder = new AVOFilterBuilder("embeddedRestrictionsQueryBuilder_avoFB");
 }
 
 EmbeddedRestrictionsQueryBuilder.prototype.getQueryTree = function()
 {
	var restrictionsFilter = null;
	
	if (embeddedRestrictions.length > 0) {
		var restrictionsArray = this.parseRestrictions();

		restrictionsFilter = this._avoFilterBuilder._filterBuilderToolkitObject.logicalMultipleUnification(
						restrictionsArray, "AND");
	}

	if (restrictionsFilter != null) {
		return restrictionsFilter;
	} else {
		return "";
	}
 }
 
 EmbeddedRestrictionsQueryBuilder.prototype.parseRestrictions = function() {
	var restrictionsArray = new Array();

	for (var i=0; i < embeddedRestrictions.length; i++) {
		restrictionsArray[i] = this.parseRestriction(embeddedRestrictions[i]);
	}
	return restrictionsArray;
 }
 
 EmbeddedRestrictionsQueryBuilder.prototype.parseRestriction = function(restriction) {
 	
 	var filter = null;
 	
 	// the model of a single line restriction is
 	// ATTRIB(,ATTRIB)*|VALUE(,VALUE)*|OPERATOR(|NOT)?
 	
 	//first split by '|'
 	var subexpr = new Array();
 	subexpr = restriction.split("|");
 	
 	var attrib = subexpr[0].split(",");
 	var values = subexpr[1].split(",");
 	var operator = subexpr[2];
 	var negateQuery = false;
 	var operatorsArray = new Array();
 	
 	if ((subexpr.length >= 4) && (subexpr[3].toUpperCase() == "NOT")) {
 		negateQuery = true;
 	}
 	
 	this._avoFilterBuilder.setAttributes(attrib);
 	this._avoFilterBuilder.setValues(values);
 	this._avoFilterBuilder.setQueryOperator(operator);
	this._avoFilterBuilder.setInnerOperator("OR");
 	this._avoFilterBuilder.setOperators(operatorsArray);
 	
 	if (negateQuery) {
 		this._avoFilterBuilder.setNegateQuery();
 	}
 	filter = this._avoFilterBuilder.getFilter();
 	
 	return filter;
 }


