internal override XmlDocument Get_Query() { XmlDocument RetVal; SDMXObjectModel.Message.GenericDataQueryType GenericDataQuery; DataParametersOrType ORItem; DataParametersAndType ANDItem; DimensionValueType DimensionValue; DataTable DtSubgroupBreakup; Dictionary<string, string> DictSubgroupBreakup; string[] SplittedUserSelectionKeyValues; RetVal = null; ORItem = null; ANDItem = null; GenericDataQuery = new SDMXObjectModel.Message.GenericDataQueryType(); GenericDataQuery.Header = Get_Appropriate_Header(); GenericDataQuery.Query = new SDMXObjectModel.Query.GenericDataQueryType(); GenericDataQuery.Query.ReturnDetails = new DataReturnDetailsType(); GenericDataQuery.Query.ReturnDetails.detail = Enum.GetName(typeof(DataReturnDetailTypes), this.DataReturnDetailType).ToString(); GenericDataQuery.Query.DataWhere = new DataParametersAndType(); GenericDataQuery.Query.DataWhere.DataStructure = this.Get_DataStructure_Reference(); GenericDataQuery.Query.DataWhere.Or = new List<DataParametersOrType>(); if (this.DictUserSelections != null) { DtSubgroupBreakup = this.DIConnection.ExecuteDataTable(this.DIQueries.SubgroupValSubgroup.GetSubgroupValsWithSubgroups()); DictSubgroupBreakup = new Dictionary<string, string>(); foreach (string Key in this.DictUserSelections.Keys) { switch (Key) { case Constants.Concept.INDICATOR.Id: if (this.DictUserSelections[Key] != null && !string.IsNullOrEmpty(this.DictUserSelections[Key].ToString())) { ORItem = new DataParametersOrType(); ORItem.And = new List<DataParametersAndType>(); SplittedUserSelectionKeyValues = this.DictUserSelections[Key].Split(new string[] { Constants.Comma }, StringSplitOptions.None); for (int i = 0; i < SplittedUserSelectionKeyValues.Length; i++) { ANDItem = new DataParametersAndType(); ANDItem.DimensionValue = new List<DimensionValueType>(); DimensionValue = new DimensionValueType(); DimensionValue.ID = Constants.Concept.INDICATOR.Id; DimensionValue.Items = new List<object>(); DimensionValue.Items.Add(new SDMXObjectModel.Query.SimpleValueType()); ((SDMXObjectModel.Query.SimpleValueType)DimensionValue.Items[0]).Value = SplittedUserSelectionKeyValues[i].Split(new string[] { Constants.AtTheRate }, StringSplitOptions.None)[0]; ANDItem.DimensionValue.Add(DimensionValue); DimensionValue = new DimensionValueType(); DimensionValue.ID = Constants.Concept.UNIT.Id; DimensionValue.Items = new List<object>(); DimensionValue.Items.Add(new SDMXObjectModel.Query.SimpleValueType()); ((SDMXObjectModel.Query.SimpleValueType)DimensionValue.Items[0]).Value = SplittedUserSelectionKeyValues[i].Split(new string[] { Constants.AtTheRate }, StringSplitOptions.None)[1]; ANDItem.DimensionValue.Add(DimensionValue); DictSubgroupBreakup = this.Get_Subgroup_Breakup(SplittedUserSelectionKeyValues[i].Split(new string[] { Constants.AtTheRate }, StringSplitOptions.None)[2], DtSubgroupBreakup); foreach (string SubgroupTypeGId in DictSubgroupBreakup.Keys) { DimensionValue = new DimensionValueType(); DimensionValue.ID = SubgroupTypeGId; DimensionValue.Items = new List<object>(); DimensionValue.Items.Add(new SDMXObjectModel.Query.SimpleValueType()); ((SDMXObjectModel.Query.SimpleValueType)DimensionValue.Items[0]).Value = DictSubgroupBreakup[SubgroupTypeGId].ToString(); ANDItem.DimensionValue.Add(DimensionValue); } ORItem.And.Add(ANDItem); } } break; case Constants.Concept.SOURCE.Id: case Constants.Concept.AREA.Id: case Constants.Concept.TIME_PERIOD.Id: if (this.DictUserSelections[Key] != null && !string.IsNullOrEmpty(this.DictUserSelections[Key].ToString())) { ORItem = new DataParametersOrType(); ORItem.DimensionValue = new List<DimensionValueType>(); SplittedUserSelectionKeyValues = this.DictUserSelections[Key].Split(new string[] { Constants.Comma }, StringSplitOptions.None); for (int i = 0; i < SplittedUserSelectionKeyValues.Length; i++) { DimensionValue = new DimensionValueType(); DimensionValue.ID = Key; DimensionValue.Items = new List<object>(); DimensionValue.Items.Add(new SDMXObjectModel.Query.SimpleValueType()); ((SDMXObjectModel.Query.SimpleValueType)DimensionValue.Items[0]).Value = SplittedUserSelectionKeyValues[i]; ORItem.DimensionValue.Add(DimensionValue); } } break; case Constants.Concept.FOOTNOTES.Id: ORItem = new DataParametersOrType(); ORItem.AttributeValue = new List<AttributeValueType>(); ORItem.AttributeValue.Add(new AttributeValueType()); ORItem.AttributeValue[0].ID = Key; ORItem.AttributeValue[0].Items = new List<object>(); ORItem.AttributeValue[0].Items.Add(new SDMXObjectModel.Query.QueryTextType()); ((QueryTextType)ORItem.AttributeValue[0].Items[0]).lang = this.DictUserSelections[Key]; break; default: break; } GenericDataQuery.Query.DataWhere.Or.Add(ORItem); } } RetVal = Serializer.SerializeToXmlDocument(typeof(SDMXObjectModel.Message.GenericDataQueryType), GenericDataQuery); return RetVal; }
/// <summary> /// Handles the data provider. /// </summary> /// <param name="complexDataQuery">The complex data query.</param> /// <param name="whereType">Type of the where.</param> private static void HandleDataProvider(IComplexDataQuery complexDataQuery, DataParametersAndType whereType) { //if only one Data provider let alone otherwise encapsulate it in an Or clause if (complexDataQuery.DataProvider.Count == 1) { IDataProvider dataProvider = complexDataQuery.DataProvider.First(); var dataProviderReferenceType = new DataProviderReferenceType(); RefBaseType dataProviderRefType = new DataProviderRefType(); dataProviderRefType.agencyID = dataProvider.CrossReferences.First().MaintainableReference.AgencyId; dataProviderRefType.id = dataProvider.Id; dataProviderRefType.maintainableParentID = dataProvider.MaintainableParent.Id; dataProviderRefType.maintainableParentVersion = dataProvider.MaintainableParent.Version; dataProviderReferenceType.Ref = dataProviderRefType; whereType.DataProvider.Add(dataProviderReferenceType); } else { var orForDataProviderType = new DataParametersOrType(); foreach (IDataProvider dataProvider in complexDataQuery.DataProvider) { RefBaseType dataProviderRefType = new DataProviderRefType(); dataProviderRefType.agencyID = dataProvider.CrossReferences.First().MaintainableReference.AgencyId; dataProviderRefType.id = dataProvider.Id; dataProviderRefType.maintainableParentID = dataProvider.MaintainableParent.Id; dataProviderRefType.maintainableParentVersion = dataProvider.MaintainableParent.Version; var dataProviderReferenceType = new DataProviderReferenceType { Ref = dataProviderRefType }; orForDataProviderType.DataProvider.Add(dataProviderReferenceType); } whereType.Or.Add(orForDataProviderType); } }
/// <summary> /// Builds complex selections from DataParametersOr from XML. /// </summary> /// <param name="orType"> /// The OrType. /// </param> /// <param name="complexSelections"> /// The selections. /// </param> private void ProcessParametersOrType(DataParametersOrType orType, ISet<IComplexDataQuerySelection> complexSelections, ISdmxObjectRetrievalManager structureRetrievalManager, ISet<IDataProvider> dataProviders) { //data provider if (orType.DataProvider != null && orType.DataProvider.Count > 0) { foreach (DataProviderReferenceType dataProviderRefType in orType.DataProvider) { IDataProvider dataProviderBean = ProcessDataProviderType(dataProviderRefType, structureRetrievalManager); dataProviders.Add(dataProviderBean); } } //add a complex selection for dimensions if (orType.DimensionValue != null && orType.DimensionValue.Count > 0) { foreach (DimensionValueType dimValue in orType.DimensionValue) { IComplexComponentValue comValue = GetComplexComponentValue(dimValue, SdmxStructureEnumType.Dimension); AddComponentSelection(complexSelections, dimValue.ID, comValue); } } //add complex selections for attributes if (orType.AttributeValue != null && orType.AttributeValue.Count > 0) { foreach (AttributeValueType attrValue in orType.AttributeValue) { IComplexComponentValue comValue = GetComplexComponentValue(attrValue, SdmxStructureEnumType.DataAttribute); AddComponentSelection(complexSelections, attrValue.ID, comValue); } } //add complex selections for measure if (orType.PrimaryMeasureValue != null && orType.PrimaryMeasureValue.Count > 0) { foreach (PrimaryMeasureValueType measureValue in orType.PrimaryMeasureValue) { IList<IComplexComponentValue> comValues = GetComplexComponentValues(measureValue, SdmxStructureEnumType.PrimaryMeasure); this.AddComponentSelection(complexSelections, measureValue.ID, comValues); } } //add complex selections for time dimension if (orType.TimeDimensionValue != null && orType.TimeDimensionValue.Count > 0) { foreach (TimeDimensionValueType timeValue in orType.TimeDimensionValue) { IList<IComplexComponentValue> comValues = GetComplexComponentValues(timeValue, SdmxStructureEnumType.TimeDimension); AddComponentSelection(complexSelections, timeValue.ID, comValues); } } //TODO analyse to support in the future //processParametersAndType(orType.getAndList(), complexSelections); }
/// <summary> /// Resets this instance. /// </summary> public void Reset() { this._dataParametersOrType = new DataParametersOrType(); }