Esempio n. 1
0
        public AttributeFilter(string name, AttributeType attributeType, AttributeDataType dataType,
                               List <string> values, OperatorForValues operatorForValues, OperatorForLinkAtribute operatorForLinkAtribute,
                               ParenthesisThisAtribute parenthesisThisAtribute)
            : base(name, attributeType, dataType)
        {
            if (values == null || values.Count < 0)
            {
                throw new Exception("Un atributo de tipo filtro debe tener valores");
            }

            // si este atributo tiene valores de fecha o numero, deben cumplirse ciertas condiciones
            if (operatorForValues == OperatorForValues.Between && values.Count != 2)
            {
                throw new Exception("Un atributo de tipo filtro con el operador" + operatorForValues +
                                    " debe tener 2 valores");
            }

            if (operatorForValues == OperatorForValues.Bigger || operatorForValues == OperatorForValues.BiggerEqual ||
                operatorForValues == OperatorForValues.Minor || operatorForValues == OperatorForValues.MinorEqual)
            {
                if (values.Count != 1)
                {
                    throw new Exception("Un atributo de tipo filtro con el operador" + operatorForValues +
                                        " debe tener 1 valor");
                }
            }

            Values                  = values;
            OperatorForValues       = operatorForValues;
            OperatorForLinkAtribute = operatorForLinkAtribute;
            ParenthesisThisAtribute = parenthesisThisAtribute;
        }
Esempio n. 2
0
        public static string OperatorForLinkAtributeCustomToString(this OperatorForLinkAtribute op)
        {
            switch (op)
            {
            case OperatorForLinkAtribute.AndOperator:
                return("AND");

            case OperatorForLinkAtribute.OrOperator:
                return("OR");

            default: return(string.Empty);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Metodo que se utiliza para obtener la representacion
        /// del string query del tipo de atributo.
        /// </summary>
        /// <returns></returns>
        public override string ToStringQuery()
        {
            var result         = string.Empty;
            var headerForSDATA = DataType == AttributeDataType.TypeDate || DataType == AttributeDataType.TypeDouble
                ? "SDATA"
                : string.Empty;
            var eventHeader  = "EVENTO_";
            var entityHeader = "";
            ////Aqui se pone el nombre del atributo con el formato de EVENTO_ o
            //// para la instancia.
            var nameHeader = ColumnType == ColumnType.Dummy
                ? (Type == AttributeType.Event ? $"{eventHeader}" : entityHeader)
                : string.Empty;
            var nameMain = $"{nameHeader}{Name}";

            //// Aqui se definen los tokens que se van a
            //// generar.
            var leftOperand    = nameMain;
            var rightOperand   = GetValueFromFormat(Values[0], DataType);
            var binaryOperator = OperatorForValues.OperatorForValuesCustomToString();

            //// Forma de un operador binario con sus operandos
            var atom = string.Empty;

            //// En caso de que se trate del operador equal y el tipo de dato sea string
            //// se formatea esta forma.
            if (DataType == AttributeDataType.TypeString && OperatorForValues == OperatorForValues.Equal)
            {
                //// Salvando temporalmente el valor del operador izquierdo.
                var temp = leftOperand;

                leftOperand    = rightOperand;
                rightOperand   = temp;
                binaryOperator = "within";
            }

            //// Verificando los valores multiples
            if (Values.Count > 1)
            {
                //// Caso del BETWEEN
                if (OperatorForValues == OperatorForValues.Between)
                {
                    result =
                        $"{headerForSDATA} ({nameMain} {OperatorForValues.OperatorForValuesCustomToString()} {GetValueFromFormat(Values[0], DataType)} AND {GetValueFromFormat(Values[1], DataType)})";
                }
                //// Es una lista de valores
                else
                {
                    var operatorForLinkAttributeInList = OperatorForValues == OperatorForValues.Equal
                        ? OperatorForLinkAtribute.OrOperator
                        : OperatorForLinkAtribute.AndOperator;
                    atom   = GenerateAtom(leftOperand, binaryOperator, rightOperand);
                    result =
                        $"{headerForSDATA} ({atom}) ";
                    for (int i = 1; i < Values.Count; i++)
                    {
                        //// Verificando el caso de que se trate de un operador equal y el tipo de dato sea string
                        if (DataType == AttributeDataType.TypeString && OperatorForValues == OperatorForValues.Equal)
                        {
                            leftOperand = GetValueFromFormat(Values[i], DataType);
                        }
                        atom    = GenerateAtom(leftOperand, binaryOperator, rightOperand);
                        result +=
                            $"{operatorForLinkAttributeInList.OperatorForLinkAtributeCustomToString()} {headerForSDATA} ({atom}) ";
                    }

                    result = $"({result})";
                }
            }

            //// Solo tiene un valor
            else
            {
                atom   = GenerateAtom(leftOperand, binaryOperator, rightOperand);
                result =
                    $"{headerForSDATA} ({atom})";
            }

            var tempResult = ParenthesisThisAtribute == ParenthesisThisAtribute.OpenParenthesis
                ? $"{ParenthesisThisAtribute.ParenthesisThisAtributeCustomToString()} {result}"
                : $"{result} {ParenthesisThisAtribute.ParenthesisThisAtributeCustomToString()}";

            return($"{tempResult} {OperatorForLinkAtribute.OperatorForLinkAtributeCustomToString()}");
        }