/// <summary> /// Processes an XML return details to return the detail parameters. DEFAULT set to FULL /// </summary> /// <param name="returnDetails"> /// The return details. /// </param> /// <returns> /// The data query detail. /// </returns> private DataQueryDetail GetReturnDetailsDetail(DataReturnDetailsType returnDetails) { if (returnDetails.detail != null) return DataQueryDetail.ParseString(returnDetails.detail); else return DataQueryDetail.GetFromEnum(DataQueryDetailEnumType.Full); }
internal void Parse_Query(DataParametersAndType DataWhere, DataReturnDetailsType ReturnDetails) { string IndicatorGId, UnitGId, SubgroupValGId, AreaId, SourceText, TimePeriodText, Language, IUSNId; List<string> IUSNIds, AreaIds, SourceTexts, TimePeriods; Dictionary<string, string> DictSubgroupBreakup; DataTable DtSubgroupBreakup, DtIUS; IndicatorGId = string.Empty; UnitGId = string.Empty; SubgroupValGId = string.Empty; AreaId = string.Empty; SourceText = string.Empty; TimePeriodText = string.Empty; Language = string.Empty; IUSNId = string.Empty; IUSNIds = new List<string>(); AreaIds = new List<string>(); SourceTexts = new List<string>(); TimePeriods = new List<string>(); DictSubgroupBreakup = new Dictionary<string, string>(); DtSubgroupBreakup = this._diConnection.ExecuteDataTable(this._diQueries.SubgroupValSubgroup.GetSubgroupValsWithSubgroups()); DtSubgroupBreakup = DtSubgroupBreakup.DefaultView.ToTable(true, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.SubgroupVals.SubgroupValGId, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.SubgroupTypes.SubgroupTypeGID, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.Subgroup.SubgroupGId); DtIUS = this._diConnection.ExecuteDataTable(this._diQueries.IUS.GetIUS(FilterFieldType.None, string.Empty, FieldSelection.Light)); DtIUS = DtIUS.DefaultView.ToTable(true, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.Indicator_Unit_Subgroup.IUSNId, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.Indicator.IndicatorGId, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.Unit.UnitGId, DevInfo.Lib.DI_LibDAL.Queries.DIColumns.SubgroupVals.SubgroupValGId); if ((DataReturnDetailTypes)Enum.Parse(typeof(DataReturnDetailTypes), ReturnDetails.detail) == DataReturnDetailTypes.Full) { if (DataWhere != null) { foreach (DataParametersOrType ORItem in DataWhere.Or) { if (ORItem.DimensionValue.Count > 0) { foreach (DimensionValueType Dimension in ORItem.DimensionValue) { switch (Dimension.ID) { case Constants.Concept.AREA.Id: AreaId = ((SDMXObjectModel.Query.SimpleValueType)Dimension.Items[0]).Value; AreaIds.Add(AreaId); break; case Constants.Concept.SOURCE.Id: SourceText = ((SDMXObjectModel.Query.SimpleValueType)Dimension.Items[0]).Value; SourceTexts.Add(SourceText); break; case Constants.Concept.TIME_PERIOD.Id: TimePeriodText = ((SDMXObjectModel.Query.SimpleValueType)Dimension.Items[0]).Value; if (this._isMRD == false) { if (TimePeriodText == Constants.MRD) { this._isMRD = true; TimePeriods = null; } else { TimePeriods.Add(TimePeriodText); } } break; default: break; } } } else if (ORItem.AttributeValue.Count > 0) { switch (ORItem.AttributeValue[0].ID) { case Constants.Concept.FOOTNOTES.Id: Language = ((QueryTextType)ORItem.AttributeValue[0].Items[0]).lang; break; } } else if (ORItem.And.Count > 0) { IUSNIds.Add(Constants.MinusOne); foreach (DataParametersAndType ANDItem in ORItem.And) { DictSubgroupBreakup = new Dictionary<string, string>(); foreach (DimensionValueType Dimension in ANDItem.DimensionValue) { switch (Dimension.ID) { case Constants.Concept.INDICATOR.Id: IndicatorGId = ((SDMXObjectModel.Query.SimpleValueType)Dimension.Items[0]).Value; break; case Constants.Concept.UNIT.Id: UnitGId = ((SDMXObjectModel.Query.SimpleValueType)Dimension.Items[0]).Value; break; default: DictSubgroupBreakup.Add(Dimension.ID, ((SDMXObjectModel.Query.SimpleValueType)Dimension.Items[0]).Value); break; } } SubgroupValGId = this.Get_SubgroupVal_GId(DictSubgroupBreakup, DtSubgroupBreakup); IUSNId = this.Get_IUSNId_From_GIds(IndicatorGId, UnitGId, SubgroupValGId, DtIUS); IUSNIds.Add(IUSNId); } } } if (DataWhere.DataStructure != null && DataWhere.DataStructure.Count > 0 && DataWhere.DataStructure[0].Items != null && DataWhere.DataStructure[0].Items.Count > 0) { this._agencyID = ((DataStructureRefType)DataWhere.DataStructure[0].Items[0]).agencyID; } else { throw new Exception(Constants.SDMXWebServices.Exceptions.InvalidSyntax.Message); } } else { throw new Exception(Constants.SDMXWebServices.Exceptions.InvalidSyntax.Message); } } else if ((DataReturnDetailTypes)Enum.Parse(typeof(DataReturnDetailTypes), ReturnDetails.detail) == DataReturnDetailTypes.SeriesKeyOnly) { this._agencyID = "agency"; } this._iusNIds = String.Join(Constants.Comma, IUSNIds.ToArray()); this._areaIds = AreaIds; this._sourceTexts = SourceTexts; if (this.IsMRD == false) { this._timeperiodNIds = this.Get_TimePeriodNIds_From_Text(TimePeriods); } this._languages = new List<string>(); if (string.IsNullOrEmpty(Language)) { foreach (DataRow LanguageRow in this._diConnection.DILanguages(this._diQueries.DataPrefix).Rows) { this._languages.Add(LanguageRow[DevInfo.Lib.DI_LibDAL.Queries.DIColumns.Language.LanguageCode].ToString()); } } else { if (this._diConnection.IsValidDILanguage(this._diQueries.DataPrefix, Language)) { this._languages.Add(Language); } else { this._languages.Add(this._diQueries.LanguageCode.Substring(1)); } } this._dataReturnDetailType = (DataReturnDetailTypes)Enum.Parse(typeof(DataReturnDetailTypes), ReturnDetails.detail); }
/// <summary> /// Processes an XML return details to return the last N observations /// </summary> /// <param name="returnDetails"> /// The return details. /// </param> /// <returns> /// Last N observations. /// </returns> private int? GetReturnDetailsLastNobs(DataReturnDetailsType returnDetails) { return returnDetails.LastNObservations; }
/// <summary> /// Processes an XML return details to return the structure ref elements. /// </summary> /// <param name="returnDetails"> /// The return details. /// </param> /// <returns> /// A List with the structure ref details, first element is the dimensionAtObservation /// and second element of the list the hasExplicitMeasures value if exists. Can be NULL if a structure Ref is not specified /// </returns> private IList<object> GetStructureRefDetails(DataReturnDetailsType returnDetails) { IList<object> structureRefDetails = null; //string dimensionAtObservation = null; if (returnDetails.Structure != null && returnDetails.Structure.Count > 0) { structureRefDetails = new List<object>(); IList<DataStructureRequestType> structureList = returnDetails.Structure; DataStructureRequestType structure = structureList[0]; structureRefDetails.Add(structure.dimensionAtObservation); if (structure.explicitMeasures != null)//.isSetExplicitMeasures()) structureRefDetails.Add(structure.explicitMeasures); } return structureRefDetails; }
/// <summary> /// Processes an XML return details to return the observation Action. Default to ACTIVE /// </summary> /// <param name="returnDetails"> /// The return details. /// </param> /// <returns> /// The observation Action. /// </returns> private ObservationAction GetReturnDetailsObsAction(DataReturnDetailsType returnDetails) { if (returnDetails.observationAction != null)//.isSetObservationAction()) return ObservationAction.ParseString(returnDetails.observationAction); else return ObservationAction.GetFromEnum(ObservationActionEnumType.Active); }
/// <summary> /// Processes an XML return details to return the default limit value /// </summary> /// <param name="returnDetails"> /// The return details. /// </param> /// <returns> /// The default limit value. /// </returns> private int GetReturnDetailsDefaultLimit(DataReturnDetailsType returnDetails) { if (returnDetails.defaultLimit != null)//.isSetDefaultLimit()) return (int)returnDetails.defaultLimit.Value; else return 0; }
/// <summary> /// Fills the type of the data query. /// </summary> /// <param name="queryType">Type of the query.</param> /// <param name="complexDataQuery">The complex data query.</param> /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxException">Too many Selection Groups in ComplexDataQuery max one supported.</exception> public void FillDataQueryType(DataQueryType queryType, IComplexDataQuery complexDataQuery) { var dataReturnDetailsType = new DataReturnDetailsType(); queryType.ReturnDetails = dataReturnDetailsType; // TODO: check null in java if (complexDataQuery.DefaultLimit.HasValue && complexDataQuery.DefaultLimit.Value != 0) { dataReturnDetailsType.defaultLimit = complexDataQuery.DefaultLimit; } if (complexDataQuery.FirstNObservations.HasValue) { dataReturnDetailsType.FirstNObservations = complexDataQuery.FirstNObservations; } if (complexDataQuery.LastNObservations.HasValue) { dataReturnDetailsType.LastNObservations = complexDataQuery.LastNObservations; } if (complexDataQuery.DataQueryDetail != null) { dataReturnDetailsType.detail = complexDataQuery.DataQueryDetail.EnumType.ToString(); } if (complexDataQuery.ObservationAction != null) { dataReturnDetailsType.observationAction = complexDataQuery.ObservationAction.EnumType.ToString(); } HandleStructure(complexDataQuery, dataReturnDetailsType); var whereType = new DataParametersAndType(); queryType.DataWhere = whereType; //DataSetId at DataWhere Leveln - Optional if (complexDataQuery.DatasetId != null) { var datasetIdType = new QueryIDType { TypedValue = complexDataQuery.DatasetId, @operator = complexDataQuery.DatasetIdOperator.Operator }; whereType.DataSetID.Add(datasetIdType); } //DataProvider at DataWhere Level - Optional; if (complexDataQuery.DataProvider != null && complexDataQuery.DataProvider.Count != 0) { HandleDataProvider(complexDataQuery, whereType); } //Dataflow at DataWhere Level - Optional if (complexDataQuery.Dataflow != null) { HandleDataflow(complexDataQuery, whereType); } //ProvisionAgreement at DataWhere Level - Optional if (complexDataQuery.ProvisionAgreement != null) { HandleProvisionAgreement(complexDataQuery, whereType); } //Updated tag that can have 0 to 2 repetitions if (complexDataQuery.LastUpdatedDateTimeRange != null) { HandleLastUpdatedTime(complexDataQuery, whereType); } //Selection Groups - and clause (DataWhere) if (complexDataQuery.SelectionGroups != null && complexDataQuery.SelectionGroups.Count > 1) { throw new SdmxException("Too many Selection Groups in ComplexDataQuery max one supported.", SdmxErrorCode.GetFromEnum(SdmxErrorCodeEnumType.SemanticError)); } if (complexDataQuery.SelectionGroups != null && complexDataQuery.SelectionGroups.Count != 0) { HandleSelectionGroups(complexDataQuery, whereType); } }
/// <summary> /// Handles the structure request type /// </summary> /// <param name="complexDataQuery">The complex data query.</param> /// <param name="dataReturnDetails">The data return details.</param> private static void HandleStructure(IComplexDataQuery complexDataQuery, DataReturnDetailsType dataReturnDetails) { var structure = new DataStructureRequestType(); dataReturnDetails.Structure.Add(structure); if (!string.IsNullOrWhiteSpace(complexDataQuery.DimensionAtObservation)) { structure.dimensionAtObservation = complexDataQuery.DimensionAtObservation; } else { structure.dimensionAtObservation = DimensionObject.TimeDimensionFixedId; } HandleExplicit(complexDataQuery, structure); structure.structureID = DefaultStructureId; if (complexDataQuery.DataStructure != null) { RefBaseType structureRefernce = new StructureRefType(); structureRefernce.agencyID = complexDataQuery.DataStructure.AgencyId; structureRefernce.id = complexDataQuery.DataStructure.Id; structureRefernce.version = complexDataQuery.DataStructure.Version; var structureType = new StructureReferenceType(); structureType.SetTypedRef(structureRefernce); structure.Structure = structureType; } else if (complexDataQuery.ProvisionAgreement != null) { RefBaseType provisionAgreementReference = new ProvisionAgreementRefType(); provisionAgreementReference.id = complexDataQuery.ProvisionAgreement.Id; provisionAgreementReference.agencyID = complexDataQuery.ProvisionAgreement.AgencyId; provisionAgreementReference.version = complexDataQuery.ProvisionAgreement.Version; var provisionAgreementReferenceType = new ProvisionAgreementReferenceType(); provisionAgreementReferenceType.SetTypedRef(provisionAgreementReference); structure.ProvisionAgrement = provisionAgreementReferenceType; } }