/// <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);

        }
コード例 #2
0
        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;
            }
        }