Exemple #1
0
        /// <summary>
        /// Get parsed result of request
        /// </summary>
        /// <returns>Object for Write response in streaming <see cref="IFlyWriterBody"/></returns>
        public override IFlyWriterBody GetResult()
        {
            try
            {
                IDataMessageManager dmb = MappingConfiguration.DataFactory(this.VersionTypeResp);
                dmb.Concepts = this.RetrievalManagerObject.GetAllConceptsImpl();


                Builder = new DataMessageObjectBuilder()
                {
                    MessageType       = this.MessageType,
                    _versionTypeResp  = this.VersionTypeResp,
                    _retrievalManager = this.RetrievalManagerObject,
                };
                if (VersionTypeResp == SdmxSchemaEnumType.VersionTwoPointOne && this.WhereStatement != null)
                {
                    Builder.DimensionAtObservation = this.WhereStatement.DimensionAtObservation;
                    if (!string.IsNullOrEmpty(Builder.DimensionAtObservation))
                    {
                        IConceptObjectImpl DimAtObs = dmb.Concepts.Find(c => c.Id.Trim().ToUpper() == Builder.DimensionAtObservation);
                        if (DimAtObs != null && DimAtObs is IDimensionConcept &&
                            ((IDimensionConcept)DimAtObs).DimensionType != DimensionTypeEnum.Time && DimAtObs.Id != "AllDimensions")
                        {
                            throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.NotImplemented, new Exception("DimensionAtObservation can be only TIME_PERIOD or AllDimensions"));
                        }
                    }
                }
                if (this.WhereStatement.IsRest)
                {
                    this.WhereStatement.BuildRestQuery(this.RetrievalManagerObject);
                }


                WriteResponseDelegate callback = new WriteResponseDelegate(Builder.WriteDataMessage);
                return(dmb.GetTableMessage(DataFlowElementId, this.WhereStatement, callback, this.TimeStamp));
            }
            catch (SdmxException) { throw; }
            catch (Exception ex)
            {
                throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.DataMessageEngineGetResults, ex);
            }
            finally
            {
                DestroyObjects();
            }
        }