/// <summary>
        /// Parses the value types of the incoming component value type, and returns the complex component value to construct in the selection.
        /// </summary>
        /// <param name="compValue">
        /// The component value.
        /// </param>
        /// <param name="compType">
        /// The component type : either a dimension, time dimension, attribute or primary measure.
        /// </param>
        /// <returns>
        /// The set with the ComplexCompoentValue objects.
        /// </returns>
        private IList<IComplexComponentValue> GetComplexComponentValues(DataStructureComponentValueQueryType compValue, SdmxStructureEnumType compType)
        {
            IList<IComplexComponentValue> comValues = new List<IComplexComponentValue>();
            IComplexComponentValue comValue = null;

            //Numeric Values
            if (compValue.NumericValue != null)
            {
                foreach (NumericValue numerValue in compValue.NumericValue)
                {
                    OrderedOperator orderedOperator = OrderedOperator.ParseString([email protected]());
                    comValue = new ComplexComponentValueImpl(numerValue.TypedValue.ToString(CultureInfo.InvariantCulture), orderedOperator, compType);
                    comValues.Add(comValue);
                }
            }

            //Time Value
            if (compValue.TimeValue != null)
            {
                foreach (TimeValue timeValue in compValue.TimeValue)
                {
                    OrderedOperator orderedOperator = OrderedOperator.ParseString([email protected]());
                    comValue = new ComplexComponentValueImpl(timeValue.TypedValue.ToString(), orderedOperator, compType);
                    comValues.Add(comValue);
                }
            }

            //Text Value applicable only for attribute and primary measure
            if (compType.Equals(SdmxStructureEnumType.PrimaryMeasure) || compType.Equals(SdmxStructureEnumType.DataAttribute))
            {
                //It's a generic type but the type will always be one
                if (compValue.TextValue != null)
                {
                    foreach (TextValue textValue in compValue.TextValue)
                    {
                        TextSearch textOperator = TextSearch.ParseString([email protected]());
                        comValue = new ComplexComponentValueImpl(textValue.ToString(), textOperator, compType);
                        comValues.Add(comValue);
                    }
                }
            }

            //Value
            if (compValue.Value != null)
            {
                OrderedOperator orderedOperator = OrderedOperator.ParseString([email protected]());
                comValue = new ComplexComponentValueImpl(compValue.Value.ToString(), orderedOperator, compType);
                comValues.Add(comValue);
            }

            return comValues;
        }
 /// <summary>
 /// Sets the simple operator and value.
 /// </summary>
 /// <param name="rootObject">The root object.</param>
 /// <param name="complexComponentValue">The complex component value.</param>
 private static void SetSimpleOperatorAndValue(DataStructureComponentValueQueryType rootObject, IComplexComponentValue complexComponentValue)
 {
     string queryOperator = complexComponentValue.OrderedOperator != null ? complexComponentValue.OrderedOperator.OrdOperator : DefaultEqualOperator;
     var simpleValueType = new SimpleValueType { @operator = queryOperator, TypedValue = complexComponentValue.Value };
     rootObject.Value = new Value(simpleValueType);
 }
 /// <summary>
 /// Sets the time operator and value.
 /// </summary>
 /// <param name="rootObject">The root object.</param>
 /// <param name="complexComponentValue">The complex component value.</param>
 private static void SetTimeOperatorAndValue(DataStructureComponentValueQueryType rootObject, IComplexComponentValue complexComponentValue)
 {
     string queryOperator = complexComponentValue.OrderedOperator != null ? complexComponentValue.OrderedOperator.OrdOperator : DefaultEqualOperator;
     var timePeriodValueType = new TimePeriodValueType { @operator = queryOperator, TypedValue = complexComponentValue.Value };
     rootObject.TimeValue.Add(new TimeValue(timePeriodValueType));
 }
 /// <summary>
 /// Sets the simple operator and value.
 /// </summary>
 /// <param name="rootObject">The root object.</param>
 /// <param name="complexComponentValue">The complex component value.</param>
 private static void SetTextOperatorAndValue(DataStructureComponentValueQueryType rootObject, IComplexComponentValue complexComponentValue)
 {
     string queryOperator = complexComponentValue.TextSearchOperator != null ? complexComponentValue.TextSearchOperator.Operator : DefaultEqualOperator;
     var queryTextType = new QueryTextType { @operator = queryOperator, TypedValue = complexComponentValue.Value };
     var textValue = new TextValue(queryTextType);
     rootObject.TextValue.Add(textValue);
 }
 /// <summary>
 /// Sets the numeric operator and value.
 /// </summary>
 /// <param name="rootObject">The root object.</param>
 /// <param name="complexComponentValue">The complex component value.</param>
  private static void SetNumericOperatorAndValue(DataStructureComponentValueQueryType rootObject, IComplexComponentValue complexComponentValue)
 {
      var numericValue = new NumericValue { TypedValue = decimal.Parse(complexComponentValue.Value, CultureInfo.InvariantCulture), @operator = complexComponentValue.OrderedOperator.OrdOperator };
      rootObject.NumericValue.Add(numericValue);
 }
 /// <summary>
 /// Sets the operator and value.
 /// </summary>
 /// <param name="component">The component.</param>
 /// <param name="complexComponentValue">The complex component value.</param>
 /// <param name="dataStructureComponentValueQueryType">Type of the data structure component value query.</param>
 private static void SetOperatorAndValue(IComponent component, IComplexComponentValue complexComponentValue, DataStructureComponentValueQueryType dataStructureComponentValueQueryType)
 {
     var valueType = GetValueType(component, complexComponentValue);
     switch (valueType)
     {
         case ValueType.NumericValue:
             SetNumericOperatorAndValue(dataStructureComponentValueQueryType, complexComponentValue);
             break;
         case ValueType.TextValue:
             SetTextOperatorAndValue(dataStructureComponentValueQueryType, complexComponentValue);
             break;
         case ValueType.TimeValue:
             SetTimeOperatorAndValue(dataStructureComponentValueQueryType, complexComponentValue);
             break;
         case ValueType.Value:
             SetSimpleOperatorAndValue(dataStructureComponentValueQueryType, complexComponentValue);
             break;
     }
 }